Форум: "Игры";
Текущий архив: 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