我是OpenGL的新手,当时我在玩用不同z坐标绘制三角形的游戏。据我了解,z轴指向屏幕外,-z轴指向屏幕。

当我在一个0.0 z坐标处绘制一个具有3个角的正方形,而最后一个角在3.0 z坐标处绘制时,我得到了:



我不明白它是如何形成这种形状的...我想应该是这样的,因为第四个顶点就在'遥远的地方'。

<

有人可以解释吗?

编辑:这是我的顶点数据

// vertex array
float vertices[] = {
    -0.5f,  0.5f,  0.0f, 1.0f, 0.0f, 0.0f, // top left, first 3 are location, last 3 are color
     0.5f,  0.5f,  0.0f, 0.0f, 1.0f, 0.0f, // top right
    -0.5f, -0.5f,  -2.0f, 0.0f, 0.0f, 1.0f, // bottom left
     0.5f, -0.5f,  0.0f, 1.0f, 1.0f, 1.0f // bottom right
};

// element buffer array
GLuint elements[] = {
    0, 1, 2,
    2, 1, 3
};


我在叫抽奖,就像:

glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT,0);


评论

您正在应用哪些转换?还是这些坐标直接在剪辑空间中没有变换?您如何对正方形进行三角剖分?

没有转换,我编辑了帖子以显示代码

#1 楼

OpenGL中的投影后Z范围在-1和1之间扩展。因此,Z值2超出范围,并且将被远平面裁剪。

出现正方形的原因缺少一个象限是因为它从左下角到右上角分成多个三角形,因此每个三角形都有Z = 0的两个顶点和Z = 2的一个顶点。因此,沿着三角形插值,命中Z = 1(远平面),超出范围的所有内容都会被裁剪。这将导致每个三角形的一半消失。

顺便说一句,您需要透视投影矩阵,以使远处的对象在屏幕上显得更小。没有投影矩阵,您就可以有效地使用平行投影。