這篇我們接著來看一下drawentityactor類,我們來看看這個繼承drawactor的類到底做了什麼事。我們之前學習了drawable對應的drawactor,那麼我們模擬的來看drawableentity對應drawentityactor,這樣就好理解一些。首先我們還是先來看drawentityactor的建構函式,看看他除了繼承drawactor以外還有哪些私有成員。下面是drawentityactor的建構函式。
1/*2繪製物件角色3*/
4 let drawactor = require('./drawactor');
5 let geometry = require('../core/geometry');
6 let stateset = require('../core/stateset');
7 let renderentity = require('../scene/renderentity');
8 let sceneroot = require('../scene/sceneroot');
9 let boundingbox = require('../util/boundingbox');
1011 let drawentityactor = function
(renderer) ;
1920 drawentityactor.prototype =object.create(drawactor.prototype);
21 drawentityactor.prototype.constructor = drawentityactor;
我們首先看到這個建構函式是需要renderer渲染物件作為引數的,其次他是繼承drawactor類的。他的私有成員有四個,分別是this._currentrenderentity當前處理的渲染實體;this._currentmaterial當前預設顏色狀態;this._isentitymaterial當這個標記為false時實體的材質取最上面節點的材質;this._currentboundingbox渲染實體的包圍盒。
就這些,其他只要是drawactor父類原型鏈上包含的成員屬性drawentityactor一概包含。 我們來看一下drawentityactor的成員函式有哪些,即他獨有的操作是什麼。我們還是老樣子,乙個乙個來看。
1//過載
2 pushstateset: function
(stateset)
9 } else13}
14else18}
19 },
這個是覆蓋了父類原型鏈上的pushstateset函式,我們很容易可以看到這是修改了當前渲染狀態樹this._currentstatebin上當前渲染實體對應的狀態stateset節點的狀態,其中討巧的是如果當前狀態為空,就取上級的渲染狀態stateset。剩下的就是將引數stateset狀態賦值給當前渲染實體對應的狀態樹上的狀態節點。
我們接下去看下乙個成員函式。
1 popstateset: function (stateset)8 } else
11 }else14}
15 },
此函式同樣是重構原型鏈上的popstateset函式,我們很容易可以看出來這個函式是將特定狀態節點刪除。這裡有乙個要特別注意,由於某些繼承上一級狀態的節點的狀態和上級的狀態是相同的,所以必須遍歷到最靠近葉子的節點才能安全刪除。
好,我們接下去看下乙個函式。
1 pushdrawable: function (geometry) else1112
this
._currentboundingbox.expandbyboundingbox(drawable.getboundingbox());
13this
.adddrawable(drawable);
14 },
這個函式就包含很多操作了,同樣是重構,所有的操作都是組裝渲染物件drawable。首先組裝狀態樹,接下來組裝geometry幾何體物件,然後裝配renderentity渲染物件,接下來設定材質material,然後設定包圍盒,最後加入可繪製物件drawable。裝配完成。接下去鯽魚還有介紹幾個函式。
1/*2提前遍歷renderentity的目的
3確認每個drawable的世界座標變換,確認除renderentity外的狀態樹
4相機樹基本不用考慮,只有主相機5*/
6 drawentityactor.prototype[sceneroot.typeid] = function
(root) ;
12//
renderentity
13 drawentityactor.prototype[renderentity.typeid] = function
(rentity) ;
35//
geometry已經是葉子,不需要繼續遞迴了
36 drawentityactor.prototype[geometry.typeid] = function
(geometry) ;
42 module.exports = drawentityactor;
這些是一些工具函式,但都掛在原型上,可見將來都可以用到。好了,今天的drawentityactor類就介紹完了,鯽魚謝謝大家陪伴,下週再見。
本文系原創,如需引用,請註明出處:
Zend Framework 框架學習(四)
zend controller包是zend framework mvc 的核心部分。也可以說是 zend framework 中最複雜的部分了。可以說搞清楚了zend controller的複雜流程,就明白了半個zend framework。開啟類zend controller front中的方法g...
爬蟲學習 Scrapy框架學習(四)
接之前的部落格內容 1 建立乙個工程和spider模板 2 編寫spider 3 編寫item pipeline 4 優化配置策略 1 reqeust類 向網路中提交請求的內容 request物件表示乙個http請求 由spider生成,由 執行 屬性或方法 說明 url request對應的請求u...
Django框架學習四 鏈式呼叫
即執行乙個物件中的方法之後得到的結果還是這個物件 如queryset物件 post.objects.filter status 1 filter category id 2 filter title icontain one 每乙個結果都是queryset物件,然後又可以執行該物件裡面的方法filt...