Nicht sicher, was ich hier vermisse. Versuchen, einen Planeten (d. H. Eine Kugel) zu drehen, indem der Benutzer auf eine Schaltfläche "Drehen" klickt, aber nicht scheint, es herauszufinden. Ich habe das folgende Segment, das die Kugel durch Interaktion mit dem Benutzer mit der Maus dreht:Erstellen einer Kugel Drehen in WebGL
document.onmousemove = function() {
if (!mouseDown) {
return;
}
var newX = event.clientX;
var newY = event.clientY;
var deltaX = newX - lastMouseX
var newRotationMatrix = mat4.create();
mat4.identity(newRotationMatrix);
mat4.rotate(newRotationMatrix, degToRad(deltaX/10), [0, 1, 0]);
var deltaY = newY - lastMouseY;
mat4.rotate(newRotationMatrix, degToRad(deltaY/10), [1, 0, 0]);
mat4.multiply(newRotationMatrix, planetRotationMatrix, planetRotationMatrix);
lastMouseX = newX
lastMouseY = newY;
}
Dies funktioniert gut, aber ich will auch den Planeten machen, drehe automatisch, nachdem der Benutzer auf die Schaltfläche klickt. Hier ist meine onLoad
Funktion:
window.onload = function onLoad() {
canvas = document.getElementById("gl-canvas");
initGL(canvas);
initShaders();
initBuffers();
initTexture();
initEvtHandlers();
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.enable(gl.DEPTH_TEST);
var newRotationMatrix = mat4.create();
mat4.identity(newRotationMatrix);
document.getElementById("rotate").onclick = function() {
// rotation code goes here?
}
render();
}
Meine Frage ist: Wie kann ich ‚Toggle‘ die Drehung, nachdem der Benutzer auf die Schaltfläche klickt? Bisher habe ich versucht, die onmousemove
Funktion in einem Versuch zu ändern, um die Kugel ohne Benutzerinteraktion drehen zu lassen, aber das funktioniert nicht.
als Update, hier ist eine neue Funktion doRotate()
ich hinzugefügt:
var myRotationMatrix = mat4.create();
mat4.identity(myRotationMatrix);
doRotate = function() {
var dx = 1;
var newMatrix = mat4.create();
mat4.identity(newMatrix);
mat4.rotate(newMatrix, degToRad(dx/10), [0, 1, 0]);
mat4.multiply(newMatrix, myRotationMatrix);
requestAnimFrame(doRotate);
}
die derzeit nicht für mich arbeiten. Diese Funktion soll aufgerufen werden, wenn auf die Schaltfläche geklickt wird und die Drehung umgeschaltet wird.
Update:
Für eine ähnliche Demo finden Sie unter this page. Ich versuche, die Kugel automatisch drehen zu lassen, nachdem der Benutzer auf die entsprechende Schaltfläche geklickt hat. Dies ist natürlich nicht in der Demo verlinkt - das dient nur zur Verdeutlichung.
Update 2:
ich da bezifferten habe es aus. Bitte beachten Sie meine Antwort unten für Details.
Ich bin nicht wirklich sicher, was Sie fragen. Wenn du es rotieren lassen willst, brauchst du eine Art Animationsschleife mit 'requestAnimationFrame' und jedesmal in der Schleife drehst du den Planeten ein bisschen. [Beispiel] (http://webglfundamentals.org/webgl/lessons/webgl-animation.html). – gman
Ich versuche, die Kugel von selbst drehen zu lassen, nachdem der Benutzer auf die Schaltfläche klickt, ohne mit der Maus interagieren zu müssen. Ich weiß, dass dies requestAnimationFrame erfordert, aber ich war bisher nicht erfolgreich. –
Interessante Frage. Es würde helfen, wenn Sie ein Beispiel zusammenstellen könnten, z. mit Codepen oder Jsfiddle. Sie können dann Ihr Problem besser demonstrieren und erhalten wahrscheinlich schneller eine Antwort. –