ノイズを追加するための単純なシェーダーを作成しようとしています。しかし、以下の設定ではUV座標が取得できません。
フラグメント シェーダー:
uniform float seed;
uniform sampler2D pass;
varying vec2 vUv;
void main (){
//noise
vec2 pos = gl_FragCoord.xy;
pos.x *= seed;
pos.y *= seed;
float lum=fract(sin(dot(pos ,vec2(12.9898,78.233))) * 434658.5453116487577816842168767168087910388737310);
vec4 tx = texture2D(pass, vUv);
gl_FragColor = vec4(tx.r*lum,tx.g*lum,tx.b*lum,1.0);
}
頂点シェーダー:
varying vec2 vUv;
void main (){
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
}
レンダリング:
OBJECT.material = OBJECT.mat.flat; // THREE MeshPhongMaterial ({color: 0xE40D59,shading:THREE.FlatShading});
RENDERER.render(SCENE,CAMERA,BEAUTY_PASS,false);
OBJECT.material = OBJECT.mat.noise; // THREE ShaderMaterial
RENDERER.render(SCENE,CAMERA);
次のエラーが表示されます。
エラー: WebGL: DrawElements: バインドされた頂点属性バッファーには、バインドされた要素配列 @ http://threejs.org/build/three.min.js:439からの特定のインデックスに対して十分なサイズがありません
いくつかのテストを行いましたが、すべてのピクセルに対して同じ座標を選択することで実行できます
vec4 tx = texture2D(pass, vec2(0.5,0.5));
これにより、オブジェクトが赤みを帯びたノイズの多い色で表示されますが、最初のレンダリング パス ( ) を削除すると、vUv 変数は完全に正常に機能しますRENDERER.render(SCENE,CAMERA,BEAUTY_PASS,False)
。
2 番目のレンダリングで UV 座標を取得できないのはなぜですか? いくつかの例によると、この例のように同じシーンとカメラを使用してレンダリングできるはずです