Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
1-77925
Непомню
2003-07-10 14:37
2003.07.24
SynEdit и Delphi 7


1-77946
Erik
2003-07-10 16:30
2003.07.24
В чем отличия CallBack для DCOM и Borland Socket Server?


1-77956
Multy
2003-07-10 03:09
2003.07.24
Как перехватить нажатие любой клавиши


6-78032
zhe
2003-05-16 03:34
2003.07.24
MAPI


3-77739
MakNik
2003-06-27 09:34
2003.07.24
как в DBCtrlGrid сделать кнопу