gpt4 book ai didi

3d - 给定球体纹理的 UV 坐标,计算球体的 XYZ 点

转载 作者:行者123 更新时间:2023-12-05 04:18:53 27 4
gpt4 key购买 nike

我有一个 3D 球体。在运行时,我正在为它生成一个动态的 2048x1024 纹理。在此纹理上绘制了一个小圆圈,可以在任何地方。我在纹理上有这个圆的 x/y,因此有相应的 UV 坐标。现在,我想插入这个小圆圈在我的球体上的确切位置。

这是我一直在使用的代码,但它似乎总是偏离 +/-90 度

// U, V are original UV obtained from dynamic texture.

_u = Math.PI * U;
_v = -2 * Math.PI * V;

_x = Math.cos(_u) * Math.sin(_v) * radius;
_y = Math.sin(_u) * Math.sin(_v) * radius;
_z = Math.cos(_v) * radius;

感谢您的帮助!

最佳答案

根据您在评论中发布的代码,这里是如何生成 X、Y 和 Z 值。

theta = 2 * PI * U;
phi = PI * V;

_x = Math.cos(theta) * Math.sin(phi) * radius;
_y = Math.sin(theta) * Math.sin(phi) * radius;
_z = -Math.cos(phi) * radius;

旧答案:

您的代码没问题。你确定球体是以同样的方式生成的,并且极点是沿着 Z 轴的吗? “通常”球体是用沿 Y 轴的极点生成的。检查这个。

否则,如果您总是偏离 +/- 90°,请尝试定义 x 和 y 的 sin 和 cos。例如:

_x = -Math.sin(_u) * Math.sin(_v) * radius;
_y = Math.cos(_u) * Math.sin(_v) * radius;

是原件的 90° 旋转。

有 8 种不同的方法可以计算这两个具有不同符号的分量的正弦/余弦。在不知道球体是如何生成的情况下,您必须全部尝试。他们去

(x = sin(u), y = cos(u));
(x = sin(u), y = -cos(u));
(x = -sin(u), y = cos(u));
(x = -sin(u), y = -cos(u));

(x = cos(u), y = sin(u));
(x = cos(u), y = -sin(u));
(x = -cos(u), y = sin(u));
(x = -cos(u), y = -sin(u));

然而,这很痛苦而且很棘手,我强烈建议您尝试找出您的球体是如何生成的。它们通常通过循环 U 和 V 来生成 x、y、z 位置。

关于3d - 给定球体纹理的 UV 坐标,计算球体的 XYZ 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840429/

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