我正在编写一个太阳系模拟,有些物体太远或太小,甚至无法渲染到一个像素。这种行为是预期的,但它正在创建一些工件。对于小型相机移动,对象在渲染为单个像素之间交替,而根本不进行渲染,从而产生“闪烁”伪像。
是否可以强制对象始终呈现为至少1个像素?或者也许是任何其他技术来避免这个问题。
调用
时问题仍然存在glDepthFunc(GL_ALWAYS)
远离摄像机的距离是4412个单位,远处的距离是10000个单位。
渲染的物体是球体(行星),使用来自this answer的代码,包含36个扇区和36个环,球体的绘制调用是
glDrawElements(GL_QUADS, m_Indices.size(), GL_UNSIGNED_SHORT, (void *)0)
使用的着色器如下所示:
顶点着色器
#version 330 core
layout(location = 0) in vec3 in_Position;
layout(location = 1) in vec3 in_Normal;
layout(location = 2) in vec2 in_TexCoord;
uniform mat4 un_mvpMatrix;
out vec2 TexCoord;
void main() {
gl_Position = un_mvpMatrix * vec4(in_Position, 1.0);
TexCoord = in_TexCoord;
}
片段着色器
#version 330 core
in vec2 TexCoord;
uniform sampler2D in_Texture;
out vec4 FragColor;
void main() {
FragColor = texture(in_Texture, TexCoord);
}
答案 0 :(得分:5)
在一次传递中为每个对象绘制JOptionPane.showMessageDialog(Component parentComponent,
Object message,
String title,
int messageType)
throws HeadlessException
,然后在另一个传递中为顶部绘制3D几何体。这样,即使3D几何图形消失,您也总能得到这一点。