C++优雅之旅

探索C++

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  15 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks
   最近系统的学习Direct3D从DXSDK的例子学起。在Tut02_Vertices例子中,自定义顶点格式为:
struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw; 
    DWORD color;        
    
//D3DXCOLOR color;
};

    
// 初始化顶点数据
    CUSTOMVERTEX vertices[] =
    {
        { 
150.0f,  50.0f0.5f1.0f, D3DXCOLOR(1.0f0.0f0.0f0.0f)/*0xffff0000*/, }, // x, y, z, rhw, color
        { 250.0f250.0f0.5f1.0f, D3DXCOLOR(0.0f1.0f0.0f0.0f)/*0xff00ff00*/, },
        {  
50.0f250.0f0.5f1.0f, D3DXCOLOR(0.0f0.0f1.0f0.0f)/*0xff00ffff*/, },
    };
     自定义格式结构体中注释掉的是我后来想用的D3DXCOLOR。原本以为将原先定义的DWORD颜色换成D3DXCOLOR类型,然后初始化的时候相应做替换就可以了,谁知道,渲染出来的三角形顶点颜色异常:
     wrong.JPG
     正常的应该是这样
     right.JPG
     百思不得其解,郁闷至极。后来终于在GameDev.net上找到近似案例(
这里),琢磨一番,恍然大悟。
     原来,在FVF顶点格式中,D3D需要特定的内存布局,就是说,你的顶点格式中各项的类型应该满足它的期望。比如,它要求的颜色值应该是DWORD类型的32位整数值,而替换成D3DXCOLOR之后,却变成了4个float类型值(r, g, b,a),与其期望不符,所以导致了异常的颜色。顶点结构体中颜色值还是换回DWORD类型,代码中的赋值可以正常使用,因为D3DXCOLOR有到DWORD的自动转换。
posted on 2008-11-08 04:54 林公子 阅读(1281) 评论(0)  编辑 收藏 引用 所属分类: DirectX

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理