2016-10-23 3 views
-1

Ich versuche, einen Kreis zu zeichnen, und anstatt einen vollen Kreis (360 Grad) zu bekommen, bekomme ich fast den vollen Kreis und eine fehlende "Scheibe".
Was fehlt mir? Hierfehlendes Stück Kreis webgl

ist der Code:

//init: 
      starsList[i].circlePositionBuffer = gl.createBuffer(); 
      gl.bindBuffer(gl.ARRAY_BUFFER, starsList[i].circlePositionBuffer); 
      vertices = [1,0,1]; 
      for (j = 3; j < 360; j+=3) {   
       vertices[j] = starsList[i].factor * starsList[i].radius * Math.cos(j/180.0 * Math.PI); 
       vertices[j+1] = 0; 
       vertices[j+2] = starsList[i].factor * starsList[i].radius * Math.sin(j/180.0 * Math.PI); 
      } 

      gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); 
      starsList[i].circlePositionBuffer.itemSize = 3; 
      starsList[i].circlePositionBuffer.numItems = 120; 

//draw 
      mat4.identity(mvMatrix); 
      mat4.translate(mvMatrix, [x, y, z]); 
      gl.bindBuffer(gl.ARRAY_BUFFER, starsList[i].circlePositionBuffer); 
      gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, starsList[i].circlePositionBuffer.itemSize, gl.FLOAT, false, 0, 0); 
      setMatrixUniforms(); 
      gl.drawArrays(gl.LINE_LOOP, 0, starsList[i].circlePositionBuffer.numItems); 

UPDATE - GELÖST

vertices = [1,0,1]; 

sollte sein:

vertices = [starsList[i].factor * starsList[i].radius,0,0]; 

Antwort

1

Sie nie gehen zurück auf 0 ° (oder 360 °) , versuchen Sie,

zu ersetzen
for (j = 0; j < 360; j += 3) 

von

for (j = 0; j <= 360; j += 3) 

Sie können auch die bewegen

j/180.0 * Math.PI 

zu

(j % 360)/180.0 * Math.PI 
+0

seine noch nicht funktioniert .. – arii

+0

versucht, beide Vorschläge – arii

+1

Können Sie eine MCVE bitte? Ist einfacher zu überprüfen, was los ist – Zouch