在上一章我们创建了几个 Filament 对象:
private void setupFilament() {
mEngine = Engine.create();
mRenderer = mEngine.createRenderer();
mView = mEngine.createView();
mScene = mEngine.createScene();
mCamera = mEngine.createCamera(mEngine.getEntityManager().create());
}
本章我们去学习如何使用这些对象。我们首先为 mScene 对象设置天空盒:
Skybox skybox = new Skybox.Builder().color(0.0f, 0.0f, 0.0f, 1.0f).build(mEngine);
mScene.setSkybox(skybox);
什么是天空盒呢? 简单来说 天空盒就是一个巨大的立方体,它有六个面,如果需要,我们可
以为每个面设置不同的纹理,可以模拟星空,天空,白云,宇宙等。这里,我们为了简单,仅仅
将天空盒都设置为黑色背景。天空盒的目的就是为了设置环境。
将 mScene 和 mCamera 设置到 mView对象中:
mView.setScene(mScene);
mView.setCamera(mCamera);
为View 设置 Scene 是为了能展示场景中的物体,为 View 设置 Camera 是为了能从不同的角度
观察物体。
接下来,我们设置相机投影矩阵,投影分为正射投影和透视投影:
public enum Projection {
/** Perspective projection, objects get smaller as they are farther. */
PERSPECTIVE,
/** Orthonormal projection, preserves distances. */
ORTHO
}
由于我们是绘制一个简单的三角形,使用 ORTHO 就行:
@Override
public void onResized(int width, int height) {
float zoom = 1.5f;
float aspect = (float)width / (float)height;
mCamera.setProjection(Camera.Projection.ORTHO,
-aspect * zoom, aspect * zoom, -zoom, zoom, 0.0, 10.0)
mView.setViewport(new Viewport(0, 0, width, height));
}
我们看到在为相机设置投影之后,我们也同时设置了 View 的视口信息。因为 这里有相关的
回掉信息 也就是 Surface 的宽高信息,我们也可以不在这里设置,可以将宽高保存起来,在
别处设置也可以。
到目前为止我们将 Camera,View 做了简单设置,如果要要渲染具体物体,主要还是配置
Scene。将我们需要渲染的entity 实体 加入到 Scene 中,在 draw 到时候就可以将物体渲染
出来&#