大家好我正在研究武器渲染,当我不得不计算gun.y和gun.rot.x时,我陷入了困境。在y轴上旋转并计算枪的x,z效果很好。但现在问我怎么能得到gun.rot.x和gun.y.我对枪x和y的计算看起来像:
float offsetX = (float) Math.sin(Math.toRadians(camera.getRotation().y + 25));
float offsetZ = (float) Math.cos(Math.toRadians(camera.getRotation().y + 25));
gun.x = camera.x + offsetX;
gun.z = camera.z - offsetZ;
Y的旋转非常简单:
gun.getRotation().y = 360 - camera.getRotation().y;
我尝试用这样的代码计算gun.y:
float offsetY = (float) Math.sin(Math.toRadians(camera.getTransform().getRotation().x + 25));
gun.y = camera.y - offsetY
但它似乎无法正常工作。
答案 0 :(得分:0)
您要做的是渲染视图模型(游戏术语)。我通常通过让玩家的相机作为另一个相机来完成。换句话说,您将使用单独的相机渲染模型,使其看起来接近面部(例如,也避免枪穿过墙壁)然后根据您的实现添加您的模型摄像机转换到主摄像机的转化
如果您使用固定功能管道(glMatrixMode()
,glTranslatef()
等),您只需应用转换(调用glTranslatef()
和glRotatef()
)不重置身份矩阵(glLoadIdentity()
)。例如:
{ /* your rendering code */
glLoadIdentity();
camera.applyTransformation();
render_scene();
glPushMatrix(); // ensures that the transformation isent
// directly applied to the matrix should
// you want to render more thing with the
// main camera after the view model
viewmodelCamera.applyTransformation();
render_viewmodel();
glPopMatrix(); // complementary call for glPushMatrix()
// marks the end of this matrix operation
// on the matrix stack
possibly_render_more_things() // if you wish
} /* end of rendering code */
如果您正在为相机使用矩阵(如果您打算正确使用现代OpenGL,则应该使用矩阵),所有您需要做的就是添加两个MVP(模型视图投影)矩阵,基本相机和模型视图camra,并将这些结果传递给你的着色器进行枪渲染。
希望这有帮助!
编辑:只是想到我提到,第二台相机基本上就像在模型空间中为你的枪模型工作,你会使用你当前存储在gun.x中的单位(对于前)(也不要)使用公共变量),并进行相机的转换。