3d - テクスチャのUV座標を指定して、球のXYZポイントを計算します

3d geometry coordinates uv-mapping

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°回転です。

これらの2つのコンポーネントのサイン/コサインをさまざまな記号で実行する方法は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の位置を生成します。
関連記事

iphone - 3D効果で画像を回転させる方法は?

opengl - デスクトップ拡張現実アプリケーションの3Dモデル操作

javascript - GLGE API setRot / setRotXが機能しない

opengl - 3Dポイントを2Dスクリーン座標に投影するOpenTK

opengl - JOGLテクスチャの問題

3d - 3D投影に関する問題?

3d - kinectからファイルに3Dビデオを書き込む

3d - メートル単位で世界座標をとる変換行列の設定方法(拡張現実)

jquery - jQuery CADソフトウェア

c++ - DirectX 9での.Xモデルの読み込み