Libgdx:将3D对象从一个摄像头转换为另一个摄像头

时间:2016-08-21 14:37:58

标签: android math 3d camera libgdx

我有一个3D Libgdx游戏,其中一个透视摄像机正在观察具有固定位置但灵活方向和向上矢量的场景。然后还有另一个Perspective Camera,它在顶部呈现“静态元素”。 其中一个静态元素是弓箭和箭头。

当玩家现在开枪时,我需要“翻译”箭头,使其不再由第二个“静态”透视摄像机渲染,而是通过场景视图摄像头,因为箭头需要飞向相机所在的位置看着。

但是我不知道如何将箭头从旧位置,旋转矢量等转换为创建无缝“转移”所需的箭头。怎么会这样做?

这是箭头的创建方式:

model = loader.loadModel(Gdx.files.internal("data/arrow.obj"));
arrowModel = new ModelInstance(model);
staticCamera = new PerspectiveCamera(67.0f, 2.0f * Gdx.graphics.getWidth() / Gdx.graphics.getHeight(), 2.0f);
 staticCamera.far = 100.0f;
 staticCamera.near = 0.1f;
 staticCamera.position.set(0.0f, 0.0f, 0.0f);
 staticCamera.up.set(0f, 1f, 0f);
 staticCamera.lookAt(0f, 0.0f, 1.0f);

以下是我使用静态相机渲染的方法:

modelBatch.begin(staticCamera);
modelBatch.render(arrowModel, environment);
modelBatch.end();

动态“世界”相机根据用户持有的方式更改其方向和向上矢量:

Gdx.input.getRotationMatrix(mat4.val);
upVector.push(mat4.val[Matrix4.M11], mat4.val[Matrix4.M12], mat4.val[Matrix4.M10]);
dirVector.push(-mat4.val[Matrix4.M21], -mat4.val[Matrix4.M22], -mat4.val[Matrix4.M20]);

 float[] ups = upVector.getValue();
 float[] dirs = dirVector.getValue();
 camera.up.set(ups[0], ups[1], ups[2]);
 camera.direction.set(dirs[0], dirs[1], dirs[2]);

所以我现在想知道箭头的变换是如何看起来的那样,所以当我从使用staticCamera渲染它到相机对象(世界观相机)时,从视觉角度看它是在同一个地方/ p>

0 个答案:

没有答案