【问题标题】:OpenGL - how to construct an FPS style camera(the gun attached to it will move and rotate with it)OpenGL - 如何构建一个 FPS 风格的相机(附在它上面的枪会随着它移动和旋转)
【发布时间】:2014-12-23 09:52:28
【问题描述】:

我的问题非常直接:如何构建 FPS 相机,就像在射击游戏中一样(你有枪,每当你旋转相机时,枪也会旋转。)

实际上,移动是没有问题的,只是(好吧,在我开始编码之前,我想说,我使用的是 libGDX,它是一个 opengl 框架,但是你会像我对 opengl 代码的理解一样理解所有人):

gun.transform.setTranslation(camera.position);// sets gun to the center of the camera
camera.rotate(0,1,0,-3); //rotates direction and up vector of the camera
gun.transform.rotate(0,1,0,-3); // rotates the gun
gum.transform.trn(0.18f, -0.12f, -0.24f); //offseting the gun, to be everytime in the right bottom corner of the screen

但这不起作用。相机的旋转比枪还多。它看起来像相机是球体......这不是我想要的。

【问题讨论】:

  • 相机的位置必须随着枪的角度而改变。
  • 如何计算?我试图做类似的事情,但它不是很精确
  • 移除视图矩阵和任何转换模型相对于玩家位置的变换。

标签: java opengl camera


【解决方案1】:

实际上,诀窍是,不要试图将玩家活动项目移动到视图中,而是将视图重置为身份,仅用于绘制玩家活动同上模型。即

load_identity_transformation()
apply_player_camera_transformation()
draw_world()

load_identity_transformation()
apply_camera_transformation() // for perspective
draw_player_active_item()

您可能希望在移动时对模型应用摆动动画。

警告:这样做会破坏虚拟现实系统的体验(想想 Oculus Rift)。但是仅仅使用一个全局玩家模型并应用这种转换也行不通。 Valve 已经发布了这方面的研究资料。

【讨论】:

  • 我正在尝试这样做,但实际上并没有发生任何事情。在渲染函数开始时,我正在调用:cam.view.idt(); cam.update();之后放置相机,然后画出一切,除了枪。绘制后我调用 cam.view.idt(); cam.update();再次,再次定位相机并绘制最后一件事,但什么也没有发生。它看起来像它。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多