|
3D-программирование miniB3D, OpenGL |
15.11.2007, 15:57
|
#16
|
Нуждающийся
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
|
Re: Реализация простой камеры.
ок, буду искать ошибку....спс))
|
(Offline)
|
|
16.11.2007, 01:02
|
#17
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Re: Реализация простой камеры.
Ура! Я сделал управление с клавы и мыши! Терь все как положено...
Теперь надо понять текстурирование...
|
(Offline)
|
|
17.11.2007, 15:03
|
#18
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Re: Реализация простой камеры.
Гы. оказывается, сделал я неправильно. Я, так сказать, крутил весь с мир, а сама камеры была на месте...
Это оказывается неправильно...
Правильно - это применять gluLookAt() ... но какие параметры и че - хз...
Вот, кстати, нашел инфу об этой функции:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
|
Мож кому-то понадобится...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.11.2007, 19:52
|
#19
|
|
Re: Реализация простой камеры.
Данил
ну там 9 параметров
3 параметра ето x,y,z точки где стоит камера
3 параметра ето x,y,z точки куда смотрит камера
3 параметра ето x,y,z куда смотрит "верх" камеры
ну типа чтобы камеру можно было вращать вокруг своей оси
которая проходит через центр обьектива
|
|
|
17.11.2007, 20:07
|
#20
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Re: Реализация простой камеры.
Ну я вроде как разобрался уже...
Разницы не заметил между отдельными функциями, и этим глуком gluLookAt ...
Хех...
Никто не знает, как повернуть объект вокруг себя?
Есил поворасчивать вначале цикла, а потом по глобальным координатам переставлять - параша получается.
Если вначалае переместить по глобальным координатам, а затем вертим, то объект поворачивается не вокруг своей оси, а вокруг 0, то есть по большому радиусу...
Пытался методом тыка - не получилось...
Method Draw()
Local xtrans:Float, ztrans:Float
Local scenerotX:Float, scenerotY:Float
'Вычеляем мировые координаты поворота.
scenerotX = 360.0 - CameraRX
scenerotY = 360.0 - CameraRY
'координаты мировые пооложения в простарнстве
xtrans=-CameraX
ztrans=-CameraZ
glLoadIdentity
' Перемещаем по мировым координатам.
glRotatef -scenerotY, 1,0,0
glRotatef scenerotX, 0,1,0
glTranslatef xtrans, 0, ztrans
'Рисуем...
glBegin GL_QUADS
For Local i = 0 To VerteCol
glColor3f 0.9, 0.2, 0.15
glVertex3f VertexX[i], VertexY[i],VertexZ[i]
Next
glEnd
End Method
End Type
glRotated RotateSpeed, RotateX,RotateY,RotateZ
А вот он мега аццкий код , вертящий объект...
Но вот как его вокруг своей оси - хз...
Вариант 1.
При вызове функции поворота мы поворачиваем объект и как-нибудь записываем текущие координаты
вариант 2.
Вначале перемещаем и крутим объект. Потом закрепляем как-нибудь. И уже сново поворачиваем, но уже вокруг своей оси...
вот... как именно - я хз...
|
(Offline)
|
|
17.11.2007, 23:31
|
#21
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Реализация простой камеры.
сначала перемещаем, потом крутим. вот кусок кода:
glPushMatrix();
glTranslatef(x,y,z);
if(parent!=NULL)
{
if(parent->sx!=1.0f||
parent->sy!=1.0f||
parent->sz!=1.0f)
{
glScalef(1.0f/parent->sx,1.0f/parent->sy,1.0f/parent->sz);
}
}
glRotatef(az,0,0,1);
glRotatef(ay,0,1,0);
glRotatef(ax,1,0,0);
/*
if(parent!=NULL)
{
if(parent->sx!=1.0f||
parent->sy!=1.0f||
parent->sz!=1.0f)
{
glScalef(parent->sx,parent->sy,parent->sz);
}
}
*/
if(sx!=1.0f||sy!=1.0f||sz!=1.0f)
glScalef(sx,sy,sz);
|
(Offline)
|
|
18.11.2007, 00:00
|
#22
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Re: Реализация простой камеры.
Ура! наконец-то я сделал! HolyDel, спасиб те.
// Перемещаем относительно камеры
glRotatef -scenerotY, 1,0,0
glRotatef scenerotX, 0,1,0
glTranslatef xtrans, 0, ztrans
//Перемещаем относительно своих координат!
glTranslatef x, y, z
glRotated RotateSpeed, RotateX,RotateY,RotateZ
Ура! Сейчас текстурами займусь...
|
(Offline)
|
|
18.11.2007, 02:20
|
#23
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Реализация простой камеры.
начало координат ВСЕГДА в камере. твой драгоценный gluLookAt ничо другого не делает кроме как перемещает и поворачивает МИР.
// Перемещаем относительно камеры
glRotatef -scenerotY, 1,0,0
glRotatef scenerotX, 0,1,0
glTranslatef xtrans, 0, ztrans
//Перемещаем относительно своих координат!
glTranslatef x, y, z
glRotated RotateSpeed, RotateX,RotateY,RotateZ
|
вообще то нет. умножение матриц не коммутативно (т.е. AxB != BxA), это должно быть всем известно с институтской скамьи.
Если ты сначала повернеш мир, а потом его переместиш, то он у тебя переместится в другую точку (мир то уже перевернут).
а вот если ты его сначала переместиш а потом перевернеш, то он переместится туда, куда тебе надо.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:02.
|