将位置写入纹理OpenGL/GLSL
Write positions to texture OpenGL/GLSL
我想在OGL中将3D网格的模型空间顶点位置写入纹理。目前,为了写入纹理,我将其设置为全屏四边形,并使用单独的通道(基于这里看到的教程)。
问题是,据我所知,我不能传递多个顶点列表到着色器,因为顶点着色器一次只能绑定到一个顶点列表,当前由屏幕空间四边形占用。
顶点着色器代码:
layout(location = 0) in vec4 in_position;
out vec4 vs_position;
void main() {
vs_position = in_position;
gl_Position = vec4(in_position.xy, 0.0, 1.0);
}
片段着色器代码:
in vec4 position; // coordinate in the screenspace quad
out vec4 outColor;
void main() {
vec2 uv = vec2(0.5, 0.5) * position.xy + vec2(0.5, 0.5);
outColor = ?? // Here I need my vertex position
}
可能解(?):
我的想法是在此之前引入另一个着色器通道以输出位置r, g, b,以便可以从纹理中检索当前纹理的位置(唯一足够大的输入格式来存储许多顶点)。
虽然不是100%准确,但这张图片可能会让你知道我想做什么:
模型空间坐标图
有没有一种方法来编码位置的纹理,而不使用GPU上的全屏四边形?
请让我知道,如果你想看到更多的代码。
而不是生成四边形CPU端,我将附加一个几何着色器并在那里创建四边形,这应该为您的模型几何传递释放槽。
几何着色器:
layout(points) in;
layout(triangle_strip, max_vertices = 4) out;
out vec2 texcoord;
void main()
{
gl_Position = vec4( 1.0, 1.0, 0.5, 1.0 );
texcoord = vec2( 1.0, 1.0 );
EmitVertex();
gl_Position = vec4(-1.0, 1.0, 0.5, 1.0 );
texcoord = vec2( 0.0, 1.0 );
EmitVertex();
gl_Position = vec4( 1.0,-1.0, 0.5, 1.0 );
texcoord = vec2( 1.0, 0.0 );
EmitVertex();
gl_Position = vec4(-1.0,-1.0, 0.5, 1.0 );
texcoord = vec2( 0.0, 0.0 );
EmitVertex();
EndPrimitive();
}
相关文章:
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- imageLoad glsl 在计算着色器 OpenGL 4.3 中始终返回 0
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- OpenGL GLSL 片段着色器中的随机数
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL,GLSL片段着色器无法读取Sampler2D纹理
- 即使 OpenGL、SDL 和 GLSL 都没有抛出错误,也没有绘制多边形
- 深度检查OpenGL(GLSL)
- 使用 OpenGL/GLSL 1.2 更改纹理色调
- Opengl-glsl 單虛擬光
- Opengl/glsl 尝试编写用于绘制四边形的着色器,但不确定如何处理屏幕纵横比的变化
- OpenGL GLSL 着色器版本
- 使用深度纹理OpenGL/GLSL的深度遮挡(3.3/330)
- 帮助调试OpenGL glsl着色器或使用它的代码
- Qt5 OpenGL GLSL版本错误
- opengl / glsl / sdl代码中的c++访问冲突
- c++/OpenGL/GLSL,带有"random"伪影的纹理
- Mac上的OpenGL GLSL着色器无法编译
- 将位置写入纹理OpenGL/GLSL