Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL中照相机的帮助_C++_C_Opengl - Fatal编程技术网

C++ OpenGL中照相机的帮助

C++ OpenGL中照相机的帮助,c++,c,opengl,C++,C,Opengl,现在,我的应用程序在camera.rotationX,Y Z上旋转,并在modelview矩阵上对camera.x,Y,Z进行a平移。我怎么能把这个含糊其辞地说成是给gluLookAt打电话 谢谢 基本上我怎么能得到这个: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //starts here glRotatef(Camera.rotx,1,0,0); glRotatef(Camera.roty,0,1,0)

现在,我的应用程序在camera.rotationX,Y Z上旋转,并在modelview矩阵上对camera.x,Y,Z进行a平移。我怎么能把这个含糊其辞地说成是给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,使其看起来相同

谢谢

我之所以要这样做,是因为我发现了一个fustrum culling类,它与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);
}

你的眼睛位置E将是(摄像机x,摄像机y+4.5,摄像机z)。 如果我没记错的话,OpenGL中的默认视图向量V是(0,0,-1) 默认的上方向向量U是(0,1,0)

所以你用你的相机旋转这两个向量。 看到或看到。 然后,“中心”是旋转的视图向量“视图向量+摄影机向量”。 上方向向量就是旋转的上方向向量

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

你的眼睛位置E将是(摄像机x,摄像机y+4.5,摄像机z)。 如果我没记错的话,OpenGL中的默认视图向量V是(0,0,-1) 默认的上方向向量U是(0,1,0)

所以你用你的相机旋转这两个向量。 看到或看到。 然后,“中心”是旋转的视图向量“视图向量+摄影机向量”。 上方向向量就是旋转的上方向向量

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

不要使用gluLookAt、glRotate或GlorTo,因为它们在 OpenGL 3规范。去抓取glm库,然后改为这样做

照相机的例子。
#包括
#包括
#包括
glm::vec4位置=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模型=glm::mat4(1.0f);
模型=glm::旋转(模型,90.0f,glm::vec3(0.0f,1.0f,0.0));
glm::mat4 mv=视图*模型;
glm::vec4转换=mv*位置;
不推荐的函数替换

不要使用gllookat、glRotate或glor,因为它们都是在 OpenGL 3规范。去抓取glm库,然后改为这样做

照相机的例子。
#包括
#包括
#包括
glm::vec4位置=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模型=glm::mat4(1.0f);
模型=glm::旋转(模型,90.0f,glm::vec3(0.0f,1.0f,0.0));
glm::mat4 mv=视图*模型;
glm::vec4转换=mv*位置;
不推荐的函数替换