Java LWJGL在屏幕右侧渲染手枪模型

时间:2016-02-15 14:04:26

标签: java rotation lwjgl

大家好我正在研究武器渲染,当我不得不计算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

但它似乎无法正常工作。

1 个答案:

答案 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中的单位(对于前)(也不要)使用公共变量),并进行相机的转换。