200 likes | 529 Views
Module - VPython. 編者 : 張修為 修訂 : 江清水. Contents. 1. Vpython 簡介 2. 建立 一個球體 3. 給 定球體的 屬性 ( 含 材質及自建材質 ) 4. 視 線 (眼睛位置及看的方向) 5. 給 定 光源 6. H ome Work: 球體 的 運轉. 1. Vpython 簡介. 提供繪製 3D 圖形的函式庫及模組 透過寫好的函式直接呼叫出 3D 物件. 1. VPython 下載點及安裝. http :// www.lfd.uci.edu/~ gohlke/pythonlibs/
E N D
Module -VPython 編者: 張修為 修訂:江清水
Contents 1. Vpython 簡介 2. 建立一個球體 3. 給定球體的屬性(含材質及自建材質) 4. 視線(眼睛位置及看的方向) 5. 給定光源 6. Home Work: 球體的運轉
1. Vpython簡介 • 提供繪製3D圖形的函式庫及模組 • 透過寫好的函式直接呼叫出3D物件
1. VPython下載點及安裝 • http://www.lfd.uci.edu/~gohlke/pythonlibs/ -64位元電腦選擇VPython-5.74.win-amd64-py3.3.exe -32位元電腦選擇VPython-5.74.win32-py3.3.exe 下載完後一直選擇下一步便可安裝成功
2. 建立球體-範例 from visual import * sphere() 以上程式便可以直接做出如右圖的3D球體 試著按住滑鼠左右鍵後移動滑鼠(Zoom in/out)試著按住右鍵後移動滑鼠(Moving Camara)
3. 建立球體-屬性範例 from visual import * scene = display(title='test',x=0, y=0, width=600, height=600,background=(0,0,0)) ball = sphere(pos=(0,0,0), radius=0.5) 以上程式便可以直接做出如右圖的3D球體
3. 內建material • materials.woodmaterials.roughmaterials.marblematerials.plasticmaterials.earthmaterials.diffusematerials.emissivematerials.unshadedmaterials.chromematerials.blazedmaterials.silvermaterials.BlueMarblematerials.bricks
3. 基本程式-範例 from visual import * sphere(color=color.orange, material=materials.wood) 以上程式便可以直接做出如右圖的3D球體
3. 自建材質 • 我們可以透過設定texture來自行建置材質 materials.texture(data=參數設定, mapping=貼圖方式, interpolate=False) 我們可以透過改變上列紅色的部分來做設定 參數設定可以是改變透明度(四格陣列),也可以直接給予顏色值(如給定color.red)貼圖方式有三種:(1)rectangular:矩形貼圖,貼一整面,多用在平面及立方體的某一面 (2)sign:類似rectangular,但不受到原本物體的顏色跟角度影響以及只能貼一面 (3)spherical:環繞貼圖,將設定套用到整個物件上
3. 自建材質範例 範例如下: from visual import * checkerboard = ( (0,1,0,1), (1,0,1,0), (0,1,0,1), (1,0,1,0)) //設定四格格子 顯示出透明度 1為不透明 tex = materials.texture(data=checkerboard, mapping=“rectangular”,//建立texture 資料來源為以上的checkerboard interpolate=False) box(axis=(0,0,1), color=color.cyan, material=tex)//建立一個box 貼上材質
3. 自建材質範例結果 可以看到box的材質變成間格狀
4. 視線-CNTER/FORWARD • 一般來說視線是由起點與終點所組成的一條射線 • 我們可以透過設定center設定我們視線的起點 (代表著我們人的眼睛位於何處) • 並透過設定forward設定我們要視線的終點 (我們看向的位置) • Vpython起始的center都是正中央center(0,0,0),終點forward都是(0,0,1) • 我們可以透過更改場景的此兩變數達到做出視線改變的效果 • 範例: • 如右下圖, 我們繪製藍色X軸,紅色Y軸,綠色Z軸起始的視線是由Z軸(0,0,0)直接射向(0,0,-1)位置所在
4. 視線-CNTER/FORWARD-範例 修改範例如下: from visual import * New = display(title=‘view example’, //設定新的場景NEW x=0, y=0, width=600, height=600,視線起點(1,1,1)看到終點(-1,-1,-1) center=(1,1,1), background=(0,0,0),forward=(-1,-1,-1)) New = display.get_selected()//將New顯示 curve(pos=[(-10,0,0), (10,0,0)], radius=0.2,color=color.blue) //畫出x軸顏色藍色 curve(pos=[(0,-10,0), (0,10,0)], radius=0.2,color=color.red) //畫出y軸顏色紅色 curve(pos=[(0,0,-10), (0,0,10)], radius=0.2,color=color.green) //畫出z軸顏色綠色
4. 視線-CNTER/FORWARD-範例 範例結果如下: 可以看到視線換到座標的(1,1,1)並望向(-1,-1,-1)斜對角
5. 光源-lighting • Vpython起始會幫我們打一道光源,因此才看的見物件 • 我們可以透過增加場景的光源達到照射物體產生陰影的效果 • 範例: • from visual import * • scene2 = display(title='view example', • x=0, y=0, width=600, height=600, • center=(0,0,1), background=(0,0,0),forward=(0,0,-1)) • scene2 = display.get_selected() • scene2.lights = [] //將原本起始光源取消 • lamp = local_light(pos=(5,5,5), color=color.red)//設置新的光源來自(5,5,5) 為紅色 • ball = sphere(pos=(0,0,0), radius=1)//顯示球體在(0,0,0)
5. 光源-注意事項 1.光源的設定是會重疊累加的,因此不將預設的光源取消會造成視覺的錯覺 2. 物體會擋住光源因此背向光源的物體表面是會呈現不被照射(黑暗)的狀態
7. 球體的運轉 • 根據以上所完成的程式加入一個移動的光源,此光源在XY(Z=0)平面上以半徑為10的圓軌跡上繞Z軸移動。 • 設定一個紅色木頭(wood)材質小球位於光源前一單位,可以讓經由視覺看到光源的移動 • 制定一個箭頭由紅色小球指向光源照射方向。 • 可否改變視線方向而固定光源?
練習 • 1.設定視窗名為“學號" • 2.加入一個球體在(0,0,0) 半徑4 • 3.視線改由(1,0,1.5)望向整個坐標系 • 4.自建貼圖由四個顏色組成紅黃藍綠