是否可以确保对于远处的对象,在 OpenGL 中渲染至少 1 个像素?



我正在编写一个太阳系模拟,有些物体要么太远,要么太小,甚至无法渲染到单个像素。此行为是预期的,但它会创建一些项目。对于较小的摄像机移动,对象在渲染为单个像素和根本不渲染之间交替,从而创建"闪烁"伪影。

是否可以强制对象始终渲染为至少 1 个像素?或者可能是任何其他技术来避免这个问题。

调用时问题仍然存在

glDepthFunc(GL_ALWAYS)

最远的物体距离相机4412个单位,而远平面距离相机10000个单位。

渲染的对象是球体(行星(,使用此答案中的代码具有 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);
}

在一个通道中为每个对象的中心绘制GL_POINTS,然后在另一个通道中绘制顶部的 3D 几何图形。 这样,即使 3D 几何图形消失,您也将始终拥有要点。

最新更新