更换Z坐标(OpenGL)时没有显示的对象?

时间:2012-10-13 18:58:42

标签: c opengl perspectivecamera

在OpenGL中渲染时遇到问题。一切都很好,直到我改变Z坐标,它被剪裁/它不在视野中!那是怎么回事?我设置我的透视投影矩阵是错误的吗?我很难过......

我的渲染代码的相关位(mat4_ funcs是一个外部库,与他们的GL朋友类似)。

vec3_t eyevec = vec3_create(NULL);
eyevec[0] = 0.0f;
eyevec[1] = 0.0f;
eyevec[2] = 0.1f;
vec3_t centervec = vec3_create(NULL);
centervec[0] = 0.0f;
centervec[1] = 0.0f;
centervec[2] = 0.0f;
vec3_t upvec = vec3_create(NULL);
upvec[0] = 0.0f;
upvec[1] = 1.0f;
upvec[2] = 0.0f;

vec3_t transvec = vec3_create(NULL);
transvec[0] = 0.0f;
transvec[1] = 0.0f;
transvec[2] = -2.0f;

mat4_t perspective = mat4_perspective(60.0f, 800.0f / 600.0f, 0.1f, 100.0f, NULL);
mat4_lookAt(eyevec, centervec, upvec, perspective);

mat4_t modelview = mat4_identity(NULL);
//mat4_translate(modelview, transvec, modelview); objects vanish when doing this!
mat4_multiply(perspective, modelview, perspective);

const GLfloat verts[] = {
   //verts
   0.0f, 0.0f, 0.0f, 1.0f,
   0.0f, 0.5f, 0.0f, 1.0f,
   0.5f,  0.5f, 0.0f, 1.0f,
   0.5f,  0.0f, 0.0f, 1.0f,
   //colors
   1.0f, 0.3f, 0.4f, 0.5f,
   0.5f, 0.1f, 0.4f, 0.3f,
   0.0f,  1.0f, 0.5f, 0.6f,
   0.0f,  1.0f, 0.5f, 0.6f,
   //tex coords
   0.0f, 0.0f,
   0.0f, 1.0f,
   1.0f, 1.0f,
   1.0f, 0.0f,
};

const GLushort indices[] = {3, 0, 2, 0, 2, 1};

    glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_SHORT, NULL);

另请注意,我尝试过正向和反向翻译。

1 个答案:

答案 0 :(得分:0)

您评论的附近是0.1f,而在翻译时您将z:transvec [2]设置为-2.0f。

所以它在近平面之前,这意味着它将在世界空间的眼睛后面呈现。

这似乎是它消失的原因。