小编Dom*_*ick的帖子

GLSL截断符号距离表示(TSDF)实现

我期待着实现RGB-D图像的模型重建.在手机上首选.对于那个我是红色的,它都是用TSDF表示完成的.我现在在层次结构和其他想法上重写了很多论文以加快速度,但我的问题是,我仍然不知道如何实际实现这种表示.

如果我有一个大小为n的体网格,那么nxnxn和我想在每个体素中存储有符号的距离,重量和颜色信息.我唯一的猜测是,我必须为每个体素位置构建一组离散的点.并且用GLSL"绘制"所有这些点并计算最近的距离.但是,计算这个n ^ 3次似乎并不是那么好或有效.

我怎么能想象实现这样的TSDF表示?

问题是,我唯一的想法是将体素网格存储在有符号距离的数据中.但是对于每个深度图,我必须再次渲染所有体素并计算所有距离.有没有办法以反过来渲染它?

那么我不能渲染深度图的点并在体素网格中存储信息吗?

实际的艺术状态如何以有效的方式呈现这种有符号距离的表示?

c++ opengl-es glsl point-clouds

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

通过调用glBindFramebuffer(GL_FRAMEBUFFER,0),OpenGL不会呈现到屏幕

通常,此代码会将纹理图像渲染为屏幕.但是,如果我现在将命令glBindFramebuffer(GL_FRAMEBUFFER,0)添加到代码中,它将不会呈现任何内容.它以glClearColor的颜色呈现屏幕.我正在使用QT,所以使用QOpenGLWidget.

glViewport(0, 0, _width, _height);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

glClearColor(0.0,0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);

_program.bind();
glBindVertexArray(_vao);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureID);
glUniform1i(glGetUniformLocation(_program.programId(), "u_texture"), 1);

glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)

想要可能出错吗?

编辑:

/*final.fsh*/

版本330核心

uniform sampler2D u_texture;
in vec4 qt_TexCoord0;

out vec4 fragColor;

void main(void)
{
    fragColor = texture(u_texture, qt_TexCoord0.xy);
}
Run Code Online (Sandbox Code Playgroud)

/*final.vsh*/

版本330核心

layout (location = 0) in vec3 a_position;

out vec4 qt_TexCoord0;

void main(void)
{
    gl_Position =  vec4(a_position, 1.0);

    const mat4 B = mat4(0.5,  0.0, 0.0, 0.0,
                            0.0,  0.5, 0.0, 0.0,
                            0.0,  0.0, 0.5, 0.0,
                            0.5,  0.5, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl qt opengl-es

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

标签 统计

c++ ×2

opengl-es ×2

glsl ×1

opengl ×1

point-clouds ×1

qt ×1