http://blog.sina.com.cn/s/blog_557599670100092o.html

今天继续D3D基础,如果时间足够的话,应该可以能够绘制出简单的三角面


  D3D基础概念
 
  (一)灵活顶点格式 ( Flexible Vertex Format)FVF
              其实这就是一个我们自己声明定义的一个结构,在其中,我们进行图元顶点的存储,我们在程序中用它来记录一切顶点的属性,但
DX本身对它有一定的限制,那就是限制我们在设计其属性时各类型参数的顺序。在这个FVF中,我们可以设置顶点的:
              1:位置x,y,z坐标 2:RHW(已转化的顶点,齐次W倒数) 3:混合加权值4:顶点的法线  5:扩散的颜色(漫射属性)  6:反射
颜色(镜面反射属性)  7:纹理坐标集(UV坐标)等
              我们可以根据不同的需要来选择部分的属性进行设置,这将比强硬全部设置来的方便,计算机在图形绘制时将根据我们的设置来处
理必要的组成部分,节省了大量的内存和渲染时间。但是依旧是那句话,可以部分属性不进行设置,但顺序不可颠倒。
              我们查找MSDN或DXDEV帮助文档搜索FVF可以获得FVF的格式可以是以下类型的组合
D3DFVF_XYZ包含未经转换的顶点坐标
D3DFVF_XYZRHW包含经过转换的顶点坐标
D3DFVF_XYZW包含经过转换和裁剪的顶点坐标
D3DFVF_XYZB1………D3DFVF_XYZB5包含用于骨骼动画的顶点和顶点对骨骼的权重信息
D3DFVF_NORMAL包含法线信息
D3DFVF_PSIZE顶点信息指明绘制点的大小
D3DFVF_DIFFUSE包含漫反射的信息
D3DFVF_SPECULAR包含镜面反射的信息
D3DFVF_TEX0………D3DFVF_TEX8包含0-8个纹理坐标信息
          当我们同时需要两项以上的参数时,定义时加上位或符就可以了。
    (二)顶点缓冲区(Vertex Buffer)
        就是D3D中用来保存顶点数据的一个内存缓冲区。我们这里值得注意的是顶点缓冲区设置应该是设置在显存中的,因为我们的CPU内存和
显存的读取数据速度是没有办法比的,但是由于显存中可以存放的数据较少,我们需要尽一切可能将即将渲染的数据输送到显存中,即使该
数据很大,我们也要根据显存的速度进行分割输送,尽可能的避免在系统内存中直接渲染的事情发生。这个在后面的设置时我会更详细的说
明。
        (三)坐标系。
          呃,这么没什么可说的了吧,仅仅值得注意的是,我们D3D中使用的是左手坐标系,即Z轴正方向是向屏幕内的,而3DMAX等建模软件是
使用的右手坐标系,即Z轴正方向是向屏幕外的。
        (四)图元。
          在三维图形领域中,一个立体物体我们经常是使用多组多边形来包围一个物体表面来近似的模拟物体的。如果有接触3DMAX,MAYA等3D
建模软件那更容易理解一些。我们的物体是中空的,仅表面上由一些面片拼接而成,而这些面片通常又是由一个一个更小的图元来构成的。
在D3D中,我们采用的多是三角形网格(TriangleMesh)来进行拼接。
        (五)图元类型
          我刚说过我们使用的是三角形网格来进行图形表示,但是实际上D3D图元类型是分六种,三角形图元的创建方式也有三种。了解它们的
原理对我们优化程序算法有很大的好处。
点列集合      D3DPT_POINTLIST    一组点的集合
线列集合      D3DPT_LINELIST          一组线段的集合
线带集合      D3DPT_LINESTRIP      首尾相连的线段的集合
三角形列      D3DPT_TRIANGLELIST          一组三角形的集合
三角形带      D3DPT_TRIANGLESTRIP  首尾相连的三角形,有两个顶点重合
三角形扇      D3DPT_TRIANGLEFAN          组成扇形的一组三角形
1:绘制点是相当容易的,我们给出点的空间坐标,再分别绘制就好了
如:g_pD3DDevice->DrawPrimitive(D3DPT_POINTLIST, 0, 6);  //会绘制出6个点
恩,其中g_pD3DDevice是D3D设备指针,函数第一个参数是我们设置的灵活顶点格式结构,0是偏移量,设置为0代表从FVF结构中第一个顶点
开始绘制,6是从偏移量开始绘制6个图元。
2:线列
g_pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0,3);    //会绘制出3个未必相连的线段
参数和点差不多了。这里系统会默认的将FVF结构中的第1个点和第2个点连接成一个线段,第3个点和第4个点连接成一个线段,如此反复,结
果我们得到的将是一系列未必连接的线段。
3:线带
g_pD3DDevice->DrawPrimitive(D3DPT_LINESTRIP, 0,5);  //会绘制出5个必定连接的线段
参数不说了,值得注意的是线带和线列区别在于,系统会默认的将第1,2个点连接之后,会再将2,3点连接,之后3,4点,如此类推,我们
得到的将会是一系列连接起来的线段,当然在相同点数下,获得线段会比线列多,
4:三角形扇
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0,4);  //会绘制出4个紧连的三角行
这个绘制的方法是0,1,2点绘制一个三角形,之后0,2,3点绘制一个三角形,之后是0,3,4。。。呃,还是一会画图好
5:三角行列
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0,2);  //会绘制出2个不连接的三角形
这个绘制方法是0,1,2点绘制一个三角后,3,4,5点绘制一个三角。
6:三角形带
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0,4);  //会绘制出4个连接的三角形
这个绘制方法是0,1,2点绘制一个三角形,1,2,3绘制一个三角行,2,3,4绘制一个三角行。
呃,做了个图,鼠标坏了,拿触摸屏乱做的,不美观,看的明白就好。
我再总结下绘制图元的方法:
HRESULTDrawPrimitive(                 
          D3DPRIMITIVETYPE      PrimitiveType,  //基本图元类型
          UINTStartVertex,        //起始顶点
          UINTPrimitiveCount                  //绘制的图元的数量
);

