Những gì bạn đang cố gắng để đạt được dường như rất nhiều liên quan đến điều này:
Tương tự tọa độ hình cầu trong kích thước n
trong trường hợp của bạn theo 2 chiều thì bạn chỉ cần sử dụng công thức này để ánh xạ các đỉnh của hình chữ nhật mà bạn có (hãy hy vọng nó được chia nhỏ) trên hình cầu của bạn (đừng quên nhân với một nửaDiameter ở đâu đó. Chỉ các nhà toán học mới sống trên một đơn vị hình cầu người đàng hoàng đang sử dụng đường kính ...)
EDIT: Vì tất cả điều này là một chút mơ hồ, tôi cung cấp thêm một số hiểu biết Những gì bạn cần từ công thức này sẽ được sử dụng:
x = r*sinθ*cosφ
y = r*sinθ*sinφ
z = r*cosθ
θ và φ là tọa độ hình cầu mà bạn đang tìm kiếm (Vĩ độ và Kinh độ) để có được nó, bạn lấy tọa độ x / y của các điểm trên một phần của hình ảnh toàn cảnh như vậy:
public Void getPointPosOnSphere(float Longitude,float Latitude,float r) {
x = r*Mathf.sin(Longitude)*Mathf.cos(Latitude);
y = r*Mathf.sin(Longitude)*Mathf.sin(Latitude);
z = r*Mathf.cos(Longitude);
return new Vector3(x,y,z);
}
//here you could have a for loop iterating through points of your rectangle for each
//point you'd have associated a map coordinate :
Vector3 pointSpacePos = getPointPosOnSphere(pointCoordY,pointCoordX,HalfDiamater);
//End of the for loop
sau đó, bạn sẽ có được ánh xạ tứ giác của mình trên một hình cầu dựa trên vị trí xy của anh ta trên hệ tọa độ 2D được dịch sang vị trí 3D trên không gian theo ánh xạ hình cầu.
EDIT: Chỉ cần có một ý tưởng, để đi xa hơn, bạn có thể gói gọn tọa độ của mặt phẳng trên quả cầu bằng các giá trị UV như sau:
for(int i = 0;i < vertices.Length; i++) {
vertices[i] = getPointPosOnSphere(UV[i].y,UV[i].x,HalfDiamater);
}
Ở đó, bạn có thể quản lý vị trí quad trên phần mềm 3D yêu thích của mình (hoặc thậm chí bằng mã thông qua thống nhất) chỉ bằng cách gán giá trị UV (nếu từ 0 đến 1 trên cả hai trục thì quad sẽ được bao quanh tất cả các hình cầu)
CẢNH BÁO: Sử dụng tia cực tím sẽ yêu cầu bạn thực hiện chuyển đổi từ radian sang Độ. (vì UV là 0 đến 1)