我目前已将此更新代码设置为旋转并移动相机。
float move = 0.5f;
float look = 0.01f;
//Rotation
if (Keyboard[Key.Left]) {
modelview = Matrix4.Mult (modelview, Matrix4.CreateRotationY (-look));
}
if (Keyboard[Key.Right]) {
modelview = Matrix4.Mult (modelview, Matrix4.CreateRotationY (look));
}
if (Keyboard[Key.Up])
{
modelview = Matrix4.Mult (modelview, Matrix4.CreateRotationX (-look));
}
if (Keyboard[Key.Down])
{
modelview = Matrix4.Mult (modelview, Matrix4.CreateRotationX (look));
}
//Movement
if (Keyboard[Key.W])
{
modelview = Matrix4.Mult (modelview, Matrix4.CreateTranslation (0f, 0f, move));
}
if (Keyboard[Key.S]) {
modelview = Matrix4.Mult (modelview, Matrix4.CreateTranslation (0f, 0f, -move));
}
if (Keyboard[Key.A])
{
modelview = Matrix4.Mult (modelview, Matrix4.CreateTranslation (move, 0f, 0));
}
if (Keyboard[Key.D]) {
modelview = Matrix4.Mult (modelview, Matrix4.CreateTranslation (-move, 0f, 0));
}
当我移动相机时,模拟围绕世界原点(0,0,0)而不是当前位置旋转的效果。
我的模型视图矩阵加载如下:
GL.MatrixMode (MatrixMode.Modelview);
GL.LoadMatrix (ref modelview);
答案 0 :(得分:2)
这段代码还有很多工作要做。长话短说:
我相信你的代码是渲染循环的一部分吗?
你需要:
move
,以便在x,y,z方向上移动look
替换为2个变量,yaw
表示左右看,pitch
表示上下看,谷歌搜索“欧拉角”以获取更多理论; 之后,在每一帧中,您应该:
yaw
,pitch
的Y平面旋转。总之,您需要将输入处理与矩阵处理分开,然后每个帧根据当前位置和方向设置正确的模型视图矩阵(作为一组变换)。