<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 場景窗口 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屬性一致。 ![](https://box.kancloud.cn/2016-03-19_56ed1baf4d2b7.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,其中有兩個立方體和一個球體。 ![](https://box.kancloud.cn/2016-03-19_56ed1baf63e1c.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))] > > ``` > > 可以用如下的語句查看光源的屬性: > > ``` > &gt;&gt;&gt; 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)。 > ![](https://box.kancloud.cn/2016-03-19_56ed1baf7a5c0.png) > > 改變照相體的center屬性對照相機進行平移 * **autocenter** : 如果設置為True的話,將自動計算center屬性,使得它為包含所有物體的最小的長方體的中心,此最小長方體的各邊與x, y, z軸平行。這樣,照相機始終跟隨著場景中的物體,因此如果你移動了場景中的任何物體,都有可能改變center屬性。 * **forward** : 照相機所指向的方向。也就是從照相機所在的位置到center的方向矢量。用戶不能直接修改照相機所在的位置,但可以通過scene.mouse.camera獲得。當用戶旋轉場景時,其實就是在修改forward屬性。當forward被修改之后,照相機將會改變其位置使得其方向和forward矢量平行,其中心正對center點。forward的缺省值為(0,0,-1),因此是從上往下的俯視觀察場景。 > ![](https://box.kancloud.cn/2016-03-19_56ed1baf9047c.png) > > forward屬性改變照相機的方向和位置
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看