Ich versuche, einen bereits vorhandenen Bug in einigen Code zu reparieren, der auf THREE.js rev 49 mit einigen benutzerdefinierten Shadern basiert.WebGL GL FEHLER: GL_INVALID_OPERATION: glDrawElements: Versuch, außerhalb der Reichweite Scheitelpunkte in Attribut 1 zu erreichen
Ich bin ein gesamter WebGL newb, so dass ich nicht in der Lage gewesen bin, viel Kopf oder Zahl von anderen Antworten zu machen, da sie viel mehr Wissen anzunehmen schienen als ich. Ich wäre sehr dankbar für sogar irgendwelche Hinweise darauf, wonach ich suchen sollte! :) Das Endergebnis des Codes besteht darin, einen transparenten Drahtgitterrahmen zu zeichnen und die Flächen mit transluzenten Texturen zu bemalen.
Der besondere Fehler ist:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1
ich das Problem zu einem bestimmten _gl.drawElements(_gl.TRIANGLES, geometryGroup.__webglFaceCount, _gl.UNSIGNED_SHORT, 0);
in THREE.WebGLRenderer.renderBuffer verfolgt.
Hier ist ein Ausschnitt des anrufenden Code:
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
Hier sind die relevanten Shadern:
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")
Vielen Dank für Ihre Hilfe!
danke! Das war wirklich hilfreich! – netgoblin
Ich habe eine Kugel erstellt: var geometry = new THREE.SphereGeometry (10,128,128); und bekam diesen Fehler beim Versuch, den Normalen/Versatz-Shader anzuwenden. Dein Rat hat mir geholfen! – netgoblin
für den Datensatz wurde die Methode computeTangents entfernt. – zeropaper