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

            Gattaca

            標題是記憶非常深刻的一部電影,《太空夢》,很好的勵志片。自己一個人在電視上看的,那種感覺現在還記得。

            第2章 - 調色板, 游戲概念, 雙緩沖區等等

            注:原文地址:http://scorpioncity.com/dj2.html


            1、圖像模式

             

            按照用多少位來存儲屏幕上的一個像素,有好多種屏幕模式。使用更多的位,就能顯示更多的顏色,但會占用更多的顯存。
            • 1、2、4、8位 “indexed”模式(8位就是通常所說的"256色");
            • 16位(64K色)“high-color” 模式;
            • 24位(16.7M色)“真彩色”模式;
            • 32位 RGBA 模式,前三個字節和24位真彩色模式一樣,第4個字節用做“alpha-channel”,即透明度。
            這些模式都是可用的。下面說一下分辨率:
            • 320x200
            • 320x240
            • 640x400
            • 640x480
            • 800x600
            • 1024x768
            • 1280x1024
            • 1600x1200
            現在比較常用的是640x480(好像年代比較久遠了這篇文章,我覺得1024x768應該比較常用吧)
            顯示器通常是3/4的縱橫比,所以沿著高的那個邊擁有的像素點應該是寬的那個的3/4,這樣像素點的長寬比就是1,所以像素點就是正方形,也就是說100個像素在一個方向上的物理長度和另一個方向上的相當。但是320x200不是這樣子滴,實際上它的像素點是稍顯瘦高一點的。

            2、顏色原理


            有好多種表示顏色的方法,即“顏色模型”,比較常見的一個是“RGB”,幾乎所有可見的顏色都可以用紅、綠、藍三種顏色按照各種比例組合生成。通常會用三個字節來存儲顏色,每位表示一個主色的強度,從0到255。比如純的亮紅色就是#ff0000,紫色是#ff00ff,灰色是#969696,等等。
            下面是一些可以用來表示顏色的c代碼:

             

            struct SColor
            {
                
            int r;
                
            int g;
                
            int b;
            }
            ;

            SColor make_rgb( 
            int r, int g, int b )
            {
                SColor ret;
                ret.r 
            = r;
                ret.g 
            = g;
                ret.b 
            = b;
                
            return ret;
            }


            或者你可能用一個無符號32位整型來儲存RGB顏色,0-7位存藍色,8-15位綠色等等。

            typedef unsigned int rgb_color;

            #define MAKE_RGB(r,g,b) ( ((r) 
            << 16| ((g) << 8| (b) )


            當然還有其他的顏色模型,比如HSV(Hue 色調, Saturation 飽和度, Luminance 亮度),但我不打算涉及它。

            2.1 High-color和true-color模式



            在這兩種模式下,屏幕像素按照他們相應的RGB值存儲到顯存里。比如,如果屏幕左上角的像素點是綠色,那么在true-color模式下,顯存里前三個字節就是0,255,0。而在high-color模式下,對應的RGB值分別用5、6、5位來存儲,即前5位紅色,接下來6位綠色,然后5位藍色,所以在這個模式下顯存對應的就是兩個字節,二進制表示就是 00000111 11100000。

             

            2.2 基于調色板或者indexed模式


            Indexed模式使用一個“look up table”(LUT)的原理,即顏色查看表,通常這種模式使用8位圖像模式,即256色,屏幕上的每個像素都用一個字節來表示,所以每次只能顯示256 種顏色,所以這256種顏色就按照每種3個字節存到LUT里,顯卡每次就按照LUT里的值確定要顯示的顏色。
            用Indexed模式創建一個程序是非常痛苦的,尤其是搞圖像藝術的,但使用Indexed模式還是有一些優勢的:

                * 需要很少的內存
                * 運行會更快,因為需要傳輸的字節變少了
                * 一些有趣的“調色板動畫”技巧,在其他模式下很難完成的在Indexed模式下簡直太容易了。你可以只改變LUT里的值去改變屏幕顏色,而不需要改變內存里每個像素對應的值。例如,一個淡出效果可以改變LUT里的RGB值到0來實現。
                * 當你有一個紋理需要很多內存的時候,有些3D加速器支持Indexed模式的紋理。

            2.3 ModeX


            ModeX是一個特殊的 VGA 256色模式,這種模式下顯存的內容會按照一個稍微復雜點planar(二維)格式。這個模式下的分辨率可以非常高,DirectDraw知道如何寫 ModeX表面,但是windows GDI并不會,所以當你混合這兩種不同類型表面的時候要小心。當設置DirectDraw全屏模式時可以選擇是否允許DirectDraw創建ModeX 表面。這些日子里你可能想避開ModeX。

             

            2.4 Pitch/Stride


            雖然屏幕分辨率可能是640x480x32,但這并不是說每行像素會占用640x4個字節的顯存。因為速度上的原因,顯卡存儲的這些表面寬度經常比他們邏輯上要寬。例如,最大支持1024x768的顯卡可能會把所有從320x200到1024x768的模式內部實現為1024x768模式,所以表面的右邊會留下空白(呵呵,默認左對齊),這個分配給表面實際的寬度就稱為表面的Pitch(或者Stride),知道表面的Pitch是非常重要的,不管它是一個2D DirectDraw 表面還是紋理貼圖,可以使用 DirectDraw 查詢表面的Pitch。

            3、一些游戲概念你需要知道

            下班了,以后繼續。。。

            posted on 2007-05-18 16:18 Gattaca 閱讀(678) 評論(1)  編輯 收藏 引用 所屬分類: DirectX

            評論

            # re: 第2章 - 調色板, 游戲概念, 雙緩沖區等等 2008-09-09 16:15 interim

            不錯不錯,入門  回復  更多評論   

            品成人欧美大片久久国产欧美...| 国産精品久久久久久久| 久久午夜福利电影| 国产91色综合久久免费| 亚洲国产另类久久久精品小说| 亚洲欧美日韩久久精品| 久久人人爽人人澡人人高潮AV| 国产高清美女一级a毛片久久w| 72种姿势欧美久久久久大黄蕉| 亚洲人成网亚洲欧洲无码久久| 国产精品一区二区久久精品涩爱| 久久精品国产亚洲5555| 久久国产乱子伦精品免费午夜| 色综合久久最新中文字幕| 18岁日韩内射颜射午夜久久成人| 国产亚洲色婷婷久久99精品| 久久精品亚洲一区二区三区浴池 | 国产亚洲欧美成人久久片| 久久精品无码一区二区无码| 久久精品99久久香蕉国产色戒 | 国产999精品久久久久久| 91精品国产91久久| 久久99热这里只有精品国产| 久久精品国产一区二区| 四虎影视久久久免费| 亚洲国产成人久久综合碰| 久久人人爽人人爽人人片AV麻烦| 亚洲欧美伊人久久综合一区二区 | 日本精品久久久久中文字幕8 | 久久久受www免费人成| 亚洲国产精品综合久久一线| 精品久久亚洲中文无码| 国产综合久久久久| 久久午夜无码鲁丝片午夜精品| 无码任你躁久久久久久老妇App| 伊人久久大香线蕉综合Av | 亚洲国产精品久久久久婷婷老年| 日韩va亚洲va欧美va久久| 亚洲AV无码久久精品蜜桃| 国产精品久久久久aaaa| 亚洲国产成人久久一区WWW|