空間に点・線・面を描いて、次のような3D物体を表示してみましょう。
|
サンプルプログラムのソースをファイルインします。
| aString aURL aFilename aBrowser aWindow aPackage aNavigator aClass aProtocol aSelector | aString := 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/VisualWorks/Exercises/Exercise_3D/Exercise-3D.st'. aURL := JunURL named: aString. aURL exists ifFalse: [^nil]. aFilename := Filename defaultDirectory construct: aURL asURI tail. aURL downloadTo: aFilename. aFilename exists ifFalse: [^nil]. aFilename fileIn. aBrowser := #{Refactory.Browser.RefactoringBrowser} value open. aWindow := aBrowser builder ifNil: [^nil] ifNotNil: [:aBuilder | aBuilder window]. aWindow displayBox: (JunGeometry alignedBoxWithScreenCenter: 800 @ 600). aPackage := Store.Registry packageNamed: 'Foo-3D'. aPackage ifNil: [^nil]. aNavigator := aBrowser navigator. aNavigator selectPundle: aPackage. aClass := #{ThreeDimension} value class. aProtocol := #examples. aSelector := #example0. (aNavigator state) classesAndNameSpaces: (Array with: aClass); protocols: (Array with: aProtocol); selectors: (Array with: aSelector). aNavigator setState: aNavigator state; changed
|
サンプルプログラムを見てみましょう。
ThreeDimension クラスの examples カテゴリに登録されています。
システムブラウザで「Foo-3D」→「ThreeDimension」→ class タブ選択 →「examples」をたどってください。
問題も同じカテゴリに登録されています。
空間に軸を表示します。
プログラム:"ThreeDimension example0."
| aBody | aBody := JunOpenGL3dCompoundObject new. aBody add: JunOpenGL3dObject axes. aBody show. ^aBody
|
軸の色が RGB カラー(Red: X軸, Green: Y軸, Blue: Z軸)で表現されています。
グラブボタン( )やホィール(
)などを使って、軸を回転させて、3次元に描かれていることを確認しましょう。
軸の先に点を表示します。
プログラム:"ThreeDimension example1."
| aBody | aBody := JunOpenGL3dCompoundObject new. aBody add: JunOpenGL3dObject axes. aBody add: (1 , 0 , 0) asJunOpenGL3dObject. aBody add: (0 , 1 , 0) asJunOpenGL3dObject. aBody add: (0 , 0 , 1) asJunOpenGL3dObject. aBody add: (-1 , 0 , 0) asJunOpenGL3dObject. aBody add: (0 , -1 , 0) asJunOpenGL3dObject. aBody add: (0 , 0 , -1) asJunOpenGL3dObject. aBody show. ^aBody
|
空間に点をいくつか表示します。
プログラム:"ThreeDimension example2."
| aBody | aBody := JunOpenGL3dCompoundObject new. aBody add: JunOpenGL3dObject axes. (-1 to: 1 by: 0.1) do: [:aNumber | aBody add: (aNumber , 0 , 1) asJunOpenGL3dObject]. aBody show. ^aBody
|
プログラム:"ThreeDimension example3."
図のような立方体を点で描画するプログラムを作成してください。
|
空間に線を表示します。
プログラム:"ThreeDimension example4."
| aBody | aBody := JunOpenGL3dCompoundObject new. aBody add: JunOpenGL3dObject axes. aBody add: (-1 , 0 , 1 to: 1 , 0 , 1) asJunOpenGL3dObject. aBody show. ^aBody
|
プログラム:"ThreeDimension example5."
図のような立方体を線で描画するプログラムを作成してください。
|
空間に面を表示します。
プログラム:"ThreeDimension example6."
| aBody | aBody := JunOpenGL3dCompoundObject new. aBody add: JunOpenGL3dObject axes. aBody add: (Jun3dPolygon points: (Array with: -1 , -1 , 1 with: 1 , -1 , 1 with: 1 , 1 , 1 with: -1 , 1 , 1)) asJunOpenGL3dObject. aBody show. ^aBody
|
プログラム:"ThreeDimension example7."
図のような立方体を面で描画するプログラムを作成してください。
|