OpenGL显示错误 - 显示不正确

时间:2013-09-11 02:54:20

标签: java opengl lwjgl

我正在学习OpenGL,但我遇到了渲染错误的问题。这就是我遇到的问题,金字塔两边之间存在间隙。

enter image description here

以下是我用来构建的顶点。

// Create Pyramid Vertex Buffer
FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(3 * 12);
vertexBuffer.put(new float[]
{
    // Side one
    0f, 0.8f, 0f,
    -0.8f, -0.8f, 0.8f,
    0.8f, -0.8f, 0.8f,

    // Side two
    0f, 0.8f, 0f,
    0.8f, -0.8f, 0.8f,
    0.8f, -0.8f, -0.8f,

    // Side three
    0f, 0.8f, 0f,
    0.8f, -0.8f, -0.8f,
    -0.8f, -0.8f, -0.8f,

    // Side four
    0f, 0.8f, 0f,
    -0.8f, -0.8f, -0.8f,
    -0.8f, -0.8f, 0.8f
});
vertexBuffer.rewind();

我认为这是因为模型出现在屏幕之外。所以我认为在z轴上进行翻译应该没问题,我在调用glDrawArrays

之前添加了这一行
glTranslatef(0f, 0f, -1f);

这就产生了这种奇怪的行为,有更多的方面被吸引。

enter image description here

三面都被渲染,但它只能看到两个!我怎么解决这个问题?我也启用了深度测试。

以下是我初始化OpenGL的方法

// Initialize OpenGL
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, 1, -1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glViewport(0, 0, Display.getWidth(), Display.getHeight());

1 个答案:

答案 0 :(得分:2)

glOrtho设置您的观看区域。由于你的形状适合1平方单位,但你希望能够看到整个东西,你可以让你的近和远设置包围整个形状(2,-2做)或你可以设置你的glOrtho像glOrtho(-1,1,-1,1,0,-5);然后将你的形状向后翻转,使其处于视野范围内。

另一个(坏)选项是改变你的顶点的绝对位置,使它们落在近场和远场中,但我不会推荐它,因为那是翻译和转换的重点。

您的意思是将所有内容都放在正交视图中,还是意味着要有视角?正交观点是为什么翻译最初没有帮助。