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

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370208
            • 排名 - 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 進行圖形運算吧 ...  回復  更多評論
              

            区久久AAA片69亚洲| 久久w5ww成w人免费| 欧美精品丝袜久久久中文字幕| 欧美日韩精品久久久免费观看| 久久无码AV中文出轨人妻| 亚洲va久久久噜噜噜久久| 国产精自产拍久久久久久蜜| 国产精品99久久久久久宅男小说| 久久精品国产亚洲精品2020| 亚洲AV伊人久久青青草原| 久久婷婷激情综合色综合俺也去 | 欧美亚洲色综久久精品国产| 日本三级久久网| 亚洲精品乱码久久久久久蜜桃不卡 | 久久最近最新中文字幕大全 | 精品久久久久久无码免费| 久久人人爽人人爽人人av东京热| 久久噜噜电影你懂的| 亚洲午夜久久久久久噜噜噜| 狠狠综合久久综合中文88| 国产精品久久午夜夜伦鲁鲁| 久久久久久久综合狠狠综合| 大蕉久久伊人中文字幕| 久久久无码一区二区三区| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲一本综合久久| 九九久久自然熟的香蕉图片| 99精品国产99久久久久久97 | 青青草原综合久久大伊人| 久久国产精品一区| 国产精品久久久久久久午夜片 | 精品久久久久久国产潘金莲| 久久久久亚洲AV成人网人人网站| 欧美伊人久久大香线蕉综合69| 久久国产三级无码一区二区| 国产精品无码久久久久| yellow中文字幕久久网| 国产精自产拍久久久久久蜜| 久久97久久97精品免视看秋霞| 久久精品国产清自在天天线| 久久综合伊人77777|