青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

坐標系與基本圖元(4)

各種基本圖元的繪制

上面使用頂點緩沖區繪制的是三角形列表圖元,前面介紹過Direct3D支持點列表,線段列表、線段條帶、三角形列表、三角形條帶、三角扇形6種基本圖元。下面通過示例程序BasicPrimitive演示各種基本圖元的繪制。該示例程序使用同一個頂點緩沖區繪制不同類型的圖元,程序中通過一個全局變量標識當前繪制的圖元類型,通過單擊鍵盤上的"1" ~ "6"數字鍵可以在各圖元類型之間進行切換,單擊空格鍵可以在線框模式和實體模式之間切換。

三角形條帶:

 

三角形列表:

 

線段條帶:

 

線段列表:

 

點列表:

 

三角扇形:

 

實體模式:

 

完整源碼:

#include <d3d9.h>

#define PRIMITIVE_TRIANGLE_STRIP    1
#define PRIMITIVE_TRIANGLE_LIST        2
#define PRIMITIVE_LINE_STRIP        3
#define PRIMITIVE_LINE_LIST            4
#define PRIMITIVE_POINT_LIST        5
#define PRIMITIVE_TRIANGLE_FAN        6

#define CLASS_NAME    "GameApp"

#define release_com(p)    do { if(p) { (p)->Release(); (p) = NULL; } } while(0)

IDirect3D9
*                g_d3d;
IDirect3DDevice9
*        g_device;
IDirect3DVertexBuffer9
* g_vertex_buffer;

DWORD                    g_primitive_type 
= PRIMITIVE_TRIANGLE_STRIP;
DWORD                    g_fill_mode 
= D3DFILL_WIREFRAME;

struct sCustomVertex
{
    
float x, y, z, rhw;
    DWORD color;
};

#define D3DFVF_CUSTOM_VERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) 

void init_vb()
{
    sCustomVertex vertices[] 
=
    {
        {  
50.0f250.0f0.5f1.0f0xffff0000, },
        { 
150.0f,  50.0f0.5f1.0f0xffff0000, }, 
        { 
250.0f250.0f0.5f1.0f0xffff0000, },
        
        { 
350.0f,  50.0f0.5f1.0f0xffff0000, }, 
        { 
450.0f250.0f0.5f1.0f0xffff0000, },
        { 
550.0f50.0f,  0.5f1.0f0xffff0000, }
    };

    g_device
->CreateVertexBuffer(sizeof(vertices), 0, D3DFVF_CUSTOM_VERTEX, D3DPOOL_DEFAULT, &g_vertex_buffer, NULL);

    
void* ptr;

    g_vertex_buffer
->Lock(0sizeof(vertices), (void**)&ptr, 0);
    memcpy(ptr, vertices, 
sizeof(vertices));
    g_vertex_buffer
->Unlock();
}

bool init_d3d(HWND hwnd)
{
    g_d3d 
= Direct3DCreate9(D3D_SDK_VERSION);

    
if(g_d3d == NULL)
        
return false;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(
&d3dpp, sizeof(d3dpp));

    d3dpp.Windowed            
= TRUE;
    d3dpp.SwapEffect        
= D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat    
= D3DFMT_UNKNOWN;

    
if(FAILED(g_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  
&d3dpp, &g_device)))
    {
        
return false;
    }

    init_vb();

    g_device
->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);    // do not cull any face
    g_device->SetRenderState(D3DRS_FILLMODE, g_fill_mode);

    
return true;
}

void cleanup()
{
    release_com(g_vertex_buffer);
    release_com(g_device);
    release_com(g_d3d);
}

void render()
{
    g_device
->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(555), 1.0f0);

    g_device
->BeginScene();

    g_device
->SetRenderState(D3DRS_FILLMODE, g_fill_mode);
    g_device
->SetStreamSource(0, g_vertex_buffer, 0sizeof(sCustomVertex));
    g_device
->SetFVF(D3DFVF_CUSTOM_VERTEX);
    
    
switch(g_primitive_type)
    {
    
case PRIMITIVE_TRIANGLE_STRIP:
        g_device
->DrawPrimitive(D3DPT_TRIANGLESTRIP, 04);
        
break;

    
case PRIMITIVE_TRIANGLE_LIST:  
        g_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 02);
        
break;

    
case PRIMITIVE_LINE_STRIP:  
        g_device
->DrawPrimitive(D3DPT_LINESTRIP, 05);
        
break;

    
case PRIMITIVE_LINE_LIST: 
        g_device
->DrawPrimitive(D3DPT_LINELIST, 03);
        
break;

    
case PRIMITIVE_POINT_LIST:
        g_device
->DrawPrimitive(D3DPT_POINTLIST, 06);
        
break;

    
case PRIMITIVE_TRIANGLE_FAN:
        g_device
