我正在编写一个太阳系模拟,有些物体太远或太小,甚至无法渲染到一个像素.这种行为是预期的,但它正在创建一些工件.对于小的相机移动,对象在被渲染到单个像素之间交替并且根本不被渲染,从而产生"闪烁"伪像.
是否可以强制对象始终呈现为至少1个像素?或者可能是任何其他技术来避免这个问题.
通话时问题仍然存在
glDepthFunc(GL_ALWAYS)
Run Code Online (Sandbox Code Playgroud)
远离飞机距离摄像机4412个单位,远距离飞机距离10000个单位.
渲染的物体是球体(行星),使用来自这个答案的代码,有36个扇区和36个环,球体的绘制调用是
glDrawElements(GL_QUADS, m_Indices.size(), GL_UNSIGNED_SHORT, (void *)0)
Run Code Online (Sandbox Code Playgroud)
使用的着色器如下:
顶点着色器
#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;
}
Run Code Online (Sandbox Code Playgroud)
片段着色器
#version 330 core
in vec2 TexCoord;
uniform sampler2D in_Texture;
out vec4 FragColor;
void main() {
FragColor = texture(in_Texture, TexCoord);
}
Run Code Online (Sandbox Code Playgroud) 我有一个类在其构造函数中接收共享指针并将其存储在弱指针中,但我不确定如何(以及在何处)执行此转换.
class A {
public:
A(std::shared_ptr<B> Bptr);
private:
std::weak_ptr<B> m_Bptr;
};
Run Code Online (Sandbox Code Playgroud)
我应该转换shared_ptr之前传递给构造函数吗?
传递shared_ptr到这样weak_ptr的初始化列表是否A(std::shared_ptr<B> Bptr) : m_Bptr(Bptr) { }按预期工作或者我需要在构造函数的主体中显式转换?