webGL gl_位置值保存外部着色器
我有一些顶点着色器用于类似这样的计算webGL gl_位置值保存外部着色器,webgl,webgl2,Webgl,Webgl2,我有一些顶点着色器用于类似这样的计算 gl_Position = vec4(a.x * (0.5 - b.x) * v - a.y * b.y * u - offset * offsetMul * u, 0, 0) + transform * vec4(position, 0, 1); 我需要保存gl_Position的特定值,以便以后在着色器外部使用。有没有办法保存要在着色器外部使用的坐标?保存gl\u位置本身是不
gl_Position =
vec4(a.x * (0.5 - b.x) * v -
a.y * b.y * u - offset * offsetMul * u,
0, 0) +
transform * vec4(position, 0, 1);
我需要保存gl_Position的特定值,以便以后在着色器外部使用。有没有办法保存要在着色器外部使用的坐标?保存
gl\u位置本身是不可能的
保存“特定”值听起来也不可能
可以保存所有值。可以渲染位置
attribute vec4 position; // your data
attribute float a_count; // count 0, 1, 2, 3
uniform vec2 u_resolution; // resolution of output texture
// vertex shader
varying vec4 v_position;
void main() {
v_position =
vec4(a.x * (0.5 - b.x) * v -
a.y * b.y * u - offset * offsetMul * u,
0, 0) +
transform * vec4(position, 0, 1);
vec2 pixelCoord = vec2(
mod(a_count, resolution.x);
floor(a_count / resolution.x));
vec2 clipSpaceCoord = (pixelCoord + 0.5) / resolution * 2.0 - 1.0;
gl_Position = vec4(clipSpaceCoord, 0, 1);
}
// fragment shdaer
precision highp float
varying vec4 v_position;
void main() {
gl_FragColor = v_position;
}
在上面的例子中,我们将用计数0、1、2、3等填充一个缓冲区,以向上面的a_计数提供数据。您可以创建一个浮点纹理(在启用OES\u texture\u float
和EXT\u color\u buffer\u float
后,附加到帧缓冲区,然后渲染到该帧缓冲区。结果将在纹理中
请注意,将位置数据本身放入纹理并执行更多普通GPGPU操作可能会快得多
在WebGL2中,还可以使用变换反馈。变换反馈将顶点着色器的输出写入一个或多个缓冲区。在WebGL2中,使用着色器版本300 es,可以将顶点着色器中的变量声明为out
,而不是varying
。这些out
值(如上所述,不是gl\u Position
本身,而是您自己声明的输出可以写入缓冲区。我想您应该看看gpgpu,将数据写入另一个纹理。我不明白这有什么帮助?