• <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>

            李錦俊(mybios)的blog

            游戲開發 C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 371286
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

            圖像使用2次方是很討厭的問題,不在技術難度上,而在技術妥協上.實際上要求美工作出2次方紋理,并且整張圖的空間利用率要高,是很難的.
            當有些策劃丟過來奇奇怪怪的尺寸的圖像,我都要吐血,當知道2n次方限制后,他們把圖像尺寸擴大一下,再丟給我空余大量空白的2n次方紋理,再吐血.

            玻璃渣資源里標準的2n次方人物紋理,圖像擠的滿滿的,每個身體部位紋理還是一個矩形,利用率之高不得不令人佩服,然而這對美工要求是極高的.
            1024*768的圖像是要拆成4*3的256*256圖像的,而不是一整大張紋理,因為768不是2的n次方,更不要擴大為1024*1024,加大25%的內存.
            還有Wow里Loading界面的圖像都壓成512*512,因為Loading圖像模糊一點不要緊,很簡單卻都是很重要的細節.
            所以當Wow運行在我Geforce2的顯卡上時,我覺的很cool.

            Nvidia的驅動程序也很討厭,實際Geforce6顯卡才支持non power of two texture,Geforce 5200級的顯卡,在硬件能力上不足以支持NPOT,但是最新的驅動程序使用了軟件模式進行模擬支持,而軟件模擬根本毫無實用價值,渲染變得超級緩慢,因為驅動程序每次紋理渲染都會很聰明地把非2次方尺寸圖像自動Scale到2次方尺寸,對于一個800*600的圖像,驅動程序在這個步驟就吃光了CPU.
            所以總有些人喊著為什么OpenGL沒有軟件渲染支持,DX很體貼都有(實際上DX也沒有,比如那個所謂的8層紋理),而我認為如果軟件渲染能解決問題,那要硬件作什么!不能解決問題的方案我們支持它作什么!

            // OpenGL動態執行2n次方圖像限制
            inline int next_p2(int a)
            {
            ?int rval=1;
            ?while(rval<a) rval<<=1;
            ?return rval;
            }

            int nWidthPowerOfTwo = next_p2(tex.nWidth);
            int nHeightPowerOfTwo = next_p2(tex.nHeight);

            if(tex.nWidth == nWidthPowerOfTwo? &&? tex.nHeight == nHeightPowerOfTwo)
            {?
            ?glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, nWidthPowerOfTwo, nHeightPowerOfTwo, 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());
            ?tex.fScaleX = tex.fScaleY = 1.0f;
            }?
            else
            {?
            ?glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, nWidthPowerOfTwo, nHeightPowerOfTwo, 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, NULL);
            ?glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, tex.nWidth, tex.nHeight, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());
            ?tex.fScaleX = (float)tex.nWidth / (float)nWidthPowerOfTwo;
            ?tex.fScaleY = (float)tex.nHeight/ (float)nHeightPowerOfTwo;
            }

            然而對這個問題,正確的解決方案是事先規劃,強制執行,be clever.

            posted on 2006-11-19 08:26 李錦俊(mybios) 閱讀(3258) 評論(3)  編輯 收藏 引用 所屬分類: 數學、幾何和圖形學

            Feedback

            # re: 【轉貼】使用非2次方冪的圖像紋理的問題 2008-03-25 14:55 CoL
            想請教一下 顯卡驅動的非2次冪貼圖的拉伸工作 是在每次載入的時候做的 還是在運行中去做的? 如果是載入貼圖的時候去做拉伸 應該不會對繪制的效率產生比較大的影響
            歡迎來mail討論一下這個問題:coollen.mmx@gmail.com  回復  更多評論
              

            # re: 【轉貼】使用非2次方冪的圖像紋理的問題 2009-07-26 14:58 黑色靈貓
            最近做到一個ATI顯卡兼容性的問題就是處在這個問題上,感謝樓主,解惑了  回復  更多評論
              

            # re: 【轉貼】使用非2次方冪的圖像紋理的問題 2012-09-02 22:40 技術小白菜
            唉 ~~ 沒辦法,硬件能力限制,只能退而求之了,總不能讓 CPU 進行圖形運算吧 ...  回復  更多評論
              

            久久精品国产精品亚洲精品| 色8激情欧美成人久久综合电| 99精品国产免费久久久久久下载| 区久久AAA片69亚洲| 蜜臀久久99精品久久久久久小说| 久久精品一区二区国产| 久久国产免费| 久久国产精品无码一区二区三区| 成人a毛片久久免费播放| 中文成人久久久久影院免费观看| 久久99国产综合精品| 久久精品国产精品亚洲人人 | 国产精品热久久毛片| 亚洲国产婷婷香蕉久久久久久| 久久午夜羞羞影院免费观看| 久久93精品国产91久久综合| av色综合久久天堂av色综合在| 97久久久久人妻精品专区 | 亚洲精品无码久久不卡| 亚洲伊人久久精品影院| 国产精品久久久久一区二区三区 | 色偷偷91久久综合噜噜噜噜| 久久久久成人精品无码中文字幕 | 色综合久久中文字幕无码| 久久se这里只有精品| 久久精品国产一区二区三区日韩| 亚洲AV日韩精品久久久久| 亚洲日本va午夜中文字幕久久 | 久久国产香蕉一区精品| 国产精品无码久久综合| 人妻少妇久久中文字幕一区二区| 亚洲精品久久久www| 久久精品国产国产精品四凭| 久久精品国产清自在天天线| 久久se这里只有精品| 久久se精品一区二区影院 | 久久精品免费全国观看国产| 狠狠色综合网站久久久久久久| 久久国产精品一区二区| 国产精品成人精品久久久| 久久精品国产第一区二区|