我正在学习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());
答案 0 :(得分:2)
glOrtho设置您的观看区域。由于你的形状适合1平方单位,但你希望能够看到整个东西,你可以让你的近和远设置包围整个形状(2,-2做)或你可以设置你的glOrtho像glOrtho(-1,1,-1,1,0,-5);然后将你的形状向后翻转,使其处于视野范围内。
另一个(坏)选项是改变你的顶点的绝对位置,使它们落在近场和远场中,但我不会推荐它,因为那是翻译和转换的重点。
您的意思是将所有内容都放在正交视图中,还是意味着要有视角?正交观点是为什么翻译最初没有帮助。