渲染3d模型的问题在2d gui

时间:2016-05-14 06:47:15

标签: c# opengl 3d render orthographic

我想出了为什么我的模型在透视模式下渲染得很好,但在正交模式下出错。该模型由2个立方体组成,一个大,一个小。在Ortho模式中,小立方体在大型立方体后面呈现,尽管它不应该:

enter image description here

很明显,我正在做正确的事情,因为大型立方体完全正确呈现,即使在任何方向旋转也是如此。也许与在正交模式下深度缓冲是线性的事实有关? 在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();
}

最后,他是一个GIF动画片,它在旋转时表现如何: enter image description here

1 个答案:

答案 0 :(得分:0)

原来这只是一个愚蠢的错误 - 我忘了启用深度屏蔽-.-