【问题标题】:OpenGL Display Error - Incorrect displayOpenGL 显示错误 - 显示不正确
【发布时间】: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 函数让它工作了,但我仍然不明白为什么。

标签: java opengl lwjgl


【解决方案1】:

glOrtho 设置您的查看区域。由于您的形状适合 1 个正方形单位,但您希望能够看到整个事物,您可以将近处和远方设置为包围整个形状(2、-2 所做的),或者您可以设置您的glOrtho 类似于 glOrtho(-1, 1, -1, 1, 0, -5);并将您的形状向后平移,使其位于视野中。

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

你的意思是让一切都在一个正交视图中,还是你的意思是有透视?正字法视图是翻译最初没有帮助的原因。

【讨论】:

  • 附带说明,深度测试似乎未启用。这可能应该启用;然后记得将深度缓冲区位添加到 glClear,即glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
猜你喜欢
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2017-09-17
  • 2016-01-28
相关资源
最近更新 更多