THREE.JS 3D演算で必要な計算(具体例)★とても重要★



ベクトルマトリクスクォータニオンの基礎知識は一応頭に置いておいて
回転、スケール、平行移動、いわゆるアフィン変換ばかりを 3Dの計算では実際には行うことになりますが これらはヘルパー関数に任せればよいので
他には どんな計算が必要か(ヘルパー関数化が出来ない(しにくい)計算は)と言うと

四次元の同次行列ならばW,X,Y,Zの順で説明しますが(普通はX,Y,Z,Wだけど順番が違うだけで同じ計算)
|ww,wx,wy,wz|
|xw,xx,xy,xz|
|yw,yx,yy,yz|
|zw,zx,zy,zz|
w〇行は基本的に(1,0,0,0)でいいとして
x〇,y〇,z〇,行は回転(姿勢)行列においてそのそれぞれx,y,z軸であり〇w列は各軸の平行移動成分です
とこれが分かっていると同次行列について理解が進みまた応用もしやすいでしょう

例えば速度ベクトルvだけが確かな時 姿勢行列はというと
vをz軸において上方ベクトルを(0,0,1,0)のy軸単位行列ayと置く時
姿勢行列のx軸はvとayの外積の直交ベクトルを求めてx軸に置けば
v方向を向いて上方ベクトルがy軸単位行列である姿勢行列が出来上がります
もちろん行列の正規化も忘れずに行いましょう
3D演算において外積crossは非常に重要なのでぜひマスターしましょう


また速度ベクトルv、位置ベクトルpがある時、目標位置ベクトルtへ向かうには
sub=t-pで方向ベクトルを求め
vとsubのなす角θを求め
vとsubの外積ベクトルcを求めたら
vをc軸周りにθ回転すれば速度vで目標へ向かいます
ちなみにこの場合の水平ベクトルはsubとcの外積です
このやり方の便利な点はθの曲がる角度を制限される時に便利です

subが求められたら それと大きさvとしての連立方程式を解いてもいいんですが
いわゆる ある軸上のある大きさのベクトルの 求め方ですかね
要するにsubを正規化してvを掛けます
曲がる角度に限界が無いのであればこちらでもいいです

上方ベクトルをy軸単位行列にしたいのならば
それをxz平面で考えて上方ベクトルはy軸単位行列にすればできます
この場合y軸方向の変位はもちろんないですよ


あと回転(姿勢)行列の正規化(ノーマライズ)(その行列の各行ベクトルそれぞれの正規化)はマメに行わないと予期しないバグが起こります
それと内積dotの符号によっては上下逆さまになる場合があるのでその注意もしましょう
基本ですが 二つのベクトルから平面を求めて その外積で直交ベクトルを求めて 三軸が揃います
平面のベクトルがゼロベクトルの時は仮に各軸の単位ベクトルを置いてください


ほかにはメッシュのジオメトリ生成やスプライトのUV関係、それにスプライン補完とか線形補完系の勉強をすれば
3D演算で困ることはあんまりないのではないかと思います





THREE.JSプログラミング講座
3Dプログラミング講座
NAS6LIB
THREE.JSテスト解説・THREE.JS使い方
THREE.JS examplesをいじってみた(フレネル反射透過シェーダー)
THREE.JS (半透明シェーダー)
THREE.JS 3D演算で必要な計算(具体例)★とても重要★
THREE.JS THREE-VRM をいじってみた

<<prev 半透明シェーダー : THREE-VRM をいじってみた next>>





戻る