我的音高和雅司病被弄亂了。 我有墊的俯仰和偏航,但梁的俯仰和偏航都搞砸了。 我如何計算墊的俯仰和偏航的法向量?我嘗試了一堆數學算法,但是它們都失敗了。
我接下來嘗試做的事情是將梁的間距和偏航距離墊的間距和偏航分開,並分別計算它們。這大部分工作,但偏航仍然完全搞砸了。
我用來從偏航和梁的間距計算的方向矢量是一個實用程序的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);
俯仰和偏航都是以玩家頭部旋轉的方式計算的。 當我在墊上使用它們時,墊的俯仰和偏擺是100%正確的,但當我在樑上使用它們時會發生混亂。這些都使用GL功能
雖然俯仰和偏航不尊重玩家的頭部定向系統,但它可以與墊子一起使用。
例如,這是在該PIC反射鏡的橫擺和它非常適合它的當前值 和墊轉動是這樣的:
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);
我如何計算法線矢量或垂直於墊片的矢量,從墊片的俯仰和偏航中恰當地進行計算?
我在這一點上很茫然,因爲我嘗試了幾乎所有在谷歌上找到的東西,但大部分都沒有運氣。
編輯:我被告知,分離梁的音高和偏離墊的音高和偏航不應該是必要的,我同意,但我不能讓它工作,否則。爲什麼梁的繪製數學與墊數學不同?
單個提示可能會幫助您或不會:Minecraft的偏航角度與您所期望的不符。看看[wiki.vg文章中的一些信息和圖表](http://wiki.vg/Protocol#Player_Look)。 (這可以解釋爲什麼通過偏轉旋轉鍵盤給出了不正確的結果 - 可能是在與原始的'getVectorForRotation3d'結合使用'yaw-90'的時候) – Pokechu22
我也建議尋找[bukkit如何處理這個] (https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/Location.java#L244)。 – hintss
@hintss hey hintss! <3謝謝你。我會試試看。 – demoniaque