->DrawPrimitive(D3DPT_TRIANGLEFAN, 04);
        
break;
    }

    g_device
->EndScene();

    g_device
->Present(NULL, NULL, NULL, NULL);
}

LRESULT WINAPI WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    
switch(msg)
    {
    
case WM_KEYDOWN:
        
switch(wParam)
        {
        
case 49:    // key "1"
        case 50:    // key "2"
        case 51:    // key "3"
        case 52:    // key "4"
        case 53:    // key "5"
        case 54:    // key "6"
            g_primitive_type = (DWORD)wParam - 48;
            
break;

        
case VK_SPACE:
            g_fill_mode 
= (g_fill_mode == D3DFILL_WIREFRAME) ? D3DFILL_SOLID : D3DFILL_WIREFRAME;
            
break;

        
case VK_ESCAPE:
            DestroyWindow(hwnd);
            
break;
        }    
        
break;

    
case WM_DESTROY:        
        PostQuitMessage(
0);
        
return 0;
    }

    
return DefWindowProc(hwnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR, INT)
{
    WNDCLASSEX wc;

    wc.cbSize            
= sizeof(WNDCLASSEX);
    wc.style            
= CS_CLASSDC;
    wc.lpfnWndProc        
= WinProc;
    wc.cbClsExtra        
= 0;
    wc.cbWndExtra        
= 0;
    wc.hInstance        
= inst;
    wc.hIcon            
= NULL;
    wc.hCursor            
= NULL;
    wc.hbrBackground    
= NULL;
    wc.lpszMenuName        
= NULL;
    wc.lpszClassName    
= CLASS_NAME;
    wc.hIconSm            
= NULL;

    
if(! RegisterClassEx(&wc))
        
return -1;

    HWND hwnd 
= CreateWindow(CLASS_NAME, "Direct3D App", WS_OVERLAPPEDWINDOW, 200100600300,
                             NULL, NULL, wc.hInstance, NULL);

    
if(hwnd == NULL)
        
return -1;

    
if(init_d3d(hwnd))
    {
        ShowWindow(hwnd, SW_SHOWDEFAULT);
        UpdateWindow(hwnd);

        MSG msg;
        ZeroMemory(
&msg, sizeof(msg));

        
while(msg.message != WM_QUIT)
        {
            
if(PeekMessage(&msg, NULL, 00, PM_REMOVE))
            {
                TranslateMessage(
&msg);
                DispatchMessage(
&msg);
            }
                
            render();
        }
    }

    cleanup();

    UnregisterClass(CLASS_NAME, wc.hInstance);    

    
return 0;
}

 

posted on 2008-04-30 14:55 lovedday 閱讀(993) 評論(2)  編輯 收藏 引用

評論

# re: 坐標系與基本圖元(4) 2008-07-22 10:30 宋明建

真的不錯啊,謝謝,我天天在看啊  回復  更多評論   

# re: 坐標系與基本圖元(4) 2009-10-14 10:17 ELE

