【发布时间】:2013-09-14 22:17:52
【问题描述】:
我正在学习 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());
【问题讨论】:
-
你能发布你的视口创建代码吗?我不知道三角形是被你的近截锥体还是远截锥体截断,甚至两者兼而有之。我想你在第二张照片中看到了金字塔的内部,在第一张照片的黑点中看到了世界的背面。然而,这似乎违反直觉,因为移动得更远应该会导致你在第一张图片中得到什么,如果你靠近,你应该看到金字塔的内部。另外,你还有其他的变换吗?什么 vert 参数映射到什么颜色? X->红色,Y->绿色?
-
@zero298 我已经包含了初始化opengl的代码。我也没有任何着色器。我已经通过更改 glOrtho 函数让它工作了,但我仍然不明白为什么。