<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            場景窗口?

            visual中的所有的3D物體都在一個窗口中顯示,此窗口為display類的對象,通過這對象我們可以修改窗口的各種屬性;控制場景中的照相機,從各個角度觀察場景。

            控制場景窗口?

            從visual庫載入所有對象之后,缺省情況下,有一個可以用變量scene訪問的缺省的場景窗口對象,它也是初始情況下的當前窗口:

            >>> from visual import *
            >>> scene
            <visual.ui.display object at 0x032BF600>
            

            我們看到場景窗口對象是visual.ui.display類的一個實例。真正的窗口需要在其中放置物體才會被顯示出來。因此如果我們用display()創建自己的窗口對象的話,那么可以不用管這個缺省的窗口對象,我們創建的窗口對象將變成當前窗口。用box等類創建的3D物體將會被放到當前窗口中。下面語句調用display創建一個新的窗口對象:

            >>> scene2 = display(title='Scene2', x=0, y=0, width=600, height=200,  ...
                center=(5,0,0), background=(0,1,1))
            

            執行上面的語句之后,將創建一個標題為Scene2的窗口,其左上角的坐標為(0,0),寬度為600像素,高度為200像素,照相機所正對的位置的坐標(5,0,0),也就是說窗口中心的點的3D坐標為(5,0,0),背景為青色。注意要顯示窗口,我們需要往里面放物體:

            >>> box()
            >>> <visual.primitives.box object at 0x0334F090>
            
            >>> box(pos=(5,0,0), color=color.red)
            >>> <visual.primitives.box object at 0x0334F120>
            

            第一個立方體放在了缺省坐標(0,0,0)處,其顏色為缺省的白色;第二個立方體放在了坐標(5,0,0)處,顏色為紅色。紅色立方體在窗口的中心,和我們設置的窗口的center屬性一致。

            _images/vpython_manual_02.png

            在場景中放置立方體

            我們可以調用窗口對象的select方法使其成為當前窗口。通過display.get_selected()可以獲得當前窗口對象:

            >>> scene.select()
            >>> sphere()
            <visual.primitives.sphere object at 0x0331D7B0>
            >>> scene2.select()
            >>> sphere(pos=(2.5,0,0), color=color.blue)
            <visual.primitives.sphere object at 0x0331D810>
            >>> display.get_selected() == scene2
            True
            

            上面的程序先將scene改為當前窗口,然后在其中創建一個球體;接著將scene2改為當前窗口,在其中創建一個藍色的球體,放在坐標(2.5,0,0)處。最后調用display.get_selected()檢查當前窗口是否是scene2。執行這段程序之后,將出現兩個場景窗口,缺省窗口的標題為VPython,其中有一個球體;我們自己創建的窗口標題為Scene2,其中有兩個立方體和一個球體。

            _images/vpython_manual_03.png

            在第二個場景中放置球體

            窗口對象有如下的屬性:

            • foreground : 在窗口中創建物體時所采用的缺省顏色,缺省值為白色。例如運行 scene.foreground = color.green 之后,窗口中新添加的物體如果不指定顏色的話就會是綠色的。

            • background : 窗口的背景顏色,缺省值為黑色。

            • ambient : 環境光的顏色,缺省值為color.gray(0.2),為了和visual 3兼容,使用scene.ambient=0.2和scene.ambient=color.gray(0.2)是一樣的。

            • lights : 場景窗口中的光源列表,場景中的缺省光源為:

              [distant_light(direction=(0.22, 0.44, 0.88), color=color.gray(0.8)),
               distant_light(direction=(-0.88, -0.22, -0.44), color=color.gray(0.3))]
              

              可以用如下的語句查看光源的屬性:

              >>> scene.lights[0].direction
              vector(0.218217890235992, 0.436435780471985, 0.87287156094397)
              
            • cursor.visible : 控制場景窗口中鼠標是否顯示,如果設置為False的話,那么鼠標將被隱藏。你可以用它在用鼠標拖拽物體時隱藏鼠標,釋放物體時顯示鼠標。

            • objects : 窗口中所有可見的物體的列表,被隱藏的物體和光源不在此列表之中,當通過設置某物體的visible屬性隱藏它時,其效果就是將它從此列表中刪除。下面的語句讓場景中所有的box都變成紅色:

              for obj in scene2.objects:
                  if isinstance(obj, box):
                      obj.color = color.red
              
            • show_rendertime : 如果其值為true,那么在窗口的左下角將顯示如 "cycle:27: 5" 的字樣。它表示場景潤色的幀之間的間隔為27毫秒,每幀需要5毫秒時間潤色。這表明用戶的Python程序每幀有22毫秒的處理時間。

            • stero : 立體視覺設置。如果你有雙色3D立體眼鏡的話,不妨試試這個選項。例如scene.stereo="redcyan",將潤色為紅-青立體眼鏡用的場景,此外還有"redblue"和"yellowblue"等選項。此外還可以設置為"crosseyed",它將潤色左右兩個場景,當你左右眼交叉聚焦到右左兩個圖時,產生立體效果。和流行一時的立體圖片類似,反正我是看不出來。設置為"active"的話,產生可以用shutter glasses觀看的立體場景。

            • stereodepth : 修改立體視覺的深度,缺省值為0,設置為2有最好的立體效果。這個參數我沒有用過。

            下面的屬性 x, y, width, height, title和fullscreen等都只能在窗口隱藏的時候修改。因此通常是在用display創建窗口的時候同時設置這些屬性。如果你需要設置已經顯示了的窗口的屬性的話,先通過設置visible = False將其隱藏,設置這些屬性,最后再重新顯示窗口。

            • x, y : 窗口在屏幕中的位置,窗口左上角的屏幕坐標
            • width, height : 整個窗口的像素寬度和高度,包括邊框和標題欄
            • title : 窗口的標題欄中的文字,如果需要設置中文的話,需要設置為windows的缺省編碼,例如scene.title = u"中文標題".encode("gb2312")
            • fullscreen : 全屏顯示,如果用scene.fullscreen=True全屏顯示的話,將沒有窗口的邊框和標題欄,按Esc鍵退出
            • visible : 窗口是否可見,當某個物體被添加進窗口時,窗口將自動的被設置為可見
            • exit : 當exit為False的時候,將禁止窗口的關閉按鈕,也就是無法通過關閉按鈕關閉窗口,缺省值為True。

            控制照相機?

            照相機的控制是通過設置窗口的屬性來完成的。

            • center : 照相機所正對的3D空間的坐標點,即使用戶旋轉場景,照相機也始終正對著這個坐標。如果你修改了center的值的話,照相機將保持其方向不變,進行平行移動使得其正對center坐標。center的缺省值為(0,0,0)。

              _images/vpython_manual_04.png

              改變照相體的center屬性對照相機進行平移

            • autocenter : 如果設置為True的話,將自動計算center屬性,使得它為包含所有物體的最小的長方體的中心,此最小長方體的各邊與x, y, z軸平行。這樣,照相機始終跟隨著場景中的物體,因此如果你移動了場景中的任何物體,都有可能改變center屬性。

            • forward : 照相機所指向的方向。也就是從照相機所在的位置到center的方向矢量。用戶不能直接修改照相機所在的位置,但可以通過scene.mouse.camera獲得。當用戶旋轉場景時,其實就是在修改forward屬性。當forward被修改之后,照相機將會改變其位置使得其方向和forward矢量平行,其中心正對center點。forward的缺省值為(0,0,-1),因此是從上往下的俯視觀察場景。

              _images/vpython_manual_05.png

              forward屬性改變照相機的方向和位置

            首頁目錄

            上一篇文章

            Visual使用手冊

            下一篇文章

            聲音的輸入輸出

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线