我期待着实现RGB-D图像的模型重建.在手机上首选.对于那个我是红色的,它都是用TSDF表示完成的.我现在在层次结构和其他想法上重写了很多论文以加快速度,但我的问题是,我仍然不知道如何实际实现这种表示.
如果我有一个大小为n的体网格,那么nxnxn和我想在每个体素中存储有符号的距离,重量和颜色信息.我唯一的猜测是,我必须为每个体素位置构建一组离散的点.并且用GLSL"绘制"所有这些点并计算最近的距离.但是,计算这个n ^ 3次似乎并不是那么好或有效.
我怎么能想象实现这样的TSDF表示?
问题是,我唯一的想法是将体素网格存储在有符号距离的数据中.但是对于每个深度图,我必须再次渲染所有体素并计算所有距离.有没有办法以反过来渲染它?
那么我不能渲染深度图的点并在体素网格中存储信息吗?
实际的艺术状态如何以有效的方式呈现这种有符号距离的表示?
通常,此代码会将纹理图像渲染为屏幕.但是,如果我现在将命令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*/
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*/
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)