Math 如何使用光线跟踪方法获取三维矩形的UV坐标?

Math 如何使用光线跟踪方法获取三维矩形的UV坐标?,math,geometry,raytracing,Math,Geometry,Raytracing,我目前正在进行光线追踪。我对视图光线碰撞有问题。我不知道如何得到光线和平面的交点,更准确地说,我的问题不是找出光线和平面的交点,问题是将这个坐标转换成uv坐标(这个矩形可以在世界上任意旋转)进行纹理贴图。我知道这个矩形上的一个点,它的法线和边界。一个矩形的四个顶点位于一个球体上: A - top left B - top right C - bottom right D - bottom left 球体中心: O 和矩形内球体上的交点ABCD: I 这样做的目的是识别三角形的所有边,因为它

我目前正在进行光线追踪。我对视图光线碰撞有问题。我不知道如何得到光线和平面的交点,更准确地说,我的问题不是找出光线和平面的交点,问题是将这个坐标转换成uv坐标(这个矩形可以在世界上任意旋转)进行纹理贴图。我知道这个矩形上的一个点,它的法线和边界。

一个矩形的四个顶点位于一个球体上:

A - top left
B - top right
C - bottom right
D - bottom left
球体中心:

O
和矩形内球体上的交点ABCD:

I
这样做的目的是识别三角形的所有边,因为它可以让我们知道平面上点
I
的坐标。因此,如果我们用
A(0,rect.height)
D(0,0)
移动平面上的矩形,那么可以通过求解以下方程组找到点
I

x^2+y^2=DI^2               - circle equation with center in point D and radius DI
x^2+(y-rect.height)^2=AI^2 - circle equation with center in point A and radius AI
由此得出:

y = (DI^2-AI^2+rect.height) / (2*rect.height)
x
可以有两个值(正值和负值),但是我们只对正值感兴趣,因为只有正值会在rect内

x = sqrt(DI^2-(DI^2-AI^2+rect.height)/(2*rect.height))
然后可以通过以下方式计算UV
UV(x/rect.width,y/rect.height)

然而,
AI
DI
的长度仍然未知,但可以使用


这看起来更像是一个数学问题,而不是一个特定的编程问题。你们有矩形的局部坐标系吗?它是如何表示的?你好,我不明白什么是局部坐标系。我只知道它的大小和这个矩形的中点normal@Haluzman这远远不足以渲染它。。。要么你得到了4分,要么你得到了它的大小和。。。只要一个点+法线就会告诉你它的平面。。。对于第一种情况,请看它支持三角形和球体。。。所以矩形是2 x三角形。。。。紫外光谱由重心法获得。对于第二种情况,您只需将全局位置转换为局部并重新缩放为纹理大小…@Spektre我想说,知道矩形的法线和边界点(我假设它们已知)就足以将rect旋转到(0,0,0)。但是,必须至少将一个边界点(例如左上角)与其他边界点区分开来。您好,感谢您的评论,更准确地说,我知道一个点,我希望它是矩形的大小(宽度和高度),并且在场景中以某种方式旋转的法线。我需要这个矩形位于球体上。所以我把这些点放在哪里,它们的旋转法线,它们指向矩形的原点和大小。@Haluzman,所以矩形被施加在一个球体上,你知道它的边界点(并且可以区分它们),对吗?@Haluzman,如果你知道施加矩形的球体的半径,你可以计算弧距离(左上角,交点)和弧距离(左下角,交点)。这样,在平面上,所有边都是已知的三角形,找到第三个顶点的uv坐标变得很简单task@Haluzman您应该编辑您的问题以添加此信息,因为这对于回答此问题至关重要(现在您的问题无法回答)…也可能是矩形和球体的示例…如果您可以添加屏幕截图或草图。。。
AI = (Radius of the Sphere) * (Angular orthodromy length must be in radians)
Radius of the Sphere = sqrt((O.x - A.x)^2+(O.y - A.y)^2+(O.z - A.z)^2)
Angular orthodromy length = arccos(sin(a1)*sin(a2)+cos(a1)*cos(a2)*cos(b2-b1))

a1 is angle AOA1,  where A1(A.x, O.y, A.z)
b1 is angle O1OA1, where O1(O.x, O.y, A.z)
a2 is angle IOI1,  where I1(I1.x, O.y, I.z)
b2 is angle O2OI1, where O2(O.x, O.y, I.z)