• <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无码麻豆| yellow中文字幕久久网| 无码人妻久久一区二区三区| 夜夜亚洲天天久久| 久久久久亚洲AV无码专区体验| 久久中文字幕视频、最近更新| 99久久超碰中文字幕伊人| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久婷婷五月综合97色一本一本| 久久久久久av无码免费看大片| 久久99精品久久久久久动态图| 漂亮人妻被中出中文字幕久久| 99热精品久久只有精品| 久久国产精品无码一区二区三区| 亚洲精品午夜国产va久久| 久久精品国产亚洲Aⅴ香蕉| 精品精品国产自在久久高清| 久久亚洲AV成人出白浆无码国产| 婷婷久久五月天| 久久99热这里只频精品6| 久久精品国产第一区二区| 亚洲一区二区三区日本久久九| 国产精品一久久香蕉国产线看 | 精品久久久久久亚洲精品| 亚洲午夜无码久久久久| 中文字幕无码免费久久| 国内精品综合久久久40p| 亚洲AV日韩精品久久久久久| 99久久精品免费看国产一区二区三区 | 国产精品中文久久久久久久| 久久天天躁狠狠躁夜夜2020 |