ここでは何が欠けているのか分かりません。ユーザーが「回転」ボタンをクリックすることによって惑星(すなわち球体)を作ることを試みるが、それを理解しているようには見えない。私はマウスを使ってユーザーとの対話の方法で球を回転させ、次のセグメント持っています。この1つは正常に動作します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;
}
を、私はまた、惑星を作りたいユーザーがボタンをクリックした後に自動的に回転させます。ここに私のonLoad
機能である:
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();
}
私の質問は:どのようにI「トグル」は、ユーザがボタンをクリックした後に回転できますか?これまで私が試したことは、球がユーザーの介入なしに回転するようにするためにonmousemove
関数を変更することですが、それは機能しません。
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);
}
現在、私のために働いていません。
は更新として、ここで私が追加された新しいdoRotate()
機能です。この関数は、ボタンがクリックされたときに呼び出され、回転を切り替えます。
更新:同様のデモについては
、this pageを参照してください。私がしようとしているのは、ユーザーが関連するボタンをクリックした後に球が自動的に回転するようにすることです。これは明らかにリンクされたデモではありません - それは説明のためだけです。
アップデート2:
私は考え出したので、それをしました。詳細は下記の私の答えをご覧ください。
あなたが何を求めているのかは分かりません。回転させたい場合は、 'requestAnimationFrame'を使用して何らかのアニメーションループを作成する必要があります。ループのたびに、惑星を少し回転させる必要があります。 [例](http://webglfundamentals.org/webgl/lessons/webgl-animation.html)。 – gman
マウスを使ってボタンを操作しなくても、ユーザーがボタンをクリックした後で球体を回転させようとしています。私はこれがrequestAnimationFrameを必要としていることを認識していますが、これまで成功していません。 –
興味深い質問。例をまとめると助けになります。 codepenまたはjsfiddleを使用します。問題をよりよくデモして、最も早く回答を得ることができます。 –