我正在制作一个行星上的游戏,我计划存储数据的方式是6个二维数组,这是围绕球体的高度图(在立方体的面上) 。 我遇到的问题是,给定一个从球体中心向外指向的归一化向量,我如何确定这两个方面:
我目前的解决方案就是这个(使用XNA):
一个有用的约束是球体/立方体系统位于原点附近。
所以,需要解决的问题是: 给定方向向量,如何确定它与周围立方体的交叉点。使用此结果,我如何在2D数组中获取正确的值,该数组在此立方体的表面上“绘制”?
答案 0 :(得分:7)
查看方向的3个组成部分的大小。幅度最大的那个告诉你你击中的立方体的哪个面(它的符号告诉你它是+或 - 面。)
另外两个坐标为您提供2D映射值。但是,我们需要将它们标准化。如果XYZ方向的X值最大,则2D面部坐标只是U = Y / X和V = Z / X.这些都在-1到1之间。
注意从正面到负面的翻转,您可能需要翻转2D U和/或V值以匹配您的坐标系。
答案 1 :(得分:3)
# edges are called X_AXIS_POS, X_AXIS_NEG, Y_AXIS_POS, Y_AXIS_NEG, Z_AXIS_POS, Z_AXIS_NEG
if (x*x >= y*y) && (x*x >= z*z) :
return ( (x>0) ? X_AXIS_POS : X_AXIS_NEG, y/abs(x), z/abs(x))
if (y*y >= z*z) && (y*y >= x*x) :
return ( (y>0) ? Y_AXIS_POS : Y_AXIS_NEG, x/abs(y), z/abs(y))
return ( (z>0) ? Z_AXIS_POS : Z_AXIS_NEG, x/abs(z), y/abs(z))
答案 2 :(得分:0)
如果我正确地理解你,那你就是试图将一个像素从正方形上拉下来并放到球体表面上。所以我假设你已成功找到立方体上的像素。现在你缩放矢量,使它接触球体。所以你在球体上有一个x,y,z。
球体通常是从纸张映射的纹理。你可以找到它在XNA中的完成方式的参考(或者查看纹理表并尝试弄清楚),或者你可以这样做:制作一个沿x轴增加红色渐变并增加绿色渐变的纹理表沿着y。映射到球体上。看看会发生什么。