呈现为3D纹理
Render into a 3D Texture
我想将一组点渲染为3D纹理。但是某种程度上我不写它。使用GLGETTEXIMAGE(),每个条目只能获得0。我将3D纹理存储在框架缓冲器中,并且使用不同的渲染通道,我想从框架缓冲区中存储的3DTextul中读取信息。
Initialization of the FrameBuffer.
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, GRID_SIZE, GRID_SIZE, GRID_SIZE, 0, GL_RGBA, GL_FLOAT, NULL);
glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, texture, 0, 0);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) {
std::cout << "FBO successfully loadet" << std::endl;
}else{
std::cout << "FBO had en ERROR" << std::endl;
}
顶点着色器:
#version 330 core
layout (location = 0) in vec3 position;
void main(){
gl_PointSize = 1.0;
gl_Position = vec4(position,1.0);
}
片段着色器:
#version 330 core
out vec4 fragColor;
void main(){
fragColor = vec4(1.0,1.0,1.0, 1.0);
}
在此之前,我尝试了正常的渲染通行证,并将这些点分别存储在3D纹理中。这似乎有效。但是现在使用帧缓冲区,它仅写入0。
您可以使用Compute着色器将所有点写入纹理3D,并单个调用gldisPatchCompute:
- 编写要在SSBO或Texture1d 的要点的要点的3D坐标
- 绑定您的SSBO/TEXTURE1D和纹理3D
- 绑定您的计算着色器,它应该像这样:
#version 430
layout (binding=0, rgba16i) readonly uniform image1D points
layout (binding=1, rgba16f) writeonly uniform image3D tex3D
void main()
{
ivec3 point_coords = imageLoad(points, gl_GlobalInvocationID.x).xyz;
imageStore(tex3D, point_coords, vec4(1.0,1.0,1.0, 1.0));
}
- 致电gldispatchcompute(pointCount,0,0);
- call glmemorybarrier()将param Bitfield设置为您打算使用Texture3D进行的任何操作(当UNSUNES GL_ALL_ALL_BARRIER_BITS是启动的好方法时)
相关文章:
- 无法将结构注册为增强几何体3D点
- OpenGL大的3D纹理(>2GB)非常慢
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 3D 纹理大小会影响程序输出,而不会引发错误
- 呈现为3D纹理
- 从 Vulkan 中的 R16_UINT-3D 纹理中采样片段着色器中的值
- 在OpenGL 2.1中,即使在2D空间(具有2D纹理),也可以安全使用3D TEX坐标
- 如何将纹理映射到 3D 对象
- 将2D图像映射到3D纹理
- 是否可以在opengl中使用深度缓冲区渲染3D纹理
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- 如何在 3D 图形 OpenGL 中使用纹理
- OpenGL 3D 纹理问题
- Cocos2D-X 在 3D 中重复纹理
- 用于渲染 3D 球体的纹理坐标
- OpenGL 3.3:在3D场景上显示2D纹理的问题
- 3D纹理的OpenGL高斯内核
- glGenerateMipmap 不适用于 OpenGL 中的 3D 纹理
- 在OpenGL中添加3D球体和纹理
- CUDA中作为纹理的3D阵列写入和读取