DX9入门(二)

翁云兵老师的《3D游戏程序设计入门》

1、顶点格式
顶点不仅可以表示坐标,还可以给它赋予法线、纹理坐标。在GAMES101中提到,这些是可以在将来进行重心插值的。比如Ground shading就是对顶点进行着色,然后再进行重心插值。这里对顶点着色势必要考虑到顶点法线与光照的夹角。
DX9的顶点格式一般使用自由标记FVF。
2、顶点和索引之间的关系组成了图元
目前只使用三角形图元。DX9将所有的顶点放置在一个很大的数组中,然后使用索引告诉编译器怎么去组装图元。如果不告诉那就顺序3个3个一组
3、裁剪
熟悉完MVP矩阵和视口变换后,三维物体就可以显现在二维的平面上了。但是如果放大图形,由于我们的屏幕只有这么大,因此需要进行裁剪。裁剪算法可以去B站上看孔令德老师的cohen sutherland裁剪算法
4、渲染管线 (稍后补充,有点忘了)
记一种渲染管线的描述即可:
顶点数据 -> 顶点着色阶段(模型变换,视图变换,顶点着色)->几何着色阶段 -> 光珊瑚
5、DX9的绘制
【注】这里所有的设置肯定是对device而言的。结合上之前说的,先创建IDirect3D指针对象,通过指针对象获取到IDirect3DDevice9指针对象。这个对象承接了接下来我们所有的操作。

  1. 创建顶点缓冲区和索引缓冲区
  2. 分别加锁写入数据后,再解锁
  3. 设置模型变换矩阵、视图变换矩阵和投影变换矩阵(这里如果设置了旋转效果,那么就要将模型变换矩阵放置在消息循环中进行显示)
  4. 设置渲染状态:点渲染、面渲染、线框渲染
  5. 设置资源流绑定顶点缓冲区和设置顶点
  6. 所有的绘制要在device->beginScene()和device->EndScene()中进行绘制
  7. 使用索引信息绘制图元,则需要在beginScene之前加上
    device->SetIndices(IB); //设置索引缓冲区
    device->beginScene()
    device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12)
    device->EndScene()
  8. 不使用索引,则可以不用加这句
    device->beginScene()
    device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12);
    device->EndScene()
    6、顶点缓冲区
  9. 首先创建缓冲区
    IDirect3DvertexBuffer9* vb;
    device->CreateVertexBuffer(
    8 * sizeof(Veretx),
    0,
    D3DFVF_XYZ,
    D3DPOOL_MANAGED,
    &vb,
    0);
  10. 使用Lock方法加锁,写入数据后,再解锁
    Vertex* vertices;
    vb->Lock(0, 0, (void**)&vertices, 0);
    vertices[0] = Vertex(-1.0f, 0.0f, 2.0f);
    vertices[1] = Vertex(0.0f, 1.0f, 2.0f);
    vertices[2] = Vertex(1.0f, 0.0f, 2.0f);
    vb->Unlock();
    7、索引缓冲区
  11. 首先创建缓冲区
    IDirect3DIndexBuffer9* ib;
    device->CreateVertexBuffer(
    36 * sizeof(WORD),
    D3DFMT_INDEX16
    D3DPOOL_MANAGED,
    &ib,
    0);
  12. 使用Lock方法加锁,写入数据后,再解锁
    WORD* indices;
    ib->Lock(0, 0, (void**)&vertices, 0);
    indices[0] = 0; indices[1] = 1; indices[2] = 2;
    indices[3] = 0; indices[4] = 2; indices[5] = 3;
    ib->Unlock();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值