OpenGL ES中的glFrustum():为什么形状看起来大小相同?

时间:2011-09-21 04:06:03

标签: opengl-es

我试图了解OpenGL中的透视图。 我想要做的是渲染两个相同的三角形,但在不同的z坐标,所以我认为它们应该以不同的大小出现。这是我的代码:

CUSTOMVERTEX Vertices[] =
{
    { 0.5f,  1.0f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f }, // x, y, z, color
    { 0.0f, 0.0f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f },
    { 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f },
};

和绘图

glDrawArrays(GL_TRIANGLES,0, 3);
glTranslatef(0.0f,-1.0f,-1.5f);
glDrawArrays(GL_TRIANGLES,0, 3);

这是我如何初始化一些属性

glShadeModel(GL_SMOOTH);
glClearDepthf(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 100.0f);
glMatrixMode(GL_MODELVIEW);                   
glLoadIdentity();

但三角形出现的大小相同,只是在我翻译Y时的不同位置。 有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

您不能将0.0用于透视投影的近Z值。它必须是大于零的正数。优选约1.0左右。

答案 1 :(得分:0)

正如尼科尔所说,你应该使用大于0的数字进行截头构造。我强烈建议您阅读此article以了解其原因。