THREE.js rev 49に基づいたいくつかのカスタムシェイダーに基づくコードで、既存のバグを修正しようとしています。WebGL GL ERROR:GL_INVALID_OPERATION:glDrawElements:属性1の範囲外の頂点にアクセスしようとしています
私はTotal WebGL newbですので、他の回答の頭や尻尾を作ることができませんでした。私は何を探すべきかについてのどんなヒントでも非常に感謝しています! :)コードの最終結果は、半透明のボックスワイヤフレームを描き、半透明のテクスチャで面をペイントすることです。
特定のエラーは、次のとおりです。
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1
私はTHREE.WebGLRenderer.renderBuffer内の特定の_gl.drawElements(_gl.TRIANGLES, geometryGroup.__webglFaceCount, _gl.UNSIGNED_SHORT, 0);
に問題をトレースします。ここで
は、呼び出し元のコードの抜粋である:あなたの助けのための
uniforms: {},
vertexShader: [
"varying vec3 vNormal;",
"void main() {",
"vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);",
"vNormal = normalMatrix * normal;",
"gl_Position = projectionMatrix * mvPosition;",
"}"
].join("\n"),
fragmentShader: [
"vec4 pack_depth(const in highp float depth) {",
"const highp vec4 bit_shift = vec4(256.0, 256.0*256.0, 256.0*256.0*256.0, 256.0*256.0*256.0*256.0);",
"vec4 res = depth * bit_shift;",
"res.x = min(res.x + 1.0, 255.0);",
"res = fract(floor(res)/256.0);",
"return res;",
"}",
"void main() {",
"gl_FragData[0] = pack_depth(gl_FragCoord.z);",
"}"
].join("\n")
ありがとう:ここ
scene.overrideMaterial = depthMaterial; // shaders below
var ctx = renderer.getContext(); // renderer is a THREE.WebGLRenderer
ctx.disable(ctx.BLEND);
// renderTarget is a THREE.WebGLRenderTarget, _camera, scene is obvious
renderer.render(scene, _camera, renderTarget, true); // error occurs here
は、関連するシェーダです!
おかげで答えをアーカイブ!それは本当に役立った! – netgoblin
私は球を作成しました:var geometry = new THREE.SphereGeometry(10,128,128); とし、法線/変位シェーダを適用しようとしているときにこのエラーが発生しました。あなたのアドバイスは私を助けました!レコードの場合は – netgoblin
、computeTangentsメソッドは削除されました。 – zeropaper