目标:
- 了解相机的知识
- 了解相机的基本设置
- 显示一个3D模型
相机知识
一般的分为两种2D正交相机,3D透视相机,直观区别,2D无论看到远近的都是相同的,3D有近大远小的特性。目标是3D那就只看3D了。
libgdx中使用的是PerspectiveCamera
相机的基本设置
相机位置、查看的目标位置、视口的大小,最远和最近距离。
创建相机
创建一个
PerspectiveCamera camera = new PerspectiveCamera(67, 100,100);
第一个参数为啥是67?
因为我看其他地方都是67,所以我就写67。后面两个参数怎么取?
非0数值,只要和屏幕保持相同的比例就完事。为什么改变不会影响显示效果?你的眼睛在哪里,眼睛看到的范围角度固定……。
设置参数
camera.position.set(10f, 10, 10f);
camera.lookAt(0,0, 0);
camera.near = 1f;
camera.far = 300f;
简单理解:我在那,我看那,我最近可以看到哪里,最远看到哪里
设置环境光
环境是什么样的,有光??
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1, 1, 0, 0.8f));
环境光
太阳光或者灯泡
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, 1, 1, 1));
显示一个模型
加载模型,绘制模型
public class ObjActor extends Actor3D {
public ObjActor(String path){
ModelLoader loader = new ObjLoader();
Model model = loader.loadModel(Gdx.files.internal(path));
modelInstance = new ModelInstance(model);
Material cubeMaterial = new Material(ColorAttribute.createSpecular(Color.WHITE),
ColorAttribute.createSpecular(Color.BLACK));
model.materials.add(cubeMaterial);
}
@Override
public void draw(ModelBatch batch, Environment environment) {
batch.render(modelInstance, environment);
}
}
unity里面有一个更换材质。emmmm&……
Array<Material> materials = objActor.getModelInstance().materials;
for (Material material : materials) {
material.set(TextureAttribute.createDiffuse(
new Texture(Gdx.files.internal("cubelet.png"))));
}