安卓2.0的OpenGL旋转/移动使用Matrix.setLookAtM相机 [英] Android : OpenGL 2.0 Rotation/moving the Camera using Matrix.setLookAtM

查看:3129
本文介绍了安卓2.0的OpenGL旋转/移动使用Matrix.setLookAtM相机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这就是我今天的第二个问题,我可能会推我的运气
总之制作的3D第一人称,在那里你可以走动和四处看看。

So this is my second question today, I might be pushing my luck In short making a 3D first Person, where you can move about and look around.

在我的OnDrawFrame我使用

In My OnDrawFrame I am using

Matrix.setLookAtM(mViewMatrix, 0, eyeX , eyeY, eyeZ , lookX , lookY , lookZ , upX, upY, upZ);

要回迁,四,回避左等我用这样的事情(上市前向code)

To move back, forth, sidestep left etc I use something like this(forward code listed)

float v[] = {mRenderer.lookX - mRenderer.eyeX,mRenderer.lookY - mRenderer.eyeY, mRenderer.lookZ - mRenderer.eyeZ};

mRenderer.eyeX += v[0] * SPEED_MOVE;
mRenderer.eyeZ += v[2] * SPEED_MOVE;

mRenderer.lookX +=  v[0] * SPEED_MOVE;
mRenderer.lookZ +=  v[2] * SPEED_MOVE;

此工作

现在我要环顾四周,我试图端口我的iPhone的openGL 1.0 code。这是左/右

Now I want to look around and I tried to port my iPhone openGL 1.0 code. This is left/right

float v[] = {mRenderer.lookX - mRenderer.eyeX,mRenderer.lookY - mRenderer.eyeY, mRenderer.lookZ - mRenderer.eyeZ};

if (x > mPreviousX )
{
 mRenderer.lookX  +=  ((Math.cos(SPEED_TURN / 2) * v[0]) - (Math.sin(SPEED_TURN / 2) * v[2]));
 mRenderer.lookZ  +=  ((Math.sin(SPEED_TURN / 2) * v[0]) + (Math.cos(SPEED_TURN / 2) * v[2]));
}
else
{
 mRenderer.lookX  -=  (Math.cos(SPEED_TURN / 2) *v[0] - Math.sin(SPEED_TURN / 2) * v[2]);
 mRenderer.lookZ  -=  (Math.sin(SPEED_TURN / 2) *v[0] + Math.cos(SPEED_TURN / 2) * v[2]);
}

这适用于像35度,然后去精神?

This works for like 35 degrees and then goes mental?

任何想法?

推荐答案

原来,我的旋转code是错误的。

It turned out my rotation code was wrong

if (x > mPreviousX )
{
 mRenderer.lookX  = (float) (mRenderer.eyeX +  ((Math.cos(SPEED_TURN / 2) * v[0]) - (Math.sin(SPEED_TURN / 2) * v[2])));
 mRenderer.lookZ  =  (float) (mRenderer.eyeZ +  ((Math.sin(SPEED_TURN / 2) * v[0]) + (Math.cos(SPEED_TURN / 2) * v[2])));
}
else
{
 mRenderer.lookX  =  (float) (mRenderer.eyeX + ((Math.cos(-SPEED_TURN / 2) * v[0]) - (Math.sin(-SPEED_TURN / 2) * v[2])));
 mRenderer.lookZ  =  (float) (mRenderer.eyeZ + ((Math.sin(-SPEED_TURN / 2) * v[0]) + (Math.cos(-SPEED_TURN / 2) * v[2])));
}

这篇关于安卓2.0的OpenGL旋转/移动使用Matrix.setLookAtM相机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