Помогите с камерой в OpenGL - PullRequest
       3

Помогите с камерой в OpenGL

0 голосов
/ 07 сентября 2010

Прямо сейчас мое приложение вращается на camera.rotationX, Y Z и выполняет -перемещение camera.x, y, z на матрицу вида модели. Как я могу связать это с вызовом gluLookAt?

Спасибо

в принципе, как я мог получить это:

    glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();

//starts here
     glRotatef(Camera.rotx,1,0,0);
     glRotatef(Camera.roty,0,1,0);
     glRotatef(Camera.rotz,0,0,1);

     glTranslatef(-Camera.x , -Camera.y - 4.5,-Camera.z );

Вместо вызова gluLookAt, который бы выглядел так же.

Спасибо

Причина, по которой я хочу это сделать, заключается в том, что я нашел класс отбраковки, который работает с gluLookAt, как показано ниже

void FrustumG::setCamDef(Vec3 &p, Vec3 &l, Vec3 &u) {

    Vec3 dir,nc,fc,X,Y,Z;

    Z = p - l;
    Z.normalize();

    X = u * Z;
    X.normalize();

    Y = Z * X;

    nc = p - Z * nearD;
    fc = p - Z * farD;

    ntl = nc + Y * nh - X * nw;
    ntr = nc + Y * nh + X * nw;
    nbl = nc - Y * nh - X * nw;
    nbr = nc - Y * nh + X * nw;

    ftl = fc + Y * fh - X * fw;
    ftr = fc + Y * fh + X * fw;
    fbl = fc - Y * fh - X * fw;
    fbr = fc - Y * fh + X * fw;

    pl[TOP].set3Points(ntr,ntl,ftl);
    pl[BOTTOM].set3Points(nbl,nbr,fbr);
    pl[LEFT].set3Points(ntl,nbl,fbl);
    pl[RIGHT].set3Points(nbr,ntr,fbr);
    pl[NEARP].set3Points(ntl,ntr,nbr);
    pl[FARP].set3Points(ftr,ftl,fbl);
}

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Не используйте gluLookAt, glRotate или glOrtho, поскольку в спецификации OpenGL 3 все это устарело.Возьмите библиотеку glm http://glm.g -truc.net / и сделайте это вместо ...

Пример камеры.

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtx/transform2.hpp>

glm::vec4 position = glm::vec4( 1.0f, 0.0f, 0.0f, 1.0f );
glm::mat4 view = glm::lookAt( glm::vec3(0.0,0.0,5.0),
glm::vec3(0.0,0.0,0.0),
glm::vec3(0.0,1.0,0.0) );
glm::mat4 model = glm::mat4(1.0f);
model = glm::rotate( model, 90.0f, glm::vec3(0.0f,1.0f,0.0) );
glm::mat4 mv = view * model;
glm::vec4 transformed = mv * position;

Замена устаревших функций

http://glm.g -truc.net / апи-0.9.2 / a00003.html

1 голос
/ 13 сентября 2010

Хорошо, ваше положение глаз E будет (Camera.x, Camera.y + 4.5, Camera.z). Вектор представления по умолчанию V (0, 0, -1) в OpenGL, если я правильно помню и вектор повышения по умолчанию U равен (0, 1, 0).

Таким образом, вы поворачиваете эти два вектора с помощью вращения вашей камеры. См http://en.wikipedia.org/wiki/Rotation_matrix или http://en.wikipedia.org/wiki/Quaternion. Центр - это повернутый вектор вида. Вектор вида + вектор камеры. Вектор вверх - это просто повернутый вверх вектор.

gluLookAt(Camera.x, Camera.y + 4.5, Camera.z, Camera.x + V.x, Camera.y + V.y, Camera.z + V.z, U.x, U.y, U.z)
gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz : glDouble);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...