在OpenGL中渲染时出现问题。一切显示正常,直到我更改Z坐标为止,它都会被剪裁/看不见!那是怎么回事吗?我设置透视投影矩阵是否错误?我难过...
我的渲染代码的相关位(mat4_
函数是一个外部库,类似于其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);
另外请注意,我尝试过在正向和负向两个方向上进行翻译。
最佳答案
您评论的近距离为0.1f,而在翻译时,您将z:transvec [2]设置为-2.0f。
因此它位于近平面之前,这意味着它将在世界空间中渲染到您的眼睛后面。
这似乎就是为什么它消失了。
关于c - 更改Z坐标(OpenGL)时不显示对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12876007/