zoukankan      html  css  js  c++  java
  • 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: 通过差值算法算出。

  • 相关阅读:
    Hibernate 持久化对象的状态
    Hibernate 主键生成策略
    Hibernate 环境搭建
    Struts2 UI标签
    Struts2 处理表单重复提交
    Struts2 模型驱动及页面回显
    Struts2 之 ognl
    Struts2 框架验证
    Struts2 手动验证
    Struts2 自定义拦截器
  • 原文地址:https://www.cnblogs.com/sld666666/p/1807559.html
Copyright © 2011-2022 走看看