Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

2 вопроса по GLScene(вроде простые)   Найти похожие ветки 

 
Antichacker   (2003-01-31 10:32) [0]

Вопросы вроде простые, но в демках я этого не нашел.
1. Как сделать так, чтобы объект двигался вперед? Вперед - это в зависимости от ориентации объекта, а не inc(Object.Position.X), как мне уже посоветовали. Конкретнее: модель космического корабля надо заставить лететь вперед.
2. Как загрузить эту самую модель и куда её загружать? В TFreeForm я этого не нашел(может быть так искал)


 
pasha676   (2003-01-31 11:00) [1]

1. У тебя есть вектор ориентации объекта. Чтобы сделать движение объекта, надо работать с ним, а потом результаты прибавлять к позиции объекта. Т.о. делаються повороты и вообще любое движение.

2. Пример с грибом. Там все есть.


 
MRB_SPB   (2003-01-31 12:02) [2]

V(x,y,z) - вектор(направление скорости)
POSn=ADDVECTOR(POSc,V)


 
Antichacker   (2003-01-31 15:16) [3]

Посмотрел демку pong, так и не понял, как работать с векторами. Таокй вопрос: нет ли у кого краткой демки ТОЛЬКО по движению(например движется вперед куб, у него изменяется наклон-> изменяется направление движения)
И ещё: почему может не выводиться безтекстурная модель .3ds? GLViewer открывает без проблем, при попытке freeform1.loadfromfile("turbo.3ds") ошибок не выдает, но и не отображает ничего.


 
pasha676   (2003-01-31 16:03) [4]

Демки нет. Есть математика. Я опишу для 2-ух мерного пространства "на пальцах", до остального допрешь сам.

1. Дан объект. У него есть вектор координат (его положения) и вектор ориентации в пространстве (в трехмерном их кстати два, а не один - один "направление носа", второй "где верх" - расположение фигуры в 3Д пространстве определяется 9-ю координатами, имей ввиду).
Пусть он находиться в точке (12,16). И его перед смотрит по вектору (0.2, 0.8). На самом деле вектор должен быть единичным, ну фиг с ним (в ОпеньГЛ он автоматом становиться единичным). Считать не охото.
2. Дана скорость. Пусть по модулю десять.

Тогда в следующий момент мы должны расположить объект в координатах <координаты старые>+<приращение>.
Приращение как раз и определиться вектором направления и скоростью (0.2*10, 0.8*10). Т.е. к текущим координатам ты добавляешь (2, 8) итого помещаем объект в (14,24).
Кажется все правильно расписал. В 3D тоже самое. Немного задача усложняется, если надо ехать не прямо по курсу, а в сторну. Как правило в этом случае лучше скорость представлять не модулю, а тоже как вектор. Вообще почитай книжку по векторам. Математику.


> при попытке freeform1.loadfromfile("turbo.3ds") ошибок не
> выдает, но и не отображает ничего.

Камера смотрит не туда. Объект очень большой и камера внутри его. Объект очень мал или далек. Нормали объекта расположены не туда. Иногда из за света (в кромешной тьме тоже не видать). Пожалуй основные причины.


 
Antichacker   (2003-01-31 17:01) [5]

Пасиба за объяснение - но оно не совсем по теме. Я не понял как работать с векторами в GLScene - теорию 3D-графики-то я знаю, хоть и не очень хорошо :-(, поэтому и попросил демку


 
Alek Aaz   (2003-01-31 18:08) [6]

Мля сколько умных слов в пустую :)
Вешаешь в сцену
Actor1
Загрузка Actor1.LoadFromFile("cobramk3.3ds");
Движение Actor1.Move(cobramk3_speed);
Ориентация
Actor1.Direction.x:=....
Actor1.Direction.y:=....
Actor1.Direction.z:=....
Плюс
Actor1.Up.x:=....
Actor1.Up.y:=....
Actor1.Up.z:=....
Direction - Вектор-направление относительно основной системы координат.
Up - Черт знает какой вектор - влияет на положение относительно своей системы координат.
Оба - единичный вектор.
Повернуть относительно осей(каких я пока путаюсь) на угол:
Actor1.Pitch
Actor1.Roll
Actor1.Turn
С 3Д математикой у меня туго, ничем помочь не могу. Пример послать - легко. Только без движения вперед.


 
[Baradoo]   (2003-01-31 21:12) [7]

