Opengl es 通过WebGL使用GLSL的投影纹理映射
我想将纹理投影到墙上或任何对象上。我根据这个Cg投影纹理贴图(ctrl-f“9.3”)修改了这个着色器,如下所示,但是我得到了一个空白的白色画布。我是着色器新手,不太确定如何调试(没有JS错误),有什么提示吗 顶点着色器:Opengl es 通过WebGL使用GLSL的投影纹理映射,opengl-es,glsl,webgl,shader,Opengl Es,Glsl,Webgl,Shader,我想将纹理投影到墙上或任何对象上。我根据这个Cg投影纹理贴图(ctrl-f“9.3”)修改了这个着色器,如下所示,但是我得到了一个空白的白色画布。我是着色器新手,不太确定如何调试(没有JS错误),有什么提示吗 顶点着色器: uniform mat4 u_modelViewProjMatrix; uniform mat4 u_normalMatrix; uniform vec3 lightDir; attribute vec3 vNormal; attribute vec4 vTexCoord;
uniform mat4 u_modelViewProjMatrix;
uniform mat4 u_normalMatrix;
uniform vec3 lightDir;
attribute vec3 vNormal;
attribute vec4 vTexCoord;
attribute vec4 vPosition;
varying float v_Dot;
varying vec2 v_texCoord;
void main()
{
gl_Position = u_modelViewProjMatrix * vPosition;
v_texCoord = vTexCoord.st * vPosition;
vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
}
片段着色器:
uniform sampler2D sampler2d;
varying float v_Dot;
varying vec2 v_texCoord;
void main()
{
vec4 color = texture2DProj(sampler2d,v_texCoord);
gl_FragColor = vec4(color.xyz * v_Dot, color.a);
}
如果你的代码中有问题,我认为这是你计算v_texCoord的奇怪方式。你确定不想用矩阵代替vTexCoord吗?撇开这一点不谈,与我的预期相反,
texture2DProj
是在GLSL ES 1.0中定义的,它在语法上似乎是正确的,具有匹配的不同名称
当您没有可用的step调试器时,调试GLSL往往需要将中间值作为片段颜色输出。因此,您的测试可以是:
再加上你能想到的任何其他变化。非常感谢,汤米。我通过使用texture2D并在顶点着色器中执行以下操作实现了它:vec4 clip=u_modelViewProjMatrix*vPosition;vec3-ndc=clip.xyz/clip.w;v_texCoord=0.5*(ndc.xy+1.0);