• <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 苦行僧 閱讀(634) 評論(0)  編輯 收藏 引用 所屬分類: c++
            久久国产色AV免费观看| 国产精品无码久久久久| 国产精品亚洲综合久久| 欧美一区二区久久精品| 久久久久久亚洲精品成人| 久久综合综合久久97色| 伊人久久无码精品中文字幕| 色欲久久久天天天综合网| 久久综合精品国产二区无码| 久久精品视频网| 色综合久久夜色精品国产| 国产精品一区二区久久国产| 日本精品一区二区久久久| 国产午夜福利精品久久2021| 久久久久久精品免费看SSS| 99久久国产亚洲高清观看2024| 久久99久国产麻精品66| 久久精品国产99久久久香蕉| 91久久婷婷国产综合精品青草| 久久综合色老色| 久久免费99精品国产自在现线| 国内精品久久久久久野外| 久久精品国产日本波多野结衣| 久久精品国产一区二区电影| 国产午夜精品久久久久免费视 | 伊人久久大香线蕉成人| 99久久国产热无码精品免费| 久久99精品国产麻豆宅宅| 久久精品无码一区二区三区免费| 777米奇久久最新地址| 久久久久久免费视频| 香蕉aa三级久久毛片| 国内精品伊人久久久久影院对白| 国产精品青草久久久久婷婷| 久久精品亚洲一区二区三区浴池| 婷婷伊人久久大香线蕉AV | 国产午夜免费高清久久影院| 色欲av伊人久久大香线蕉影院 | 久久99精品国产99久久6男男| 综合久久国产九一剧情麻豆| 亚洲国产精品一区二区久久hs|