java - 快速移动鼠标时相机有时会倒置
问题描述
我正在尝试在 LibGDX 中使用 3D,但是相机会倒置,而我所做的任何事情似乎都无法阻止它发生的原因,但原因不明。
我已经单独测试了每个旋转轴,它工作得很好,但是当它们一起使用时,它有时会颠倒过来。
public void create () {
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -2.5f, -5, -10));
modelBatch = new ModelBatch();
cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(0, 0, 0);
cam.lookAt(-10,-10,-10);
cam.near = 1f;
cam.far = 300f;
cam.update();
ModelBuilder modelBuilder = new ModelBuilder();
model = modelBuilder.createBox(5, 5, 5,
new Material(ColorAttribute.createDiffuse(Color.GREEN)),
Usage.Position | Usage.Normal);
instance = new ModelInstance(model);
instance.transform.translate(-10, -10, -10);
Gdx.input.setCursorCatched(true);
Gdx.input.setCursorPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
}
@Override
public void render () {
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
isup = false;
ispressed = false;
Vector3 direction = cam.direction.cpy();
Vector3 crossProduct = new Vector3(); //CROSSPRODUCT OF PLAYER DIRECTION AGAINST Y AXIS
crossProduct.x = -direction.z;
crossProduct.y = 0;
crossProduct.z = direction.x;
differencey = -Gdx.input.getY() + (Gdx.graphics.getHeight() / 2);
if ((cam.direction.y > -0.8 || differencey > 0) && (cam.direction.y < 0.8 || differencey < 0)) {
if (differencey > 50) {
differencey = 50;
}
cam.rotate(crossProduct, differencey / 10);
cam.update();
}
differencex = Gdx.input.getX() - (Gdx.graphics.getWidth() / 2);
cam.rotate(new Vector3(0, -1, 0), differencex / 10);
cam.update();
modelBatch.begin(cam);
modelBatch.render(instance, environment);
modelBatch.end();
Gdx.input.setCursorPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
if (Gdx.input.isKeyPressed(Keys.ESCAPE)) {
Gdx.app.exit();
}
相机的移动应该受到限制,以便如果用户分别几乎是直视向上或直下,则相机不能进一步向上或向下移动,但是相机有时会移动超过这个限制。
解决方案
推荐阅读
- python - 对 DASK 中的列中的每个值运行 mysql 查询
- python - 我希望我的角色只要按住按钮就可以做某事,然后在松开按钮后恢复正常
- reactjs - 具有给定令牌的 Axios 拦截器,React
- javascript - vanilla javascript使用链接的点击但不同的命令
- javascript - 触发日期更改时未触发 ng-change 事件
- java - 如何在 Spring Boot 中捕获客户端参数错误的“请求处理失败”?
- mysql - 续集加载初始数据
- outlook - Outlook 加载项的“额外费用披露”失败
- docker - 为什么`oom-kill-disable`对`kubectl create pod`无效,但对自己系统中的`docker run container`有效?
- c# - 如何在 asp.net mvc 中使用引导程序验证您的表单?