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

时间:2017-08-14 04:42:58

标签: opengl graphics glsl

我正在编写一个太阳系模拟,有些物体太远或太小,甚至无法渲染到一个像素。这种行为是预期的,但它正在创建一些工件。对于小型相机移动,对象在渲染为单个像素之间交替,而根本不进行渲染,从而产生“闪烁”伪像。

是否可以强制对象始终呈现为至少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);
}

1 个答案:

答案 0 :(得分:5)

在一次传递中为每个对象绘制JOptionPane.showMessageDialog(Component parentComponent, Object message, String title, int messageType) throws HeadlessException ,然后在另一个传递中为顶部绘制3D几何体。这样,即使3D几何图形消失,您也总能得到这一点。