D3D9学习笔记(四) 绘制

1直接使用vertex buffer绘制

使用IDirect3DDevice9::DrawPrimitive绘制

HRESULT DrawPrimitive(

  [in]  D3DPRIMITIVETYPE PrimitiveType,--原语类型

  [in]  UINT StartVertex,--顶点缓存中第一个顶点的index

  [in]  UINT PrimitiveCount --绘制的原语的数量(注意不是顶点的数量)最大值查询D3DCAPS9

);

 

2. 配合indice绘制

 

3.0顶点buffer

struct CUSTOMVERTEX
{
        float x,y,z;--先定义顶点的数据结构,这里就是三维位置,还可以定义材质、贴图、法向等
};
 
CUSTOMVERTEX Vertices[] = 
{
        {-5.0, -5.0, 0.0},
        { 0.0,  5.0, 0.0},
        { 5.0, -5.0, 0.0},
        {10.0,  5.0, 0.0},
        {15.0, -5.0, 0.0},
        {20.0,  5.0, 0.0}
};

 

3.1原语

D3DPT_POINTLIST 点集

D3DPT_LINELIST 孤立的线集

D3DPT_LINESTRIP 首尾连接的线

D3DPT_TRIANGLELIST 孤立三角形集

D3DPT_TRIANGLESTRIP

D3DPT_TRIANGLEFAN

 

 

3.2 clear

使用IDirect3DDevice9::Clear( [in]  DWORD Count,--rect的数量

  [in]  const D3DRECT *pRects, --窗口内清除的矩形区域,可以有多个,null代表整个窗口,此时上面要用0

  [in]  DWORD Flags,--清楚的surface标志
D3DCLEAR_STENCIL D3DCLEAR_TARGET D3DCLEAR_ZBUFFER

  [in]  D3DCOLOR Color,--将表面颜色清到这个值

  [in]  float Z,--z buffer

  [in]  DWORD Stencil --stencil buffer

)可以清楚某个surface

3.3绘制的一般步骤

1设置buffer

2调用IDirect3DDevice9::DrawPrimitive从buffer绘制原语

不同的顶点元素可以输入到不同的流中,这样可以避免一种元素(如法向)改变不用重进送入其他元素

 

另外还有一种方法是直接从用户的缓存处而不是从显卡缓存绘制,调用IDirect3DDevice9::DrawPrimitiveUP

IDirect3DDevice9::DrawIndexedPrimitiveUP进行直接从CPU内存的绘制,这种绘制每次绘制要从内存取数据,但是有利有弊,它也可以省略了从显存取回数据的步骤,某些高频率更改顶点数据的操作用这种反而更快

 

3.4present a scene

1.程序不能直接锁住或者渲染到前缓存。前缓存是有后缓存交换过来的。通过IDirect3DDevice9::GetFrontBufferData可以获取截图

 

2.如果想从同一个设备中创建多个视口,那么就需要create多个swapchain

 

3.4.1 alpha blending

srcapha invsrcalpha

时间: 2024-09-19 05:26:12

D3D9学习笔记(四) 绘制的相关文章

kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1290269 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linux kvm虚拟机安装 h

Sqlite学习笔记(四)&&SQLite-WAL原理(转)

Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是什么       WAL(Write ahead logging)是一种日志模式,它是一种思想,普遍应用于关系型数据库.每个事务执行变更时,修改数据页,同时会产生日志,这样在事务提交后,不需要将修改的脏页刷盘,只需要将事务产生的日志落盘即可返回.WAL保证日志一定先于对应的脏页落盘,就是所谓的WAL.SQLI

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果                                           点击英文  变成英文状态点chinese就会变成中文                         源码的下载地址在文章的最下

JSP学习笔记(四)-----JSP动作的使用

js|笔记 1. 该实例主要告诉我们怎么样在JSP代码中使用JSP动作,例如<jsp:forward >2. 该实例需要四个文件:login.jsp,test.jsp,ok.htm,no.htm3. 首先看一下login.jsp<html><center><form method=get action="http://127.0.0.1:8000/test.jsp">username<input type=text name=use

D3D9学习笔记(三) Device

2.1架构 2.2类型 基本的device类型:hal:硬件渲染(发布).这也不是直接访问硬件驱动,而是访问在上一层的hal.(在顶点处理过程中,如果硬件处理失败,可尝试混合处理及纯软处理,设定标志D3DCREATE_MIXED_VERTEXPROCESSING)                                        soft软件渲染(但是这种软渲染并不一定拥有同当前硬件相同的渲染能力,所以要经常检查)                                   

D3D9学习笔记(五) Resource

Usage 这是强制的属性,使用时要明确确定,下面是每种reource的用途列表 Format <d3d9types.h> 存储访问顺序 D3DFORMAT_ARGB:内存中存储顺序是B到A                             D3DFMT_A8L8代表16位整数,高8位是A 存在未定义通道的格式都被默认为1 数据的底层格式是不同硬件不同的,但是被D3D运行时认可后就都变成这里面D3DFORMAT枚举类里面的某种格式   支持的格式及常见写法 1. (A\R\G\B)bit

D3D9学习笔记(七) TEXTURE 纹理

texture永远是图形学最精华细节最多的地方,所以我也花了最多的时间阅读和写这个章节.   d3dDevice->SetTexture(n,tex)设置当前在n通道的texture,n的数量硬件在0-7.多个通道的texture可以进行blending   一个pixel在光照计算后得到一个颜色值c1,它纹理采样有一个颜色值c2,最终这个pixel的颜色值为 Color = c1 x DestBlend+c2 x SourceBlend 可以通过 IDirect3DDevice9::SetRe

PL/SQL学习笔记(四)

这部分主要讲述在PL/SQL中如何访问oracle (一)检索单行数据 在PL/SQL嵌入select语句,使用方法: SELECT select_list INTO variable_name1,variable_name2,variable_name3... FROM TABLE WHRE condition 例:   DECLARE   v_sal  NUMBER ( 6 , 2 );  v_id  NUMBER ; BEGIN   v_id: = ' &id ' ;   SELECT  

extjs 学习笔记 四 带分页的grid_extjs

因此,现在几乎所有的grid控件都会支持分页功能.extjs也不例外,它对分页也提供了强大而方便的支持,使得我们在分页处理上可以得心应手. 在extjs中,类Ext.PagingToolbar封装了关于分页的操作,该类从Toolbar继承而来,单从名字上看,我们也猜得出这是一个能够处理分页的工具栏.好吧,那我们就来看看如何构造这样一个工具栏吧.PagingToolbar类的构造函数需要一个json对象来进行配置,在js中,使用json对象来提供所需参数非常方便,这样使得我们可以只填写感兴趣的参数