不錯比某些書上講的通俗易懂一些,頂一下。  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美国产精品中文字幕| 国产精品三级视频| 欧美成年人网站| 99国产精品久久久| 狠狠狠色丁香婷婷综合激情| 另类酷文…触手系列精品集v1小说| 国产精品永久免费视频| 亚洲国产精品一区制服丝袜| 欧美在线三级| 亚洲欧美日韩一区在线| 日韩亚洲欧美一区二区三区| 免费看亚洲片| 乱中年女人伦av一区二区| 欧美在线视频在线播放完整版免费观看| 亚洲精品中文字幕在线| 亚洲精品小视频在线观看| 欧美大片国产精品| 老牛国产精品一区的观看方式| 欧美在线你懂的| 蜜桃伊人久久| 男女激情视频一区| 欧美高清视频一二三区| 欧美激情按摩| 亚洲国产高清一区二区三区| 欧美电影在线播放| 性欧美办公室18xxxxhd| 亚洲欧美日韩高清| 亚洲综合二区| 欧美一区二区三区在| 亚洲女与黑人做爰| 久久国产日韩| 欧美成人嫩草网站| 亚洲激情欧美| 亚洲免费观看高清完整版在线观看熊| 亚洲中无吗在线| 亚洲欧美日韩精品| 久久久久久夜| 亚洲福利视频网站| 一区二区三区产品免费精品久久75 | 男男成人高潮片免费网站| 蜜桃av久久久亚洲精品| 欧美国产日本韩| 久久国产综合精品| 亚洲电影免费观看高清完整版 | 91久久精品一区二区别| 午夜在线成人av| 欧美金8天国| 国产日韩在线视频| 亚洲精品在线电影| 女仆av观看一区| 亚洲综合色激情五月| 牛人盗摄一区二区三区视频| 国产精品日韩久久久久| 亚洲国产精品久久久久秋霞影院 | 亚洲欧美日韩视频一区| 欧美大片网址| 性xx色xx综合久久久xx| 亚洲无线观看| 男人的天堂成人在线| 亚洲欧美日韩国产成人精品影院| 欧美va天堂| 影音先锋中文字幕一区| 欧美中文字幕视频在线观看| 亚洲理论电影网| 午夜精品久久久久久99热| 国产精品人人爽人人做我的可爱 | 久久免费视频一区| 亚洲蜜桃精久久久久久久| 国产精品久久久久久久久久久久| 国产一级揄自揄精品视频| 亚洲精品1234| 国产精品久久久久毛片软件| 在线看视频不卡| 亚洲欧洲在线观看| 久久精品综合一区| 国产精品99久久不卡二区| 性欧美videos另类喷潮| 国产婷婷色一区二区三区在线| 91久久中文| 老**午夜毛片一区二区三区| 欧美xx69| 亚洲日韩中文字幕在线播放| 亚洲国产精彩中文乱码av在线播放| 久久精品成人欧美大片古装| 国产日产欧美a一级在线| 亚洲深夜影院| 午夜激情综合网| 国产乱码精品一区二区三区五月婷| 一本色道久久综合亚洲二区三区| 欧美国产日韩一二三区| 欧美激情一区二区三区成人 | 亚洲精品日本| 亚洲大片免费看| 美脚丝袜一区二区三区在线观看| 欧美伦理一区二区| 亚洲一区免费网站| 亚洲午夜精品久久久久久浪潮| 欧美日韩国语| 亚洲一区在线观看视频| 亚洲一区国产视频| 欧美亚州一区二区三区| 亚洲欧美一区二区精品久久久 | 蜜乳av另类精品一区二区| 久久青草久久| 亚洲精品欧美日韩| 日韩视频在线观看国产| 欧美午夜寂寞影院| 亚洲精品在线免费观看视频| 欧美在线影院| 国内精品**久久毛片app| 久久久久久久综合日本| 欧美激情1区2区| 亚洲女人天堂成人av在线| 亚洲欧美激情在线视频| 国产综合欧美| 欧美国产另类| 国产精品国产三级国产专区53 | 午夜精品一区二区三区电影天堂| 国产偷国产偷亚洲高清97cao | 亚洲一区精彩视频| 美女亚洲精品| 国产亚洲欧美另类一区二区三区| 欧美成人免费在线视频| 欧美日韩p片| 久久经典综合| 欧美午夜欧美| 欧美+亚洲+精品+三区| 欧美精品一区三区| 欧美专区中文字幕| 国产精品豆花视频| 欧美电影资源| 国产精品卡一卡二卡三| 久久香蕉精品| 久久爱另类一区二区小说| 羞羞答答国产精品www一本| 猫咪成人在线观看| 午夜精品福利一区二区三区av| 久久精品一二三| 亚洲精品国产精品乱码不99 | 久久福利毛片| 欧美日韩色一区| 免费欧美视频| 国产手机视频精品| 一本久道久久综合婷婷鲸鱼| 在线播放豆国产99亚洲| 久久大综合网| 亚洲欧美一区二区三区极速播放| 美女诱惑一区| 久久中文字幕一区| 好看的日韩视频| 一区二区三区日韩欧美| 日韩一级大片在线| 久久这里只精品最新地址| 美女亚洲精品| 激情欧美亚洲| 午夜精品久久久久久久| 午夜精品www| 国产精品五月天| 一区二区三区四区五区视频| 一本色道**综合亚洲精品蜜桃冫| 麻豆久久精品| 亚洲欧洲日韩女同| 日韩一区二区免费看| 欧美日韩视频不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美www视频| 亚洲国产视频一区| 欧美激情一区二区三区在线视频 | 欧美激情第1页| 亚洲欧美影院| 欧美在线不卡| 亚洲综合电影| 免费不卡中文字幕视频| 亚洲免费网址| 欧美国产高潮xxxx1819| 亚洲理论在线观看| 午夜一级久久| 韩国在线一区| 欧美国产先锋| 亚洲午夜黄色| 久久国产天堂福利天堂| 国产一区二区高清| 久久精品国产精品亚洲| 亚洲国产精品黑人久久久| 亚洲人成网站在线观看播放| 欧美久久婷婷综合色| 亚洲伦理在线免费看| 欧美在线一二三区| 韩国成人精品a∨在线观看| 久久精品首页| 久久高清免费观看| 99riav国产精品| 国产精品v欧美精品∨日韩| 亚洲视频网站在线观看| 91久久极品少妇xxxxⅹ软件| 国产一区二区三区在线免费观看| 蜜桃av综合| 亚洲一区二区三区激情| 亚洲精品国产精品国自产在线| 亚洲免费人成在线视频观看|