【发布时间】:2019-07-19 22:08:56
【问题描述】:
与其给我的着色器提供 -1 到 1 的值,我更愿意给它们提供像素值,就像 2D 画布上下文一样。所以根据我阅读的内容,我确实添加了一个统一变量,我将其设置为画布的大小,然后进行划分。
但我一定错过了什么。渲染图太大了……
gl_.resolutionLocation = gl.getUniformLocation( gl_.program , "u_resolution" );
gl.uniform4f(gl_.resolutionLocation , game.w , game.h , game.w , game.h );
我的顶点着色器:
attribute vec4 position;
attribute vec2 texcoord;
uniform vec4 u_resolution;
uniform mat4 u_matrix;
varying vec3 v_texcoord;
void main() {
vec4 zeroToOne = position / u_resolution ;
gl_Position = u_matrix * zeroToOne ;
v_texcoord = vec3(texcoord.xy, 1) * abs(position.x);
v_texcoord = v_texcoord/u_resolution.xyz ;
}
我的片段着色器:
precision mediump float;
varying vec3 v_texcoord;
uniform sampler2D tex;
uniform float alpha;
void main()
{
gl_FragColor = texture2DProj(tex, v_texcoord);
gl_FragColor.rgb *= gl_FragColor.a ;
}
【问题讨论】:
-
你想从 [0, u_resolution] 映射到 [-1, 1] ->
zeroToOne.xy = 2.0*position.xy/u_resolution.xy - 1.0;。但是u_matrix做了什么?是模型转换吗?位置的z和w组件是否已设置? -
u_matrix 用于旋转。不,我只设置了 x 和 y,但我使用 vec4 位置来使纹理正确显示在梯形上。 (stackoverflow.com/questions/56915103/…)
-
并非如此。无论如何,我没有让它工作,但我放弃了,我忘记了这个问题。