コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
接線ベクトル
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''接線ベクトル'''とは、2Dの[[UV座標]]を3Dの[[ローカル座標]]に変換したものです。 * U軸を3D変換したものは「Tangentベクトル」 * V軸は3D変換したものは「Binormalベクトル」 * そしてZ軸は「Normalベクトル([[法線ベクトル]])」と呼ばれます。 == 計算式 == TangentベクトルとBinormalベクトルの計算については、あらかじめUV座標と法線ベクトルはわかっている(頂点データとして保持している)前提となっているのが一般的です。 === Tangentベクトルの計算:Normalベクトルを使う方法 === 大雑把に1行で書くと以下のようになります。NormalベクトルとUpベクトルのクロス積を取ればTangentベクトルになります。 Vector3 tangent = Vector3.Cross(normal, Vector3.UnitY); しかし、上記の計算式にはNormalベクトルとUpベクトルが完全一致する場合にゼロを返すという欠点があります。 この問題の回避策として2種類のUpベクトルで計算して都合の良さそうな方を採用するという方法があります。 Vector3 tangent; Vector3 c1 = Vector3.Cross(normal, Vector3.UnitY); Vector3 c2 = Vector3.Cross(normal, Vector3.UnitZ); if (Vector3.Length(c2) < Vector3.Length(c1)) tangent = Vector3.Normalize(c1); else tangent = Vector3.Normalize(c2); Tangentベクトルの計算については、わりと重めの処理であり、かつ頻繁に変化する値でもないので、あらかじめCPU上で計算しておき、頂点データのひとつとして保持する方法が主流です。 === Tangentベクトルの計算:頂点座標とUV座標を使う方法 === // 頂点エッジ Vector3 edge1 = v1 - v0; Vector3 edge2 = v2 - v1; // UVエッジ Vector2 delta1 = u1 - u0; Vector2 delta2 = u2 - u0; // 接線ベクトル Vector3 tangent = normalize( (delta2.Y * edge1 - delta1.Y * edge2) / (delta1.X * delta2.Y - delta2.X * delta1.Y) ); === Binormalの計算式 === NormalベクトルとTangentベクトルの2つがわかっているならば、その2つのクロス積を取るだけです。 Vector3 binormal = Vector3.Normalize(Vector3.Cross(normal, tangent)); Binormalベクトルの計算については、わりと軽めの処理なので、頂点データを節約すべく、GPU上でリアルタイムに計算する方法が主流です。 ただGPUが貧弱なモバイル環境などではTangentベクトルと同様に事前にCPU上で計算しておいても良いと思います。モバイル向けの[[ローポリゴン]]で頂点データのサイズが問題になることはまずないと思います。
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化