[转]DrawPrimitive 详解Direct3DDevice8
Direct3DDevice8 函数
05-39 DrawPrimitive 详解
费了好大的劲,终于搞清楚 DirectX 3D 三维图像中 DrawPrimitive 的用法(自嘲:未必)。
DrawPrimitive 是 Direct3DDevice8 对象的一个绘图方法:根据指定的顶点数组,绘制指定的图形:点、线,或三角形,从而组成复杂的图像。在 VB 中用法如下:
DrawPrimitive PrimitiveType, StartVertex, PrimitiveCount
参数说明:
StartVertex:Long 类型,指定从哪个顶点开始绘制图形
PrimitiveCount:Long 类型,指定绘制的图形个数
PrimitiveType: CONST_D3DPRIMITIVETYPE 枚举类型,要绘制的图形类型。共有 6 个取值:
1 D3DPT_PointList显示所有顶点

2 D3DPT_LineList 不相连的线段,线段的总数 = Int(顶点数/2)
顶点连线的方式:0-1,2-3,4-5,等

3 D3DPT_LineStrip首尾相连的线段,线段的总数 = 顶点数-1
顶点连线的方式:0-1,1-2,2-3,3-4,4-5,等

4 D3DPT_TriangleList 不相连的三角形,三角形总数 = Int(顶点数/3)
三角形组成的方式:0-1-2,3-4-5,等。每个三角形的的第三个点应在前两个点顺时针方向的一侧,否则会忽略此三角形。
下图中的0-1-2三角形,假定一人站在点0,面向点1,点2在顺时针方向(右方),所以此三角形会正确绘出。
3-4-5三角形中,站在点3,面向点4,点5在逆时针方向(上方),所以此三角形会被忽略。

5 D3DPT_TriangleStrip 以一条边为公共边的三角形,三角形总数 = 顶点数-2
三角形组成的方式:0-1-2(顺),1-2-3(逆),2-3-4(顺),3-4-5(逆),4-5-6(顺),等
第1个三角形的点遵循顺时针原则,第2个三角形的点遵循逆时针原则,以此类推,第5个三角形应遵循顺时针原则。下图中点6在逆时针方向上,所以被忽略。

6 D3DPT_TriangleList 以顶点0为圆心,顺时针扇形排列的一系列三角形,三角形总数 = 顶点数-2。
三角形组成的方式:0-1-2,0-2-3,0-4-5,等。三角形的点全部遵循顺时针原则,否则忽略此三角形。
下图三角形 0-6-7 中的点7在逆时针方向上,所以被忽略。0-7-8 符合顺时针原则,所以也会正确绘出。
注意:以上讨论基于“消隐设置”为默认值的情况,可更改“消隐设置”的状态:
MyDirect3DDevice8.SetRenderState D3DRS_CULLMODE, nMode
nMode的取值:
1 D3DCULL_NONE 无背面消隐,不忽略任何三角形
2 D3DCULL_CW 顺时针消隐,与上文所说效果相反
3 D3DCULL_CCW 逆时针消隐(默认,与上文所说效果同)
演示程序截图:

用作纹理贴图的图片文件:纹理图1.jpg

原文:http://hi.baidu.com/100bd/item/516e52d9751d1356d63aae12
[转]DrawPrimitive 详解Direct3DDevice8的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- DB:目录
ylbtech-DB:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cn ...
- 14. Jmeter-配置元件一
jmeter-配置元件介绍与使用 CSV 数据文件设置 HTTP信息头管理器 HTTP Cookie 管理器 HTTP Cache Manager HTTP请求默认值 计数器 DNS Cache Ma ...
- js设置cookies
//写入cookies的方法 function setCookie(name, value, seconds) { seconds = seconds || 0; //seconds有值就直接赋值,没 ...
- 爬虫(一)—— 请求库(一)requests请求库
目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...
- C#反射的实现
一,什么是反射? 1,System.Reflection 命名空间中的类与 System.Type 使你能够获取有关加载的程序集和其中定义的类型的信息,如类.接口和值类型. 可以使用反射在运行时创建. ...
- hashRouter and BrowserRouter
<html><body> <div> <button class="btn" onclick="btnFun();"& ...
- Makefile总结(转帖)
文章地址:http://www.cnitblog.com/textbox/archive/2009/10/21/62036.aspx makefile 主要包含以下几点 显式规则 :描述了在何种情况 ...
- windows7下搭建robot framework环境
第一步 安装python并设置环境变量 1.安装python: python下载地址https://www.python.org/,建议用2.7.x版本 2.设置环境变量: 方法如下所示 第二步 安 ...
- Codeforces 358D DP
题意:有n只兔子需要喂养,每只兔子被喂养后的幸福感取决于与它相邻的兔子中已经被喂养的数量.现在问喂养这n只兔子可以获得的总幸福感最多是多少? 思路:初步分析题目发现,一只兔子被喂养获得的幸福感取决于其 ...
- 解决error: Microsoft Visual C++ 14.0 is required 问题
1.https://964279924.ctfile.com/fs/1445568-239446865 2.重新安装 .Net framework 更高的版本:https://support.micr ...