2017-01-05 12 views
1

3D空間で円柱を作成しようとしています。 私は3Dで始点と終点を取得し、頂点を配置するために、シリンダの底部と上部に2つの円を作成する必要があります。 座標(1,0,0)でベクトルuを作成し、方向ベクトルdir = end-startを計算することを考えました。 今私はベクトルw = u x dir: をこのように得るために十字積を作る。私はwでdirベクトルから90度離れている。問題は、次の位置w 'をwとw'の間の任意の角度でどのように計算するのですか? 私は回転行列について多くを読んで、私のようなもので、X軸を中心に回転することができる。回転円柱で3D円柱を生成する

Rx(angle) = 
(1 0   0   ) 
(0 cos(angle) -sin(angle)) 
(0 sin(angle) cos(angle)) 

が、方向は(1.442、-3.22、7.23)のようなものにすることができます。したがって、常にx軸ではありませんが、すべての軸で新しいw 'ごとに回転する必要があるかもしれません。そして、私はどの角度を計算する必要があるか、計算する方法、そしてどの角度が魔法の回転行列に属するのかを理解する方法を知らない。

答えて

1

あなたは(マトリックス変換にエンコードすることができます)このため基底ベクトルを必要としています。

だから、と仮定しましょう、あなたは得た:


​​- 3Dセンターは、あなたのシリンダー拠点の(x,y,z)
rポイント -

はあなたが必要とする変換行列を構築するために、半径


O[3] - 原点位置
X[3],Y[3],Z[3] - 基底ベクトル

だから、あなたが並列ベクトル取得する外積を利用することができます:あなたの4×4が行列Mを変換または頂点を計算するために直接X,Y,Z,Oを使用して構築今

O = p0; 
Z = p1-p0; 
Y = (1.0,0.0,0.0); 
if (|dot(Y,Z)/|Z||>0.75) Y = (0.0,1.0,0.0); // this just make sure Z and Y are not parallel 
X = cross(Y,Z); 
Y = cross(Z,X); 
X = r*X/|X|; 
Y = r*Y/|Y|; 

を:

ベース0:

x=cos(a); 
y=sin(a); 
z=0.0; 

BASE1:

x=cos(a); 
y=sin(a); 
z=1.0; 

a = <0.0,2.0*PI>は角度があります。 XY平面は基底と平行であり、zは円筒軸である。これら(x,y,z)が世界に変換するには、使用を座標:

x' = O[0] + x*X[0] + y*Y[0] + z*Z[0]; 
y' = O[1] + x*X[1] + y*Y[1] + z*Z[1]; 
z' = O[2] + x*X[2] + y*Y[2] + z*Z[2]; 

は、関連するQAを見てみましょう:GL_MODELVIEWまたはその代わりにこれを行うの一環としてMを使用してのOpenGLでネイティブに実行できる

(x',y',z') = M * (x,y,z) 

関連する問題