Betrachten Sie die folgende Vertex-Shader:Übersetzungen gelten nicht für All Points
attribute vec4 a_Position;
uniform mat4 u_ModelMatrix;
void main() {
gl_Position = u_ModelMatrix * a_Position;
gl_PointSize = 3.0;
}
In meinem Javascript-Programm manipulieren ich die u_ModelMatrix
eine Rotation und Translation zu haben. Das funktioniert auf einem Dreieck, das ich zeichne. Aber ich merkte, dass, wenn ich ein zweites Objekt mit einem eigenen Eckpunktpufferspeicher Objekt zeichnen:
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, point, gl.STATIC_DRAW);
gl.uniform4f(u_FragColor, 1,1,0,1);
gl.drawArrays(gl.POINTS, 0, 1);
Dann wird die Übersetzungen und Drehungen gelten nicht für dieses Objekt. Ich dachte, es wäre seit gl_Position
im GLSL-Programm die Punkte multipliziert mit der Matrix. Dies ist, was ich gerne geschehen würde, aber ich bin nur neugierig, warum ist das der Fall?
Vielleicht ist es nur zur Veranschaulichung, aber wenn nicht, dann ist die Tatsache, dass die Puffer-Erstellung und der 'drawArrays'-Aufruf zusammen erscheinen, zumindest verdächtig. Ändern Sie das Programm zwischen dem ersten und zweiten Objekt? – Marco13