• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            實時陰影繪制技術研究

            C++博客 首頁 新隨筆 聯系 聚合 管理
              48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
            到了真的動手干,才知道自己的基礎這么弱,幾乎能夠不斷的遇到C++和openGL上的問題,這樣工作起來既有挫折感也蠻有成就感的。
            • 2006年3月1日 hash_map與map
            寫Node類的時候遇到一個map和hash_map的問題,在Ogre的實現中對于SceneNode的children使用的hash_map,而不是map,引起了我的興趣,后來在STL China上找到一篇介紹兩者區別的文章。簡單的總結一下,就是說hash_map同map比較起來,利用了哈希表進行存儲,而不是map的RB tree,這樣占用多一點空間,節省一些查找時間。因為hash_map基本是常量的查找速度,而map是log(n)的查找速度,因此實際上對于小數據量的情況,大可不必使用hash_map.綜上,權衡三個因素: 查找速度, 數據量, 內存使用。
            • 2006年3月2日 inline函數和const問題

            以前就注意過dvesg中實現getter的時候通常有兩個函數,分別類似于下面的情況:
            inline const ParentList& getParents() const { return _parents; }       
            inline ParentList getParents() { return _parents; }
            首先是inline,google了一下找到三篇文章:
            保守的使用inline新手入門:關于C++中的內聯函數(inline)C++箴言:理解inline化的介入和排除。總結一下,inline函數主要是通過在編譯階段將調用inline函數的地方替換成內聯函數本身,從而在程序執行階段減少調用的次數,也就減少了系統中棧空間的頻繁操作,因此算是一種用空間換時間的優化手段。但是使用的時候也需要多加注意。首先是inline函數中不能有while,switch,不能遞歸調用,防止潛在的代碼膨脹,另外要注意inline函數編譯出來的程序也根據編譯器的不同而有所不同。還有一點不太理解的:不要僅僅因為函數模板出現在頭文件中,就將它聲明為 inline。

            然后再重提一下const問題。在google隨便一搜很容易找到一篇
            const用法的文章,毛病一大堆,但是看到了很多以前沒有遇到過的情況。看了以后覺得沒有記住多少,還是要在實際應用中碰到的會印象深刻。反正const用的好,程序很健壯,用不好麻煩一大堆,要逐漸積累經驗。現在我所知道的const:
            1,const在*前表示指針的內容是常量,*在const前表示指針地址是常量,不能指向其他地址。
            2,const在成員函數前,表示返回值是常量;const在成員函數后表示該函數不能修改函數成員。
            對于上邊那段代碼的理解也找到了:“常函數的調用是這樣的:常量對象只能調用常成員函數,非常量對象即可以調常成員函數,也可以調一般成員函數,但當某個函數有const和非const兩個版本時,const對象調const版本,非const對象調非const版本”。

            • 2006年3月7日 map使用中的問題以及inline函數的編譯問題,詭異的程序異常

            為了按名操作Geometry對象,聲明了typedef map<string,refptr<Geometry> > GeometryList;在使用的時候,要插入一個數據,使用geoList[a]=b;我發現在一個方法里邊這樣做了以后,又調用了refptr的析構函數,這樣如果智能指針計數為0,那指針豈不被析構了。偏巧程序這時候運行退出時報異常,搞的我以為是這里出了問題。后來才發現在這個過程中,首先執行refptr的拷貝構造函數,構造一個對象,然后把string和智能指針放在map自己的數據中。不存在上述問題。

            還有我做了refptr<T>的=號操作符重載,因此每次我在插入一個Geometry的時候,實際只要執行:Geometry* geo;mymap[name]=geo;就可以了,不必使用mymap[name]=refptr<Geometry>(geo);還是參考了前人寫的程序才發現可以這么簡單。其實c++可以很簡單,只是我們不能掌握它的規則。唉,還得學啊!

            zjn今天終于調通了3ds的loader。原因是前邊他把loader中全局的方法,在聲明處就進行了實現,據他說c++會默認這種情況為inline函數,這樣導致在設定的lib目錄中看不到編譯好的lib文件。因為inline的函數是不能在前邊放EXPORT_DLL的編譯鏈接輸出到DLL的,要在client程序include時進行編譯,這樣才會節省棧調用。后來把這些函數放在一個類里邊實現就調通了。

            今天還碰到另外一個異常的問題。“Unhandled Exception:User breakpoint”,在我和zjn那里都碰到了這個異常。后來我發現時yyd的程序里邊把color的V4Array的size設為3,而設定的時候寫了(*color)[3]=V4(0,1,0,1);這樣導致析構的時候異常。但是zjn那里的異常就跟我這個不同,他那里把string作為map的key,在設定Geometry的時候到第八個Geometry就會跳出上述異常,從函數調用來看是string的析構函數有問題,后來換了不從3ds中讀這個string,而自己設定序號,就沒有異常。唉,c++程序這個東西真是詭異。

            posted on 2006-03-07 18:05 苦行僧 閱讀(643) 評論(0)  編輯 收藏 引用 所屬分類: c++
            久久99热只有频精品8| 国产精品福利一区二区久久| 久久国产一片免费观看| 欧美精品福利视频一区二区三区久久久精品| 久久精品这里热有精品| 亚洲国产成人精品女人久久久| 无码精品久久久久久人妻中字| 精品999久久久久久中文字幕| 久久久久亚洲AV无码专区网站 | 亚洲嫩草影院久久精品| 日韩久久无码免费毛片软件| 久久中文骚妇内射| 久久精品国产一区二区三区不卡 | 亚洲人AV永久一区二区三区久久| 久久久久久久久66精品片| 精品久久久久中文字| 久久久久久精品久久久久| 久久激情亚洲精品无码?V| AV无码久久久久不卡网站下载| 婷婷久久综合九色综合九七| 91精品国产高清久久久久久国产嫩草 | 99久久国产综合精品女同图片| 亚洲国产精品久久66| 久久久久久久久久久久中文字幕| 久久亚洲天堂| 青青热久久国产久精品| 久久成人18免费网站| 久久91精品国产91久久小草| 久久精品国产亚洲AV久| 久久久久精品国产亚洲AV无码| 无码任你躁久久久久久| 久久亚洲av无码精品浪潮| 国产成人精品久久亚洲高清不卡| 久久午夜电影网| 狠狠色丁香婷婷综合久久来来去| 精品国际久久久久999波多野| 久久久无码精品亚洲日韩蜜臀浪潮| 色综合久久综合中文综合网| 亚洲精品美女久久777777| 久久久久亚洲av无码专区导航| 久久久久久久久无码精品亚洲日韩 |