私はここで3つの問題を遭遇していますか? 私は視差マッピングを試みます。webgl/three js shader error
頂点シェーダ:
varying vec3 v_pos;
varying vec3 v_nrm;
varying vec2 v_txc;
void main(){
v_pos = position;
v_nrm = normal;
v_txc = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
}
フラグメントシェーダ:
uniform vec3 camPos;
uniform sampler2D heightMap;
uniform sampler2D textureDiffuse;
uniform float bumpness;
varying vec3 v_pos;
varying vec3 v_nrm;
varying vec2 v_txc;
float ApplyChainRule(float dhdu, float dhdv, float dud_, float dvd_)
{
return dhdu * dud_ + dhdv * dvd_;
}
vec3 SurfaceGradient(vec3 n, vec3 dpdx, vec3 dpdy, float dhdx, float dhdy)
{
vec3 r1 = cross(dpdy, n);
vec3 r2 = cross(n, dpdx);
float det = dot(dpdx, r1);
return (r1 * dhdx + r2 * dhdy)/det;
}
void main()
{
vec3 wsViewDir = normalize(camPos - v_pos);
vec3 wsNormal = normalize(v_nrm);
vec3 dpdx = dFdx(v_pos);
vec3 dpdy = dFdy(v_pos);
vec2 uv = v_txc;
vec2 duvdx = dFdx(uv);
vec2 duvdy = dFdy(uv);
// here will be the POM code
vec2 dhduv = texture2D(heightMap, uv).rg;
dhduv = (dhduv * 2.0 - 1.0) * bumpness;
float dhdx = ApplyChainRule(dhduv.x, dhduv.y, duvdx.x, duvdx.y);
float dhdy = ApplyChainRule(dhduv.x, dhduv.y, duvdy.x, duvdy.y);
wsNormal = normalize(wsNormal - SurfaceGradient(wsNormal, dpdx, dpdy, dhdx, dhdy));
gl_FragColor = vec4(texture2D(textureDiffuse, uv)+(wsNormal * 0.5 +0.5),1.0);
// here will be the lighting and shading code
}
、私はこのエラーを持っている:
THREE.WebGLShader:gl.getShaderInfoLog()断片エラー:0 :? : '':構文エラー
私のエラーが見つかりませんでした。
おかげで;)
はあなたの実際のコードだけでなく、シェーダを投稿してください。シェイダーは他の場所で動作しているので、シェイダーをthree.jsにどのように提供しているのかがわかります – gman