小编Jea*_*nho的帖子

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

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

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

opengl graphics glsl

2
推荐指数
1
解决办法
82
查看次数

如何在接收shared_ptr的类构造函数中初始化weak_ptr?

我有一个类在其构造函数中接收共享指针并将其存储在弱指针中,但我不确定如何(以及在​​何处)执行此转换.

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) { }按预期工作或者我需要在构造函数的主体中显式转换?

c++ smart-pointers c++11

1
推荐指数
1
解决办法
1555
查看次数

标签 统计

c++ ×1

c++11 ×1

glsl ×1

graphics ×1

opengl ×1

smart-pointers ×1