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

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370171
            • 排名 - 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) 閱讀(3247) 評論(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 進行圖形運算吧 ...  回復  更多評論
              

            久久精品免费观看| 99精品久久精品一区二区| 99久久99久久精品免费看蜜桃 | 性高湖久久久久久久久AAAAA| 久久亚洲2019中文字幕| 思思久久精品在热线热| 国产成人久久精品区一区二区| 国产99久久九九精品无码| 综合久久一区二区三区 | 久久亚洲国产成人精品无码区| 性做久久久久久久久| 丁香五月网久久综合| 欧美精品国产综合久久| 办公室久久精品| 亚洲欧美成人综合久久久| 天天久久狠狠色综合| 伊人久久大香线蕉亚洲| 人妻丰满?V无码久久不卡| 97久久久精品综合88久久| 伊人精品久久久久7777| 久久国产福利免费| 老司机国内精品久久久久| 久久久久亚洲AV片无码下载蜜桃| 欧洲国产伦久久久久久久| 久久国产精品一区二区| 久久99精品国产麻豆| 久久精品日日躁夜夜躁欧美 | 77777亚洲午夜久久多喷| 久久伊人中文无码| 欧美精品一区二区久久 | 久久精品人人做人人妻人人玩 | 国产成年无码久久久免费| 亚洲精品成人久久久| 久久久久97国产精华液好用吗| 久久免费美女视频| 777久久精品一区二区三区无码| 精品久久8x国产免费观看| 国产精品99精品久久免费| 国产精品天天影视久久综合网| 久久亚洲私人国产精品vA | 精品伊人久久大线蕉色首页|