2
シンプルなプログラムで、固定値の配列(本質的にルックアップテーブル)をシェーダに渡そうとしています。呼び出し元のコードは次のようになります。three.jsでシェーダに配列を渡す適切な方法
var displacement = [];
for (var y=0; y<46; y++) {
for (var x=0; x<46; x++) {
var sVal = Math.sin((((x/5.0)*40.0)/360.0)*Math.PI*2.0);
var index = x + 46 * y;
displacement[index] = sVal;
}
}
planeGeometry.addAttribute('displacement', new THREE.BufferAttribute(displacement, 1));
var shaderMaterial = new THREE.ShaderMaterial({
uniforms: uniforms, // pass the "uniforms" vars
//attributes: attributes, // and the attributes
side:THREE.DoubleSide, // want the texture on both sides of the wave
vertexShader: vs, // pointers to the shaders
fragmentShader: fs
});
シェーダは次のようになります。R72に先立ち、私はシェーダ材料のコンストラクタ内の属性として配列を渡すが、今それが持っている
<script id="vertexShader" type="x-shader/x-fragment">
varying vec2 vUv;
attribute float displacement;
uniform float amplitude;
void main() {
vUv = uv;
vec3 newPosition = position + normal * vec3(displacement * amplitude);
gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
}
</script>
bufferGeometry属性として渡されます。古い方法は働いていたが、今では入手
[.CommandBufferContext] GLのERROR:GL_INVALID_OPERATION:glDrawElements:属性範囲の頂点のうち、アクセスしようとすると、私はこれを行う方法の全体の束を試してみた1
しかし、それらのどれも働かない。誰かがこれを行う正しい方法を知っていますか?
three.js
魅力のように働きました!とても簡単!ありがとう!あなたはthree.jsのロックであなた! – rkwright