可視化手法 | ![]() ![]() |
例題 - Fly-Throughの作成
fly-throughは、3次元空間内でカメラを移動することにより生じる効果で、たとえば、飛行機に乗っているかのように、カメラと共に飛んでいるような印象を得ます。背景の中で、物体によって暗くなっている部分をfly-throughしたり、またはある特定の点にカメラの焦点を定めたままの状態にすることでfly-throughを行うことができます。
たとえば、一連のステップにおいてx軸に沿ってカメラを移動することでこれらの効果を得ることができます。fly-throughを作成するため、カメラの位置とカメラのターゲットを同時に移動します。
つぎの例題は、fly-though効果を使って、風速のベクトル場で定義される物体内で表示された等特性サーフェスの内部を表示します。このデータは、北アメリカの空気の流れを示しています。
同じデータを固定の視点で表示するには、coneplot
を参照してください。
手法のまとめ
物体データのグラフ化
最初のステップは、コーンプロットを使って、空気の流れと等特性サーフェスを描きます。
これらのコマンドの使用法の情報については、isosurface
, isonormals
, reducepatch
, coneplot
を参照してください。
コーンプロットを描画する前に、データの縦横比 (daspect
) を [1,1,1]
に設定することで、最終的なビューに対して正しいコーンサイズを計算することができます。
load wind wind_speed = sqrt(u.^2 + v.^2 + w.^2); hpatch = patch(isosurface(x,y,z,wind_speed,35)); isonormals(x,y,z,wind_speed,hpatch) set(hpatch,'FaceColor','red','EdgeColor','none'); [f vt] = reducepatch(isosurface(x,y,z,wind_speed,45),0.05); daspect([1,1,1]); hcone = coneplot(x,y,z,u,v,w,vt(:,1),vt(:,2),vt(:,3),2); set(hcone,'FaceColor','blue','EdgeColor','none');
視点の設定
正しい表示を行うために、視点に関するパラメータを定義する必要があります。
camproj
)。camva
を参照)。camproj perspective camva(25)
光源の設定
カメラの位置に光源を設置し、等特性サーフェスやコーンの反射特性を変更することで、より現実味を表現することができます。
camlight
)。SpecularStrength
と DiffuseStrength
を1に設定)で、内部が暗く表現(AmbientStrength
を0.1に設定)されるよう、等特性サーフェスの反射特性を設定します。SpecularStrength
を1に設定すると、高い反射効果を示します。hlight = camlight('headlight'); set(hpatch,'AmbientStrength',.1,... 'SpecularStrength',1,... 'DiffuseStrength',1); set(hcone,'SpecularStrength',1); set(gcf,'Color','k')
レンダラの選択
この例題は、光源照射を使っているので、MATLABは zbuffer
を使うか、または、可能ならば、OpenGL
レンダラの設定を使う必要があります。OpenGLレンダラは、アニメーションの高速表示を行います。しかし、gouraudライティングを必要とし、zbufferを使っているphongライティングのようにスムーズではありません。つぎのように2つの選択が可能です。
lighting gouraud set(gcf,'Renderer','OpenGL')
lighting phong set(gcf,'Renderer','zbuffer')
ストリームラインでカメラのパスを設定
ストリームラインは、ベクトル場の中で、流れの方向を示すものです。つぎの例題では、物体内を通るパスに射影するために、1つのストリームラインのx, y, z座標を使います。カメラは、このパスに沿って移動します。つぎの事柄が含まれます。
stream3
を使うこともできます)。hsline = streamline(x,y,z,u,v,w,80,30,11); xd = get(hsline,'XData'); yd = get(hsline,'YData'); zd = get(hsline,'ZData'); delete(hsline)
Fly-Throughの実現
空中飛行を作成するには、カメラの位置とカメラのターゲットを同じパスに沿って移動します。この例題では、カメラよりもx軸に沿って、5要素先にカメラターゲットが配置されています。また、カメラの位置をぶつかったりしないように、カメラターゲットのx座標に小さい値が加えられ、xd(n) = xd(n+5)
の状況が生じても、カメラとターゲットが、同じ位置にならないようにしています。
drawnow
を使って、個々の移動の結果を表示します。for i=1:length(xd)-50 campos([xd(i),yd(i),zd(i)]) camtarget([xd(i+5)+min(xd)/100,yd(i),zd(i)]) camlight(hlight,'headlight') drawnow end
つぎのスナップショットは、i
の値が 10
, 110
, 185
の場合の図です。
![]() | 例題 - カメラの移動 | 低水準カメラプロパティ | ![]() |