我想出了为什么我的模型在透视模式下渲染得很好,但在正交模式下出错。该模型由2个立方体组成,一个大,一个小。在Ortho模式中,小立方体在大型立方体后面呈现,尽管它不应该:
很明显,我正在做正确的事情,因为大型立方体完全正确呈现,即使在任何方向旋转也是如此。也许与在正交模式下深度缓冲是线性的事实有关? 在orthomode中我的znear和zfar值为0.4和1000.启用深度测试。模型(=两个立方体)存储在具有3个vbos的VAO中(对于顶点,uv和rgbas)
使用此着色器渲染模型:
顶点:
q4
片段:
#version 330
#extension GL_ARB_explicit_attrib_location: enable
layout(location = 0) in vec3 vertexPositionIn;
layout(location = 1) in vec2 uvIn;
layout(location = 2) in vec4 colorIn;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
out vec2 uv;
out vec4 color;
void main(void)
{
uv = uvIn;
color = colorIn;
gl_Position = projectionMatrix * modelViewMatrix * vec4(vertexPositionIn, 1.0);
}
正交模式设置
#version 330
in vec2 uv;
in vec4 color;
uniform sampler2D itemTex;
void main () {
gl_FragColor = texture(itemTex, uv) * color;
}
画出电话:
public void OrthoMode(int width, int height)
{
GlMatrixModeProjection();
GlPushMatrix();
GlLoadIdentity();
GlOrtho(0, width, height, 0, 0.4f, 1001);
LoadCurrentProjectionMatrix();
GlMatrixModeModelView();
GlPushMatrix();
GlLoadIdentity();
GlTranslate(0, 0, -500); // Translate far in the back so we can also render 3d stuff
LoadCurrentModelViewMatrix();
}
答案 0 :(得分:0)
原来这只是一个愚蠢的错误 - 我忘了启用深度屏蔽-.-