Javascript 将X Y Z坐标转换为屏幕X Y坐标有什么问题?
我正在制作一个HTML5画布演示,演示球体在3D空间中的弹跳。这很简单。每个球都有X、Y和Z坐标。这些坐标然后被转换成屏幕上的X和Y坐标,我在这里读到 我从上面的链接得到的,将X,Y,Z坐标转换成X和Y的公式是Javascript 将X Y Z坐标转换为屏幕X Y坐标有什么问题?,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,我正在制作一个HTML5画布演示,演示球体在3D空间中的弹跳。这很简单。每个球都有X、Y和Z坐标。这些坐标然后被转换成屏幕上的X和Y坐标,我在这里读到 我从上面的链接得到的,将X,Y,Z坐标转换成X和Y的公式是 screenX = (depth/(Z+depth)) * X screenY = (depth/(Z+depth)) * Y 我在这里展示了JSFIDLE中的工作代码 但这里有些不对劲。你能告诉我我做错了什么吗?目前你的原点(origo)在左上角。投影x和y以使原点或此处:笛卡尔坐标
screenX = (depth/(Z+depth)) * X
screenY = (depth/(Z+depth)) * Y
我在这里展示了JSFIDLE中的工作代码
但这里有些不对劲。你能告诉我我做错了什么吗?目前你的原点(origo)在左上角。投影x
和y
以使原点或此处:笛卡尔坐标[0,0,0]
位于屏幕中心:
f = fieldOfView / (viewDistance + z);
px = x * f + screenWidth * 0.5;
py = y * f + screenHeight * 0.5;
与焦距有关,例如128-256fieldOfView
转换viewdance
值z
和px
是投影的二维坐标py
另外:您可以使用
rect()
s替换行操作,如果您将它们缓存到屏幕外画布,则可以将其“blit”到主画布,而不是每次都清除并重新绘制,这会提高性能。到底是什么问题?它们不会反弹吗?或者它们根本不动?看起来它们确实按预期反弹,但我希望它看起来像我从中心看“房间”。但是它看起来像是倾斜到左上角了。您的坐标系相对于左上角,而不是中心和2。你所有的位置都在正八分之一-你从不为x和y选择负值。