var
x,z:glfloat; //позиция черепахи
heading:glfloat=0; //угол поворота БАШКИ
speed:glfloat=1; //скорость
...
procedure KeyDown(...)
begin
if key = vk_up then begin
X := X - sin(Heading*pi/180)*speed;
Z := Z + cos(Heading*pi/180)*speed;
end;
if key = vk_left then heading:=heading-10;
if key = vk_right then heading:=heading+10;
end;

procedure Draw;
begin
glLoadIdentity(); //сбрасываем вид
glRotate(Heading, 0, 1, 0); //поворачиваемся
glTranslatef(X, 0, Z); // перемещаемся
drawworld; // рисуем мир
end;

Прим...
0<Heading<360




 
Alek Aaz   (2003-02-01 06:19) [8]

Да, забыл, по поводу
при попытке freeform1.loadfromfile("turbo.3ds") ошибок не выдает, но и не отображает ничего.
Есть такая фича - если координата Camera1.Position.х=0 или какая то их комбинация, то ничего не отображается ... короче камера не должна иметь координат с 0.


 
Antichacker   (2003-02-01 08:17) [9]

Всем пасиба за объяснения! 2D-режим я уже понял. У меня остался только часть старого вопроса и один новый:
1. В 3D-режиме существует 2 разных угла ориентации(Roll я не трогаю, это поворот вокруг своей оси). Если Turn=0, а Pitch=180, то это выглядит, как Turn=180. Как работать с двумя углами?
2. Можно ли вывести спрайт по маске?


 
Alek Aaz   (2003-02-01 10:42) [10]

ЭЭээээээ чаво-чаво?

Насколько я успел узнать GLScene спрайты не вращает. Вернее вращает плоскость на которую они выводятся, а спрайт как бы проецируется на эту плоскость. Короче, Ни Turn`om ни Pitch"ем спрайт не повернешь. Поворачивается он свойством Rotation. В этом свойстве указывается угол, на который повернут спрайт.

Месяца два назад воял пример, с подробными объяснениями как использовать спрайты, да забросил. Если хочешь можешь доделать :)

Что ты понимаешь под вывести спрайт по маске ?


 
Antichacker   (2003-02-01 12:39) [11]

Не, работа со спрайтами была отдельным вопросом. Вывести спрайт по маске - наложить на объектив камеры картинку, которая не меняется. Короче - вывести вид-картинку из кабины звездолета. Работу со спрайтами я не знаю вообще, можно мне маленькую демку? :-)

С подгрузкой модели я разобрался, но появился другой вопрос: как на эту модель наложить текстуру? ar1.material.texture.image.loadfromfile("D:\raidertex.bmp") не помогает

Первый вопрос так и остался. Как двигать звездолет вперед?


 
Antichacker   (2003-02-02 07:24) [12]

Уточнение: двигать туда, куда направлен "нос", как бы его не вращали по всем трем осям вращения. А "вид-картинка" - bmp-файл с нарисованными приборами


 
Alek Aaz   (2003-02-02 08:09) [13]

А я тебе как советовал? Ты так делал? Ладно вышлю пример.


 
Antichacker   (2003-02-02 08:46) [14]

Вопрос по движению снимается.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-77917
FiendAndre
2003-07-10 10:34
2003.07.24
Перекодировка текста win-to-dos


1-77939
SergeyN
2003-07-09 18:39
2003.07.24
EOleSysError


1-77919
jiura1
2003-07-10 13:12
2003.07.24
А как работать в Grid-е со свойством ToplLeft?


1-77976
bloodman
2003-07-10 23:14
2003.07.24
Реестр


1-77844
Cr@zy-EyE
2003-07-12 17:54
2003.07.24
Invalid Pointer Operation





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский