3d转换n00b需要开源mod的帮助

时间:2011-03-12 18:27:15

标签: 3d matrix transformation minecraft

嘿所有人。我需要一些3d旋转的帮助。我没有做太多的游戏开发,几乎不记得我在学术界学到了什么。我在3D世界(Minecraft)中渲染一个2D图像,并将玩家的目标坐标对准图像的左下角。

  • XZ的平面是游戏中的可行走表面
  • Y是垂直的
  • 图像始终为90度角

问题是当我尝试水平渲染图像时,它几乎不起作用。有时水平有时垂直。当我垂直渲染时,它工作得很漂亮。我确定它的数学不好。我通过审判并在我的大部分时间里都犯了错误。俯仰和偏航是相对于玩家的视角。这就是我想用来设置图像位置和方向。

这是一个开源的Minecraft服务器插件。随意看看:

https://bukkit-modders.googlecode.com/svn/trunk/

此外,如果您看到可以通过使用更多矩阵/矢量巫术来减少逻辑,请随时发表评论。

    private Matrix4d calculateOrientation(Player player) {

    Matrix4d orientation = new Matrix4d();
    orientation.setIdentity();

    Location location = player.getLocation();

    Matrix4d rotY = new Matrix4d();
    rotY.setIdentity();

    double yaw = Math.abs(location.getYaw());

    yaw %= 360;

    double baseAngle = 0;
    int sign = (location.getYaw() < 0) ? -1 : 1;

    if (yaw > (90 - 45) & yaw < (90 + 45)) {
        baseAngle = 90;
    } else if (yaw > (180 - 45) & yaw < (180 + 45)) {
        baseAngle = 180;
    } else if (yaw > (270 - 45) && yaw < (270 + 45)) {
        baseAngle = 270;
    }

    // Alight the left edge with the targeted location
    //I have no idea why this works.
    if (sign > 0) {
        baseAngle -= 180;
        rotY.rotY(Math.toRadians(baseAngle));
    } else {
        baseAngle += 180;
        rotY.rotY(Math.toRadians(baseAngle));
    }

    Matrix4d rotXZ = new Matrix4d();
    rotXZ.setIdentity();

    double rotX = 0;
    double rotZ = 0;

    if (location.getPitch() > 45) {
        //Rendering Flat in the plane of XZ
        //This block is pretty broken
        if (baseAngle == 0) {
            rotX = 90;
        } else if (baseAngle == 90) {
            rotZ = 90;
        } else if (baseAngle == 180) {

        } else if (baseAngle == 270) {
            rotZ = -90;
        }
    }

    rotXZ.rotX(Math.toRadians(rotX));
    rotXZ.rotZ(Math.toRadians(rotZ));

    orientation.mul(rotXZ);
    orientation.mul(rotY);

    return orientation;
}

}

1 个答案:

答案 0 :(得分:0)

行。我有答案,但尚未实施解决方案。总之,当&gt;时,关于Y的旋转是不好的。 90度,而应该使用X和X旋转的等效组合。

关于右手坐标系和一些疯狂的矩阵数学的东西!