3d Libgdx-子弹物理第三人称相机,随着时间的推移,物体变小或远离相机

3d Libgdx-子弹物理第三人称相机,随着时间的推移,物体变小或远离相机,3d,camera,libgdx,flicker,bullet,3d,Camera,Libgdx,Flicker,Bullet,我试过一个非常简单的第三人称相机,使用一个自由下落(在重力作用下)的子弹球。 在render()中,我尝试将摄影机的位置设置为略高于球体的位置,并根据球体的移动方向设置摄影机的外观 球体最初在很短的时间内渲染正常,但随后逐渐变小(约5秒后),或者可能正在远离摄影机,或者观察到球体大小的波动 我使用了以下代码: a.b.c包; 导入com.badlogic.gdx.ApplicationListener; 导入com.badlogic.gdx.gdx; 导入com.badlogic.gdx.gra

我试过一个非常简单的第三人称相机,使用一个自由下落(在重力作用下)的子弹球。 在render()中,我尝试将摄影机的位置设置为略高于球体的位置,并根据球体的移动方向设置摄影机的外观

球体最初在很短的时间内渲染正常,但随后逐渐变小(约5秒后),或者可能正在远离摄影机,或者观察到球体大小的波动

我使用了以下代码:

a.b.c包;
导入com.badlogic.gdx.ApplicationListener;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.graphics.Color;
导入com.badlogic.gdx.graphics.GL20;
导入com.badlogic.gdx.graphics.PerspectiveCamera;
导入com.badlogic.gdx.graphics.VertexAttributes.Usage;
导入com.badlogic.gdx.graphics.g3d.Environment;
导入com.badlogic.gdx.graphics.g3d.Material;
导入com.badlogic.gdx.graphics.g3d.Model;
导入com.badlogic.gdx.graphics.g3d.ModelBatch;
导入com.badlogic.gdx.graphics.g3d.ModelInstance;
导入com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
导入com.badlogic.gdx.graphics.g3d.attributes.FloatAttribute;
导入com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
导入com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
导入com.badlogic.gdx.math.MathUtils;
导入com.badlogic.gdx.math.Vector3;
导入com.badlogic.gdx.physics.bullet.collision.btBoxShape;
导入com.badlogic.gdx.physics.bullet.collision.btBroadphaseInterface;
导入com.badlogic.gdx.physics.bullet.collision.btCollisionConfiguration;
导入com.badlogic.gdx.physics.bullet.collision.btCollisionDispatcher;
导入com.badlogic.gdx.physics.bullet.collision.btCollisionShape;
导入com.badlogic.gdx.physics.bullet.collision.btDbvtBroadphase;
导入com.badlogic.gdx.physics.bullet.collision.btDefaultCollisionConfiguration;
导入com.badlogic.gdx.physics.bullet.collision.btSphereShape;
导入com.badlogic.gdx.physics.bullet.dynamics.btConstraintSolver;
导入com.badlogic.gdx.physics.bullet.dynamics.btDiscretedDynamicsWorld;
导入com.badlogic.gdx.physics.bullet.dynamics.btDynamicsWorld;
导入com.badlogic.gdx.physics.bullet.dynamics.b刚体;
导入com.badlogic.gdx.physics.bullet.dynamics.btRigidBody.btRigidBodyConstructionInfo;
导入com.badlogic.gdx.physics.bullet.dynamics.btSequentialPulseConstraintsSolver;
导入com.badlogic.gdx.physics.bullet.linearmath.btDefaultMotionState;
导入com.badlogic.gdx.tests.bullet.BaseBulletTest;
导入com.badlogic.gdx.tests.bullet.BulletTest;
导入com.badlogic.gdx.utils.Array;
公共类BasicBulletTest1实现ApplicationListener{
模型批处理模型批处理;
环境灯;
b刚体球体;
ModelBuilder ModelBuilder=新的ModelBuilder();
模型实例球;
btCollisionConfiguration冲突配置;
bt冲突调度员;
BTBroadphase接口宽相位;
约束求解器;
动态世界碰撞世界;
矢量3重力=新矢量3(0,-9.81f,0);
Vector3 tempVector=新Vector3();
数组模型=新数组();
数组实例=新数组();
数组运动状态=新数组();
数组bodyInfos=新数组();
数组形状=新数组();
数组体=新数组();
公众透视照相机;
@凌驾
公共void创建(){
灯光=新环境();
设置(新的ColorAttribute(ColorAttribute.AmbientLight,0.2f,0.2f,1.f));
添加(新的DirectionalLight().set(0.8f、0.8f、0.8f、-0.5f、-1f、-0.7f));
//把照相机调好
最终浮点宽度=Gdx.graphics.getWidth();
最终浮动高度=Gdx.graphics.getHeight();
如果(宽度>高度)
摄像机=新透视摄像机(67f,3f*宽度/高度,3f);
其他的
摄像机=新透视摄像机(67f、3f、3f*高度/宽度);
摄像机位置设置(0f,35f,0f);
摄像机。注视(0,0,0);
camera.update();
//创建模型批处理
modelBatch=新modelBatch();
//创建一些基本模型
最终模型groundModel=modelBuilder.createRect(
20楼,
0f,
-20楼,
-20楼,
0f,
-20楼,
-20楼,
0f,
20楼,
20楼,
0f,
20楼,
0,
1.
0,
新材质(ColorAttribute.createDiffuse(Color.BLUE)、ColorAttribute.createSpecular(Color.WHITE)、FloatAttribute
.createshinity(16f)),用法.位置|用法.正常);
模型。添加(地面模型);
最终模型sphereModel=modelBuilder.createSphere(
1f,
1f,
1f,
10,
10,
新材质(ColorAttribute.createDiffuse(Color.RED)、ColorAttribute.createSpecular(Color.WHITE)、FloatAttribute
.createshiness(64f)),用法.位置|用法.正常);
models.add(sphereModel);
//加载项目符号库
BaseBulletTest.init();//通常使用:Bullet.init();
//创造子弹世界
collisionConfiguration=新的btDefaultCollisionConfiguration();
dispatcher=新的btCollisionDispatcher(collisionConfiguration);
broadphase=新的btDbvtBroadphase();
解算器=新的BTSequentialPulseConstraintSolver();
collisionWorld=新的BTDiscretedDynamicsworld(调度程序、宽相位、解算器、碰撞配置);
碰撞世界。设置重力(重力);
//创建形状和身体构造信息
btCollisionShape groundShape=新的btBoxShape(tempVector.set(20,0,20));
形状。添加(groundShape);
btrigidodyconstructioninfo groundInfo=新的btrigidodyconstructioninfo(0f,null,groundShape,Vector3.0);
bodyInfos.add(groundInfo);
btCollisionShape sphereShape=新btSphereShape(0.5f);
形状。添加(sphereShape);
计算校准器(1f,tempVector);
BtrigIDodyConstructionInfo sphereInfo=新的BtrigIDodyConstructionInfo(1f,null,sphereShape,tempVector);
bodyInfos.add(sphereInfo);
//创造条件
ModelInstance地面=新ModelInstance(地面模型);
实例。添加(地面);
btDefaultMotionState地面运动状态=新btDefau
Vector3 subV=positionNew.cpy();
subV.sub(positionOld);
camera.lookAt(positionNew.add(subV));
camera.lookAt(positionNew + positionNew - positionOld); // Hypothetical non-java code