在深入研究细节之前,我添加了opengl标签,因为JoGL是一个Java OpenGL绑定,并且两个专家都可以回答这些问题。
基本上我要做的是使用GLSL在JoGL中的纹理上渲染网格。到目前为止,我的想法是首先渲染纹理并在顶部绘制网格。所以我正在做的是:
gl2.glBindTexture(GL2.GL_TEXTURE_2D, textureId);
// skipped the code where I setup the model-view matrix and where I do fill the buffers
gl2.glVertexAttribPointer(positionAttrId, 3, GL2.GL_FLOAT, false, 0, vertexBuffer.rewind());
gl2.glVertexAttribPointer(textureAttrId, 2, GL2.GL_FLOAT, false, 0, textureBuffer.rewind());
gl2.glDrawElements(GL2.GL_TRIANGLES, indices.length, GL2.GL_UNSIGNED_INT, indexBuffer.rewind());
在绘制网格后,使用:
gl2.glBindTexture(GL2.GL_TEXTURE_2D, 0);
gl2.glDrawElements(GL2.GL_LINE_STRIP, indices, GL2.GL_UNSIGNED_INT, indexBuffer.rewind());
但是当我开始更新顶点的坐标(即更新其中一个与高度相对应的轴)时,渲染以错误的方式完成(一些应该在前面的东西出现在后面,这是有道理的,没有深度测试已启用)。所以我启用了深度测试:
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthMask(true);
你可以清楚地看到网格的线条是模糊的,有些显示比其他线条更薄,等等。我试图解决的问题是线条平滑:
gl2.glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_NICEST);
gl2.glEnable(GL2.GL_LINE_SMOOTH);
结果更好,但我仍然不满意。
问题:所以基本上问题是如何进一步改进解决方案,所以我可以看到实线,当我开始更新顶点坐标时,它们会很好地显示。
如果需要,我可以提供着色器的代码(这非常简单,顶点着色器只根据投影计算位置,模型视图矩阵和顶点坐标,片段着色器计算纹理采样器的颜色)。