• <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化的介入和排除??偨Y一下,inline函數主要是通過在編譯階段將調用inline函數的地方替換成內聯函數本身,從而在程序執行階段減少調用的次數,也就減少了系統中??臻g的頻繁操作,因此算是一種用空間換時間的優化手段。但是使用的時候也需要多加注意。首先是inline函數中不能有while,switch,不能遞歸調用,防止潛在的代碼膨脹,另外要注意inline函數編譯出來的程序也根據編譯器的不同而有所不同。還有一點不太理解的:不要僅僅因為函數模板出現在頭文件中,就將它聲明為 inline。

            然后再重提一下const問題。在google隨便一搜很容易找到一篇
            const用法的文章,毛病一大堆,但是看到了很多以前沒有遇到過的情況??戳艘院笥X得沒有記住多少,還是要在實際應用中碰到的會印象深刻。反正const用的好,程序很健壯,用不好麻煩一大堆,要逐漸積累經驗?,F在我所知道的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++可以很簡單,只是我們不能掌握它的規則。唉,還得學?。?/FONT>

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

            今天還碰到另外一個異常的問題?!癠nhandled 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久久99小草精品免视看| 99久久精品免费看国产免费| 国产精品久久久久一区二区三区| 日韩十八禁一区二区久久| 久久亚洲私人国产精品| 久久亚洲视频| 精品综合久久久久久97超人| 要久久爱在线免费观看| 狠狠色丁香久久综合婷婷| 女人高潮久久久叫人喷水| 九九99精品久久久久久| 欧美精品久久久久久久自慰| 久久久中文字幕日本| 久久亚洲高清观看| 狠狠色丁香久久婷婷综合五月| 欧美性猛交xxxx免费看久久久| 99久久中文字幕| 国产V综合V亚洲欧美久久| 日产久久强奸免费的看| 久久精品这里热有精品| 久久婷婷成人综合色综合| 国产精品久久久久久久久久影院| 国产精品欧美久久久久天天影视| 国内精品久久久久久久97牛牛 | 久久精品无码免费不卡| 亚洲女久久久噜噜噜熟女| 久久亚洲AV无码精品色午夜| 人妻丰满?V无码久久不卡| 国产精品内射久久久久欢欢| 99久久99久久久精品齐齐 | 久久久无码精品亚洲日韩蜜臀浪潮 | 久久久精品人妻一区二区三区四| 欧美日韩精品久久免费| 香蕉99久久国产综合精品宅男自 | 久久亚洲AV无码西西人体| 国产亚洲精午夜久久久久久| 国产精品久久久久乳精品爆 | 99久久国语露脸精品国产| 精品亚洲综合久久中文字幕| 久久综合九色综合97_久久久|