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

            不能停止的腳步

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

              1 bool HGE_Impl::_init_lost()
              2 {
              3     CRenderTargetList *target=pTargets;
              4 
              5 // Store render target
              6     //屏幕表面    
              7     pScreenSurf=0;
              8     //屏幕深度
              9     pScreenDepth=0;
             10 
             11     pD3DDevice->GetRenderTarget(&pScreenSurf); //取渲染目標表面,這個函數在DX9有些變化
             12     pD3DDevice->GetDepthStencilSurface(&pScreenDepth); //取屏幕深度
             13     //當存在渲染目標時
             14     while(target)
             15     {
             16         //如果目標紋理存在,則重新創建紋理
             17         if(target->pTex)
             18             D3DXCreateTexture(pD3DDevice, target->width, target->height, 1, D3DUSAGE_RENDERTARGET,
             19                               d3dpp->BackBufferFormat, D3DPOOL_DEFAULT, &target->pTex);
             20         //如果深度存在,則重新創建深度表面
             21         if(target->pDepth)
             22             pD3DDevice->CreateDepthStencilSurface(target->width, target->height,
             23                                                   D3DFMT_D16, D3DMULTISAMPLE_NONE, &target->pDepth);
             24         target=target->next;
             25     }
             26 
             27 // Create Vertex buffer
             28     //創建頂點緩存
             29     if( FAILED (pD3DDevice->CreateVertexBuffer(VERTEX_BUFFER_SIZE*sizeof(hgeVertex),
             30                                               D3DUSAGE_WRITEONLY,
             31                                               D3DFVF_HGEVERTEX,
             32                                               D3DPOOL_DEFAULT, &pVB )))
             33     {
             34         _PostError("Can't create D3D vertex buffer");
             35         return false;
             36     }
             37     //設置頂點格式,在Dx9中,將DX8的這個函數SetVertexShader分成了SetVertexShader和SetFVF
             38     //在DX9中,我們只需要使用SetFVF就可以設置頂點格式了
             39     pD3DDevice->SetVertexShader( D3DFVF_HGEVERTEX );
             40     //把一個頂點緩存綁定到一個設備數據流
             41     pD3DDevice->SetStreamSource( 0, pVB, sizeof(hgeVertex) );
             42 
             43 // Create and setup Index buffer
             44     //創建索引緩存
             45     if( FAILED( pD3DDevice->CreateIndexBuffer(VERTEX_BUFFER_SIZE*6/4*sizeof(WORD),
             46                                               D3DUSAGE_WRITEONLY,
             47                                               D3DFMT_INDEX16,
             48                                               D3DPOOL_DEFAULT, &pIB ) ) )
             49     {
             50         _PostError("Can't create D3D index buffer");
             51         return false;
             52     }
             53     //鎖定頂點緩存
             54     WORD *pIndices, n=0;
             55     if( FAILED( pIB->Lock( 0, 0, (BYTE**)&pIndices, 0 ) ) )
             56     {
             57         _PostError("Can't lock D3D index buffer");
             58         return false;
             59     }
             60     //建立索引 這里主要是針對hgeQuad的方式。DX中沒有四邊形圖元,所以這里是由兩個三角形拼起來的。
             61     //繪制三角形的時候,默認是逆時針方向繪三個頂點
             62     for(int i=0; i<VERTEX_BUFFER_SIZE/4; i++) {
             63         /*
             64             第一個三角形
             65             pIndices[0] = n;
             66             pIndices[1] = n+1;
             67             pIndices[2] = n+2;
             68          */
             69         *pIndices++=n;
             70         *pIndices++=n+1;
             71         *pIndices++=n+2;
             72         /*
             73             第二個三角形
             74             pIndices[0] = n+2;
             75             pIndices[1] = n+3;
             76             pIndices[2] = n;
             77          */
             78         *pIndices++=n+2;
             79         *pIndices++=n+3;
             80         *pIndices++=n;
             81         n+=4;
             82     }
             83     pIB->Unlock();
             84     pD3DDevice->SetIndices(pIB,0);
             85 
             86     // Set common render states
             87     //設置通用渲染狀態
             88 
             89     //pD3DDevice->SetRenderState( D3DRS_LASTPIXEL, FALSE );
             90     //D3DRS_CULLMODE 這個參數用來指定三角形背面的剔除方式。
             91     //D3DCULL_NONE,不要剔除背面;
             92     //D3DCULL_CW,按照順時針的方向的頂點剔除背面;
             93     //D3DCULL_CCW,按照逆時針方向剔除背面。
             94     pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
             95     //關閉光照
             96     pD3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
             97     //打開alpha通道
             98     pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
             99     //下面設置alpha混合系數
            100     pD3DDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );    //設置源混合方式 D3DBLEND_SRCALPHA:Blend factor is (As, As, As, As). 
            101     pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); //設置目的混合方式 D3DBLEND_INVSRCALPHA:Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As). 
            102 
            103     //調用alpha測試,用于提升性能
            104     pD3DDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
            105     //測試參考值,0x01相當于對于全透明的,將不渲染
            106     pD3DDevice->SetRenderState( D3DRS_ALPHAREF,        0x01 );
            107     //要求渲染>=參考值的像素
            108     pD3DDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );
            109 
            110     //設置狀態    
            111     //紋理融合操作 
            112     pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );  //設置顏色通道混合控制為:多參數
            113     pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );    //
            114     pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
            115     
            116     pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_MODULATE );  ////設置alpha通道混合控制為:多參數
            117     pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
            118     pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
            119     //D3DTSS_MIPFILTER過濾采用近點采樣
            120     pD3DDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_POINT);
            121 
            122     if(bTextureFilter) //如果使用紋理過濾
            123     {
            124         pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR);
            125         pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR);
            126     }
            127     else
            128     {
            129         pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_POINT);
            130         pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_POINT);
            131     }
            132 
            133     nPrim=0;
            134     CurPrimType=HGEPRIM_QUADS;    //當前主要操作類型
            135     CurBlendMode = BLEND_DEFAULT; //當前混合方式
            136     CurTexture = NULL;              //當前紋理
            137 
            138     pD3DDevice->SetTransform(D3DTS_VIEW, &matView);  //設置視圖,該值為默認值,沒有變化
            139     pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); //設置投影,已設為正交投影,具體參考我前面的散筆:HGE 的坐標轉換函數注釋說明_SetProjectionMatrix 140 
            141     return true;
            142 }

            posted on 2010-02-04 11:36 冬瓜 閱讀(1806) 評論(0)  編輯 收藏 引用 所屬分類: 原創DirectXHGE
            奇米综合四色77777久久| 亚洲综合精品香蕉久久网97| 久久久久99精品成人片牛牛影视| 婷婷久久综合九色综合98| 精品久久久久久无码人妻蜜桃| 久久久久99精品成人片| 国产激情久久久久久熟女老人| 97久久精品无码一区二区| 久久精品国产亚洲7777| 久久久久久午夜成人影院| 91精品婷婷国产综合久久| 久久精品国产99国产精品导航 | 精品久久久久久国产牛牛app| 久久精品国产72国产精福利| 午夜人妻久久久久久久久| 国产三级精品久久| 久久久亚洲欧洲日产国码aⅴ | 国产精品九九久久精品女同亚洲欧美日韩综合区 | 日韩av无码久久精品免费| 99久久99久久精品国产片| 色综合久久无码五十路人妻| 久久久久亚洲av成人无码电影 | 天天久久狠狠色综合| 久久久噜噜噜www成人网| 精品久久久久久久国产潘金莲| 伊人久久大香线焦综合四虎| 久久久久久久人妻无码中文字幕爆| 久久中文精品无码中文字幕| 久久亚洲精品中文字幕三区| avtt天堂网久久精品| 久久综合综合久久综合| 久久婷婷国产剧情内射白浆| 亚洲国产精品成人久久蜜臀| 97久久精品人人做人人爽| 久久免费精品视频| 一本色道久久88加勒比—综合| 潮喷大喷水系列无码久久精品| 久久综合综合久久综合| 久久国产乱子伦免费精品| 国产亚洲精品美女久久久| 久久99精品久久久久久久不卡|