• Directx颜色


    1. 颜色的定义

    在D3D中, 颜色使用RGB形式表现的。有两种结构来表现颜色D3DCOLOR和D3DCOLORVALUE。

    typedef DWORD D3DCOLOR;
    D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0);
    typedef struct D3DCOLORVALUE 
    { 
        float r; // the red component, range 0.0-1.0 
        float g; // the green component, range 0.0-1.0 
        float b; // the blue component, range 0.0-1.0 
        float a; // the alpha component, range 0.0-1.0 
    } D3DCOLORVALUE;
    

    2. 定点的颜色

    一个面的颜色是有其相应点的颜色决定的, 所以我们顶一个点的时候就得为其增加颜色变量。

    struct colorVertex 
    { 
        colorVertex(){}
        colorVertex(float x, float y, float z, D3DCOLOR c) 
        { 
            _x = x;     _y = y;  _z = z;  _color = c; 
        }
        float _x, _y, _z; 
        D3DCOLOR _color;
        static const DWORD FVF; 
    };
    const DWORD colorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
    

    3. 渲染

    有两种渲染方式: flat shading 和Gourud shding.

    比如我们定义这样3个点的三角形

    colorVertex* vertices; 
    VB->Lock(0, 0, (void**)&vertices, 0);
    // vertices of a unit cube 
    vertices[0] = colorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255,   0,   0)); 
    vertices[1] = colorVertex( 0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(  0, 255,   0)); 
    vertices[2] = colorVertex( 1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(  0,   0, 255));
    VB->Unlock();
    

    然后用如下方式画出:

    D3DXMATRIX WorldMatrix; 
    // draw the triangle to the left with flat shading 
    D3DXMatrixTranslation(&WorldMatrix, -1.25f, 0.0f, 0.0f); 
    Device->SetTransform(D3DTS_WORLD, &WorldMatrix); 
    Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); 
    Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
    // draw the triangle to the right with gouraud shading 
    D3DXMatrixTranslation(&WorldMatrix, 1.25f, 0.0f, 0.0f); 
    Device->SetTransform(D3DTS_WORLD, &WorldMatrix); 
    Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 
    Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
    

    得到的图形是这样的:

                   QQ截图未命名

    左图是用 flat shading: 三角形的颜色就第一个点的颜色

    右图是用 Gouraud shading: 通过差值算法算出。

  • 相关阅读:
    [Heoi2013]Alo
    10.24 考试
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    第四周作业
    求最大值及其下标
    查找整数
    抓老鼠啊~亏了还是赚了?
  • 原文地址:https://www.cnblogs.com/sld666666/p/1807559.html
Copyright © 2020-2023  润新知