gpt4 book ai didi

java - 无法根据俯仰和偏航正确计算法线/方向 vector

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:05 25 4
gpt4 key购买 nike

enter image description here

我的俯仰和偏航一团糟。我有垫的俯仰和偏航,但梁的俯仰和偏航搞砸了。我如何计算垫的俯仰和偏航的法 vector ?我尝试了 stackoverflow 的大量数学运算,但到目前为止它们都失败了。

我首先尝试的是将垫的间距增加 90,但偏航仍然一团糟: enter image description here

这就是当我使用 pad 的俯仰和偏航来计算方向 vector 时发生的情况: enter image description here

接下来我尝试做的是将光束的俯仰和偏航与垫的俯仰和偏航分开,并分别计算它们。这基本上有效,但偏航仍然完全困惑。

我用来根据光束的偏航和俯仰计算方向 vector 的是 minecraft 用于对生物执行此操作的实用程序:

public static Vec3d getVectorForRotation3d(float pitch, float yaw) {
float f = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI);
float f1 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI);
float f2 = -MathHelper.cos(-pitch * 0.017453292F);
float f3 = MathHelper.sin(-pitch * 0.017453292F);
return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2));
}

但这显然失败了,所以最后,我使用垫子的间距尝试了以下操作:

    double pitch = ((te.getPadPitch() + 90) * Math.PI) / 180;
double yaw = ((te.getPadYaw() + 90) * Math.PI) / 180;
double x = Math.sin(pitch) * Math.cos(yaw);
double y = Math.sin(pitch) * Math.sin(yaw);
double z = Math.cos(pitch);
Vec3d lookvec = new Vec3d(x, y, z);

这对于偏航非常有效,但对于俯仰却失败了 enter image description here

俯仰和偏航都是根据玩家头部旋转的方式计算的。当我在垫子本身上使用它们时,垫子的俯仰和偏航是 100% 正确的,但当我在横梁上使用它们时,它们就搞砸了。这些都是使用 GL 函数

虽然俯仰和偏航不考虑玩家头部的方向系统,但它与垫一起工作。

例如,这是这张照片中镜子的偏航,它非常适合它的当前值 enter image description here垫子是这样旋转的:

    GlStateManager.rotate(te.getPadYaw(), 0, 0, 1);
GlStateManager.rotate(te.getPadPitch(), 1, 0, 0);

这条线是这样画的:

    public static void drawConnection(BlockPos pos1, BlockPos pos2, Color color) {
GlStateManager.pushMatrix();

GL11.glLineWidth(1);

GlStateManager.disableTexture2D();
GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), 0.7f);
GlStateManager.translate(0.5, 0.7, 0.5);

VertexBuffer vb = Tessellator.getInstance().getBuffer();
vb.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
vb.pos(pos2.getX() - pos1.getX(), pos2.getY() - pos1.getY(), pos2.getZ() - pos1.getZ()).endVertex();
vb.pos(0, 0, 0).endVertex();
Tessellator.getInstance().draw();

GlStateManager.enableTexture2D();

GlStateManager.popMatrix();
}

我得到的 pos1 和 pos2 是这样的 [当前,最近]:

        double pitch = ((te.getPadPitch() + 90) * Math.PI) / 180;
double yaw = ((te.getPadYaw() + 90) * Math.PI) / 180;
double x = Math.sin(pitch) * Math.cos(yaw);
double y = Math.sin(pitch) * Math.sin(yaw);
double z = Math.cos(pitch);
Vec3d lookvec = new Vec3d(x, y, z);

Vec3d centervec = new Vec3d(te.getPos().getX() + 0.5, te.getPos().getY() + 0.8, te.getPos().getZ() + 0.5);
Vec3d startvec = centervec.add(lookvec);

Vec3d end = startvec.add(new Vec3d(lookvec.xCoord * 30, lookvec.yCoord * 30, lookvec.zCoord * 30));
RayTraceResult result = te.getWorld().rayTraceBlocks(startvec, end, true, false, true);
Utils.drawConnection(te.getPos(), result.getBlockPos(), Color.RED);

如何根据垫子的俯仰和偏航正确计算法 vector 或垂直于垫子的 vector ?

此时我不知所措,因为我几乎尝试了在 google 上找到的所有内容,但大部分都没有成功。

编辑:有人告诉我,将光束俯仰和偏航与垫的俯仰和偏航分开是没有必要的,我同意了,但我无法让它正常工作。为什么梁绘图数学与焊盘数学不同?

最佳答案

我不确定这是否是你的问题,但对我来说,当我处理它们时,mc 返回了一些困惑的偏航位置,这就是我解决这个问题的方法

    if (Yaw < -180.0) Yaw += 360;
else if (Yaw > 180) Yaw -= 360;

关于java - 无法根据俯仰和偏航正确计算法线/方向 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com