Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在mousedrag上围绕webgl中的场景旋转(模拟摄影机围绕某个位置移动)_Javascript_Matrix_Camera_Rotation_Webgl - Fatal编程技术网

Javascript 如何在mousedrag上围绕webgl中的场景旋转(模拟摄影机围绕某个位置移动)

Javascript 如何在mousedrag上围绕webgl中的场景旋转(模拟摄影机围绕某个位置移动),javascript,matrix,camera,rotation,webgl,Javascript,Matrix,Camera,Rotation,Webgl,好,, 因此,我在过去几个小时里一直在阅读,我通过以下矩阵计算成功地在x轴上拖动鼠标,但在y轴上没有运气: 哪里 newX=新鼠标X坐标 previousX=上次更新时的鼠标X坐标 位置=摄像机位置 mvMatrix=模型视图矩阵或“世界矩阵” angle = 0.01*(newX-previousX); rM = mat4.create(); mat4.identity(rM); rM[0] = Math.cos(angle); rM[2] = Math.sin(angle); rM[8]

好,, 因此,我在过去几个小时里一直在阅读,我通过以下矩阵计算成功地在x轴上拖动鼠标,但在y轴上没有运气: 哪里 newX=新鼠标X坐标 previousX=上次更新时的鼠标X坐标 位置=摄像机位置 mvMatrix=模型视图矩阵或“世界矩阵”

angle = 0.01*(newX-previousX);
rM = mat4.create();
mat4.identity(rM);

rM[0] = Math.cos(angle);
rM[2] = Math.sin(angle);
rM[8] = -Math.sin(angle);
rM[10] = Math.cos(angle);

mat4.multiplyVec3(
    rM,
    position,
    position
)
*注意:这使用glMatrix库(http://code.google.com/p/glmatrix/)

也为了始终面对0,0,0的位置

mat4.lookAt(
    position,
    vec3.create([0, 0, 0]),
    vec3.create([position[0], position[1]+1, position[2]]),
    mvMatrix
);
我从你那里得到了矩阵 我在“基本旋转”和Ry下使用了矩阵

我相信这是以前做过的,任何帮助都将不胜感激


干杯,Josh看一看——它旋转世界中的对象,而不是摄影机,但你应该能够切换将newRotationMatrix和moonRotationMatrix相乘的顺序,以反转该顺序。

假设你想要一个自由移动的摄影机,Z轴垂直-每帧,您可以这样做:

mat4.identity(viewMatrix); mat4.translate(viewMatrix, [x,y,z]); mat4.rotate(viewMatrix, degToRad(90-pitch), [-1, 0, 0]); mat4.rotate(viewMatrix, degToRad(yaw), [0, 0, 1]); mat4.multiply(viewMatrix,modelMatrix,modelViewMatrix); mat4.标识(视图矩阵); mat4.平移(视图矩阵[x,y,z]); mat4.旋转(视图矩阵,degToRad(90节距),[-1,0,0]); mat4.旋转(视图矩阵,除扭器(偏航),[0,0,1]); mat4.乘法(viewMatrix、modelMatrix、modelViewMatrix); 其中degToRad将度转换为弧度。然后将modelViewMatrix和投影矩阵传递给顶点着色器,该着色器可以使用:

attribute vec3 aVertexPosition; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; gl_Position = projectionMatrix* modelViewMatrix* vec4(aVertexPosition, 1.0); 属性向量3; 统一mat4模型视图矩阵; 均匀mat4投影矩阵;
gl_位置=投影矩阵*模型视图矩阵*向量4(1.0);在这一点上我帮不了你,但也许你可以从我这里得到一些信息,我发现你的方法会导致奇怪的行为,只是因为你把它应用到一个球体上,它并不明显,把它应用到一个立方体上,你就会看到问题。@Giles Thomas不幸的是,链接已经死了,你能更新参考吗?