目標(biāo):
- 了解相機(jī)的知識(shí)
- 了解相機(jī)的基本設(shè)置
- 顯示一個(gè)3D模型
相機(jī)知識(shí)
一般的分為兩種2D正交相機(jī)赏胚,3D透視相機(jī),直觀區(qū)別,2D無論看到遠(yuǎn)近的都是相同的对碌,3D有近大遠(yuǎn)小的特性。目標(biāo)是3D那就只看3D了蒿偎。
libgdx中使用的是PerspectiveCamera
相機(jī)的基本設(shè)置
相機(jī)位置朽们、查看的目標(biāo)位置、視口的大小诉位,最遠(yuǎn)和最近距離骑脱。
創(chuàng)建相機(jī)
創(chuàng)建一個(gè)
PerspectiveCamera camera = new PerspectiveCamera(67, 100,100);
第一個(gè)參數(shù)為啥是67?
因?yàn)槲铱雌渌胤蕉际?7苍糠,所以我就寫67叁丧。后面兩個(gè)參數(shù)怎么取?
非0數(shù)值拥娄,只要和屏幕保持相同的比例就完事蚊锹。為什么改變不會(huì)影響顯示效果?你的眼睛在哪里稚瘾,眼睛看到的范圍角度固定……牡昆。
設(shè)置參數(shù)
camera.position.set(10f, 10, 10f);
camera.lookAt(0,0, 0);
camera.near = 1f;
camera.far = 300f;
簡單理解:我在那,我看那摊欠,我最近可以看到哪里丢烘,最遠(yuǎn)看到哪里
設(shè)置環(huán)境光
環(huán)境是什么樣的,有光些椒?播瞳?
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1, 1, 0, 0.8f));
環(huán)境光
image.png
太陽光或者燈泡
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, 1, 1, 1));
image.png
顯示一個(gè)模型
加載模型,繪制模型
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);
}
}
image.png
unity里面有一個(gè)更換材質(zhì)免糕。emmmm&……
Array<Material> materials = objActor.getModelInstance().materials;
for (Material material : materials) {
material.set(TextureAttribute.createDiffuse(
new Texture(Gdx.files.internal("cubelet.png"))));
}
image.png