Java OpenGL显示错误-显示不正确

Java OpenGL显示错误-显示不正确,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在学习OpenGL,但我遇到了错误渲染的问题。这就是我遇到的问题,金字塔两侧之间有空隙 这里是我用来构造的顶点 // 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,

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

这里是我用来构造的顶点

// 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);
这就产生了这种奇怪的行为,有更多的倾向

渲染了三个面,但只应查看两个面!我怎样才能解决这个问题?我还启用了深度测试

下面是我初始化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());

glOrtho设置您的查看区域。因为你的形状适合一个正方形单位,但是你想看到整个东西,你可以将你的近距离和远距离设置为包围整个形状(2,-2就是这样做的),或者你可以将你的格洛托设置为类似格洛托的东西(-1,1,-1,1,0,-5);然后将形状向后平移,使其位于视野中

另一个(不好的)选择是更改顶点的绝对位置,使它们位于近场和远场范围内,但我不建议这样做,因为这通常是平移和变换的要点


你的意思是把所有的东西都放在一个正交的视图中,还是放在透视图中?正交视图是翻译最初没有帮助的原因。

可以发布视口创建代码吗?我不知道这个三角形是被你的近截头体还是远截头体,甚至是两者的组合切断了。我想你在第二张照片中看到了金字塔的内部,在第一张照片的黑点中看到了世界的背面。然而,这似乎是反直觉的,因为离得越远,你就会得到第一张图片中的结果,如果你走近一点,你就会看到金字塔的内部。还有,还有其他的变换吗?哪个垂直参数映射到哪个颜色?X->红色,Y->绿色?@zero298我已经包含了初始化opengl的代码。而且我没有任何着色器。我已经把它改成了glOrtho函数,但我仍然不明白为什么。另一方面,深度测试似乎没有启用。可能应该能够做到这一点;请记住将深度缓冲位添加到glClear,即
glClear(GL_COLOR_buffer_位| GL_depth_buffer_位)