3D游戏编程入门(十一)D3D基础之FVF格式,图元相关推荐

  1. 3D游戏编程入门(十五)索引缓存

    如我公告所言,7号我将断网进行复习,我很愿意把编程学习看做在学武功,高手都会选择一段时间内进行闭关修炼的,这样更方便自己修身养性,抛开一些网络上的繁杂事宜,很容易全身心的投入自己的事情中,待得出关后功 ...

  2. 3D游戏建模入门基础:3dmax常用功能详解

    你收藏了那么多教程,却不知道3dmax怎么入门?掌握3dmax常用功能是3dmax入门的基础之一,所以呢小编今天就为您盘点了一些3dmax最常用到的功能和使用方法,快来和小编一起学习3dmax入门基础 ...

  3. 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版

    [3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...

  4. 3D游戏建模入门须知:次世代建模软件有哪些?零基础你都知道吗

    Hi~ o(* ̄▽ ̄*)ブ 小伙伴们, 你想玩建模吗?次世代建模,一般是建模.雕刻.展UV.拓扑.贴图.做材质等几个步骤.在不同的步骤当中,所用到的软件有所不同. 这里为大家科普下建模软件: 高模:M ...

  5. 什么是游戏建模 3D游戏建模入门难吗?没有美术基础可以学吗?

    什么是游戏建模 3D游戏建模入门难吗?没有美术基础可以学吗? 许多爱玩游戏的人,都知道什么是3D游戏建模! 目前的3D建模分为3D角色,3D场景,次世代角色,次世代场景. 与3D游戏相比,次世代游戏模 ...

  6. 《Android4游戏编程入门经典》读后感

    <Android4游戏编程入门经典>读后感 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 对于程序员来说,游戏编程并不是一件容易的事情.很多 ...

  7. .netframework游戏编程入门——模拟魔兽学院永远的羁绊

    相信有很多和我一样摸索着编游戏的自学者,自学是辛苦的,一没明确的引导,二没正确的工具,我就谈一下自己的经验,也许可以让你少走一点弯路.3D 的先不谈,2D作为基础还是有必要研究,然后把地图模型一换(换 ...

  8. 3d游戏编程(转帖)

    3d游戏编程(转帖) 我先声明,我不是编程高手,我还只是个初学者,但我觉得我所知道的对刚入门3D游戏编程的新手,应该能让他们少走弯路,我也很想用朝语来写,但是朝语的词 汇库很久没有更新过了,有些专业的 ...

  9. 《游戏编程》第一部 基础篇

    <游戏编程>第一部 基础篇 目录: 零.基础篇的目的 一.游戏的动画原理 二.基于动画原理的提高 三.游戏的基石: 窗口 的建立 四.游戏制作利器: 引擎 的选择 文章内容: 零.基础篇的 ...

  10. Android 4游戏编程入门经典

    <Android 4游戏编程入门经典> 基本信息 原书名:Beginning Android 4 Games evelopment 作者: (美)Mario Zechner Robert ...

最新文章

  1. S2系统相关-uptime命令总结(S代表系统相关)
  2. will_paginate 用作查询分页的注意事项
  3. 如何把VS Code的Language Server Protocol整合到Eclipse中来
  4. Linux驱动之Input子系统要点分析
  5. 云南“轮椅学子”博士毕业,清华校长俯身与他合影,他的妈妈被全网刷屏!...
  6. 消息队列MQ夺命连环11问:kafka、rabbitmq、rocketmq、activemq
  7. tf.Variable、tf.get_variable、tf.variable_scope、tf.name_scope、random、initializer
  8. 打开方式怎么用计算机程序,设置电脑默认软件打开方式的方法
  9. 2022自编译最新稳定版newifi3固件
  10. nba2k21那个php是啥,NBA2K21不同版本区别介绍 各版本详细信息及奖励内容一览
  11. ADO的RECORDSET的RECORDCOUNT属性总是为-1
  12. 软件测试-朋友圈的点赞功能怎么测?
  13. msi 微星b350 tomahawk主板 刷bios教程
  14. 灰色关联度矩阵--基于Matlab
  15. 目标检测的Tricks | 【Trick9】nms非极大值抑制处理(包括变体merge-nms、and-nms、soft-nms、diou-nms等介绍)
  16. mysql数据库技术与项目李锡辉_《MySQL数据库技术与项目应用教程 李锡辉 ,王樱 9787115474100 人》李锡辉,王樱著【摘要 书评 在线阅读】-苏宁易购图书...
  17. Pulmonary nodule detection in CT scans with equivariant CNNs
  18. 35岁以上的Android开发,都去了哪儿?,Android开发面试宝典
  19. 51单片机入门教程_LED篇
  20. window10获取管理员权限的方法

热门文章

  1. windows7家庭普通版升级为旗舰版
  2. JavaScript高级程序设计第四版学习--总结
  3. 广告植入_了解Neuroink新型可植入脑芯片
  4. 当兵5年后的出路_Linux提供服兵役后的职业过渡
  5. 智能设备存安全漏洞,YunOS却通过了国家级检测?
  6. Element UI - el-table 表格 hover 修改背景色
  7. 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\tsc.ps1,因为在此系统上禁止运行脚本
  8. 英文翻译中文软件推荐,教你翻译小妙招
  9. 时序数据的信息熵计算
  10. 好吧,我承认我标题党了!