forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=108)
-   -   Реализация простой камеры. (http://forum.boolean.name/showthread.php?t=5025)

XenuS 15.11.2007 15:57

Re: Реализация простой камеры.
 
ок, буду искать ошибку....спс))

Данил 16.11.2007 01:02

Re: Реализация простой камеры.
 
Ура! Я сделал управление с клавы и мыши! Терь все как положено...

Теперь надо понять текстурирование...

Данил 17.11.2007 15:03

Re: Реализация простой камеры.
 
Гы. оказывается, сделал я неправильно. Я, так сказать, крутил весь с мир, а сама камеры была на месте...

Это оказывается неправильно...

Правильно - это применять gluLookAt() ... но какие параметры и че - хз...
Вот, кстати, нашел инфу об этой функции:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.


Мож кому-то понадобится...

jimon 17.11.2007 19:52

Re: Реализация простой камеры.
 
Данил
ну там 9 параметров
3 параметра ето x,y,z точки где стоит камера
3 параметра ето x,y,z точки куда смотрит камера
3 параметра ето x,y,z куда смотрит "верх" камеры
ну типа чтобы камеру можно было вращать вокруг своей оси
которая проходит через центр обьектива

Данил 17.11.2007 20:07

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.

Вначале перемещаем и крутим объект. Потом закрепляем как-нибудь. И уже сново поворачиваем, но уже вокруг своей оси...



вот... как именно - я хз...

HolyDel 17.11.2007 23:31

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);


Данил 18.11.2007 00:00

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

Ура! Сейчас текстурами займусь...

HolyDel 18.11.2007 02:20

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), это должно быть всем известно с институтской скамьи.
Если ты сначала повернеш мир, а потом его переместиш, то он у тебя переместится в другую точку (мир то уже перевернут).
а вот если ты его сначала переместиш а потом перевернеш, то он переместится туда, куда тебе надо.


Часовой пояс GMT +4, время: 20:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot