DIRECTX9.0绘制流水线

DirectX 9.0 3D 笔记 1.3.0 预备 1.HAL,硬件抽象层,由D3DDEVTYPE_HAL指定 2.REF,参考光栅设备 3.COM,组件对象模型,使之向下兼容,视为C++类。 1.3.1 表面 4.IDirect3DSurface9,描述表面。  (1)LockRect:获取指向表面存储区的指针,通过指针对每一个像素进行读写。  (2)UnlockRect:执行完LockRect后,必须调用 阅读详情

 DIRECTX9.0绘制流水线

 

  


主要目的是:
在给定的3D场景和指定观察方向的虚拟摄像机(virtual camera)的几何描述时,创建一幅2D图像

 

一.模型表示:
 三角形网格是构建物体模型的基本单元.


1.顶点格式:
顶点除了包含空间信息外,还可以包含其他的附加属性
顶点格式可以自己进行定义,这样的灵活顶点格式(Flexible vertexFormat, FVF)可用D3DFVF来进行描述我们自己定义的顶点格式.


例如:
#define FVF_NORMAL_TEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
struct NormalTexVertex
{
  float _x, _y, _z;
  float _nx, _ny, _nz;
  float _u, _v;
}


以上定义的含义是对应于该顶点格式的顶点结构,包含了位置,法线以及纹理坐标等属性.

 

 

定义灵活顶点格式时必须遵循的一个约定是:灵活顶点格式标记的指定顺序必须与顶点结构中相应类型数据定义的顺序保持一致.

 

2.三角形单元
三角形单元是3D物体的基本组成部分
绕序(winding order)
顺时针为正面

 

3.索引
构成一个3d物休的众多三角形单元之间会共享许多公共顶点,为解决该问题引入了索引(indices).
我们创建一个顶点列表(vertex list)和一个索引列表(index list).
顶点列表包含了全部独立顶点,索引列表包含了指向顶点列表的索引,这些索引规定了为构建三角形单元,各顶点应按何种方式来组织.


二.虚拟摄像机:
    摄像机指定了场景对观察者的可见部分,即我们将依据哪部分3D场景来创建2D图像.在世界坐标系中,摄像机有一定的位置和方向,定义了可见的空间体积(volume of space).
摄像机的视角空间是一个平截头体(frustum),在3d图形学中也可称为视域体或视截体.
 投影窗口(projection window)是一个2D区域,是由3d几何体通过投影映射而得.很重要的一点是,矩形投影窗口在x和y方向坐标的最小值是min=(-1, -1),最大值是max=(1,1)
为简化绘制工作,我们将近裁剪面和投影平面合二为一.注意,direct3d将投影平面定义为平面z=1;

 

三.绘制流水线:
应用一个变换矩阵的方法是使用IDirect3DDevice9->SetTransform方法

 

1.局部坐标系
  局部坐标系local space或建模坐标系modeling space是用于定义构成物体的三解形单元列表的坐标系.

 

2.世界坐标系
  构建各种物体模型时,每个模型都位于其自身的局部坐标系中.我们还需要将这些物体组织在一起构成世界坐标系(全局坐标系)中的场景.位于局部坐标系中的物体通过一个称为世界变换world transform 的运算变换到世界坐标系中,该变换通常包括平衡,旋转以及比例运算,分别用于设定该物体在世界坐标系中的位置,方向以及模型的大小.
世界变换用一个矩阵来表示:
Device->SetTransform(D3DTS_WORLD, 变换矩阵)

 

3.观察坐标系
摄像机放在原点,让光轴与世界坐标系z轴正方向一致,同时,世界空间中的所有几何体都有随着摄像机一同进行变换,以保证摄像机的视场恒定.这种变换称为取景变换view space transformation, 我们称变换后的几何体位于观察坐标系view space 中
取景变换矩阵可由
//建立一个左手观察坐标系
D3DXMATRIX * D3DXMatrixLookAtLH(
  D3DXMATRIX *pOut,
  CONST D3DXVECTOR3 *pEye, //摄像机在世界坐标系中的位置
  CONST D3DXVECTOR3 *pAt, //指定世界坐标系中被观察点
  CONST D3DXVECTOR3 *pUp //向上的方向向量
);


例:
D3DXVECTOR3 position(5.0f, 3.0f, –10.0f);
D3DXVECTOR3 targetPoint(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 worldUp(0.0f, 1.0f, 0.0f);

D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &targetPoint, &worldUp);
Device->SetTarnsform(D3DTS_VIEW, &v); //取景变换需要用此方法来设定

 

4.背面消隐
 每个多边形都有两个侧面,我们将其中一个侧面标记为正面,另一个侧面标记为背面,正面朝向多边形评功遮挡了位于其背面朝向的多边形,Direct3D正是利用了这一点而将背面朝向多边形加以剔除,这称为消隐
为了实现背面消隐,Direct3D需要区分哪能引动多边形是下面朝向的,哪些是朝向的,聊胜于无状态下.Direct3D认为顶点排列顺序为顺时针的三角形单元是下面朝向的,顶点排列顺序为逆时针的三角形单元是背面朝向的.
如果由于某些原因的消隐方式不能满足应用的要求,我们可以通过修改绘制状态来达到目的.
HRESULT SetRenderState(
  D3DRENDERSTATETYPE State, //要改变的参数
  DWORD Value   //改变的值
);
State=D3DRS_CULLMODE
VALUE:
D3DCULL_NONE  完全禁用背面消隐。
D3DCULL_CW  只对顺时针绕序的三角形单元进行消隐。
D3DCULL_CCW  默认值,只对逆时针绕序的三角形单元进行消隐。


5.光照
光源是在世界坐标系中定义的,但必须经取景变换至观察坐标系方可使用.

 

6.裁剪
现在我们想将那些位于视域体外的几何体剔除掉,这个过程称为裁剪.

 

7.投影:
观察坐标系中,我们的任务是获取3D场景的2D表示,从n维变换为n-1维的过程称为投影projection.
我们只处理透视投影perspective projection透视投影会产生"透视缩短"foreshortening的视觉效果,即近大远小这类投影使得我们可以用2D图像表示3D场景.
投影变换定义了视域体,并负责将视域体中的几何体投影到投影窗口中
//依据视域体的描述信息创建一个投影矩阵
D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
  D3DXMATRIX *pOut,
  FLOAT fovy,   //角度
  FLOAT Aspect,   //长高比
  FLOAT zn,   //到最近平面的距离
  FLOAT zf   //到最远平面的距离
);

D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(&proj, PI * 0.5f, (float)width/(float)height, 1.0f, 1000.0f);
Device->SetTransform(D3DTS_PROJECTION. &proj);

8.视口变换
 视口变换viewport transform的任务是将顶点坐标从投影窗口转换到屏幕的一个矩形区域中,该矩形区域称为视口viewport.
矩形的视口是相对于窗口来描述的,因为祸患总是处于窗口内部并且其位置要用窗口坐标来指定

typedef struct D3DVIEWPORT9 {
    DWORD X;
    DWORD Y;
    DWORD Width;
    DWORD Height;  //前4个数据成员定义了视口矩形相对对于其父窗口的位置及大小
    float MinZ;   //深度缓存中的最小深度值
    float MaxZ;   //最大深度值[0,1]
} D3DVIEWPORT9, *LPD3DVIEWPORT9;

一旦我们填充好D3DVIEWPORT9结构,就可这样来设置视口:
D3DVIEWPORT9 vp = {0, 0, 640, 480, 0, 1};
Device->SetViewport(& vp);

 

9.光栅化:
为了绘制每个三角形单元,如何计算构成三角形单元的每个像素的颜色值

 

 

 

 


 

DirectX 9.0读书笔记(1) 向量 引言 在游戏开发中,向量(Vector)的应用无处不在,诸如碰撞检测,物理仿真,计算机3D图形学中,都可以看到向量的身影。所以,想要学好3D图形学,或者物理仿真之类的技术,向量是必须要掌握的基本功。 在下面将简单介绍一些向量的基本使用方法。 向量的定义 向量指的是同时具有长度和方向的一个量。这样的具有长度和方向的量被称为矢量,而只有长度,没有方向的量被称为标量。所以向量是矢量的一种 阅读详情

相关推荐

DirectX纹理渲染原理

DirectX纹理渲染为了使绘制出来的模型具有很强的真实感,需要借助编程接口—DirectX对模型进行纹理贴图,达到还原的真实感。纹理指的是三维物体表面的图案和花纹。纹理贴图是指采用贴图的方法,将一张二维的图像贴到三维物体表面,形成三维物体表面的纹理。纹理和材质一样是物体表面的属性,结合纹理,材质和光照对三维场景进行渲染,可以使渲染的图形更加逼真。1 纹理坐标系实际上,纹理是一个二维数组,它的元素

dream_tingness的专栏 3945

13.1 使用DirectX9绘图引擎

DirectX 9 是由微软开发的一组多媒体应用程序接口API,用于创建和运行基于Windows平台的多媒体应用程序,尤其是游戏。它是DirectX系列中的一个版本,于2002年发布,是DirectX系列中的一个重要版本,DirectX 9在其发布时引入了许多新的功能和性能优化,成为当时PC游戏开发的主要标准,许多经典的PC游戏使用了DX9作为其图形和音频渲染引擎。虽然后续出现了更多强大的引擎,但本质上都是可以兼容Dx9的。在使用Dx9引擎之前读者需要自行下载该绘制库,当然在课件中笔者已经为大家准备了绿

微软技术分享 6599

DX9绘图之详细流水线 流程图 很全

DX9绘图之详细流水线 流程图 很全 交互式程序设计里面必须用到,图旁注明方法,很有帮助

VS2010+DX9+Assimp使用(1)

1.VS2010+DX9情况下加载模型 1.1 总体介绍 网格 绘制3D模型的方法 使用顶点缓存和索引缓存进行绘制 DrawPrimitive()、DrawIndexedPrimitive() 使用网络进行绘制 1.绘制几何体: D3DXCreateBox、D3DXCreateSphere、… 2.手工创建网格: D3DXCreateMeshFVF 3.使用Xfile文件创建网格 1.2主要介绍XFile 网格文件 相应代码如下 加载 XFile 文件 加载 XFile 材质和纹理 #include

szmtjs10的博客 1005

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 673

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 878

DX9绘制虚线抗锯齿线-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(13)

DX9绘制虚线抗锯齿线 划线扩展

gosub60的博客 1195

基于VUE的智慧园区可视化平台(开题报告+源码)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速,园区作为城市发展的重要组成部分,其管理和运营效率直接影响到城市的经济发展和居民生活质量。传统的园区管理方式已经难以满足现代城市对于高效率、智能化的需求。因此,利用先进的信息技术构建一个智慧园区可视化平台显得尤为重要。Vue.js作为一个高效的前端框架,能够帮助开发一个动态的、用户友好的智慧园区可视化平台,实现园区管理的数字化和智能化。

liu10611的博客 1179

DX9的绘制流水线

一旦我们建立了3D场景的几何描述,确定好虚拟摄影机,接下来的任务就是在显示器中建立3D场景的2D表示,为了实现这一个过后才能,我们专门的流程来完成它,我们称之为绘制流水线。大致如下图:(从左至右) 在绘制流水线中,有几个比较重要的部分就是,是坐标系的变换,这类坐标的变换通常是使用矩阵来实现的,Direct3D可以帮助我们实现这些变换,我们所提供的仅仅只是提供需要变换的矩阵以及变换的类型,,Dir...

Gary的面包屑小道 822

机械臂视觉抓取避坑指南:如何正确计算手眼标定矩阵(附Numpy代码)

本文详细解析了机械臂视觉抓取中手眼标定矩阵的计算方法,特别针对'眼在手上'配置下的常见错误提供了解决方案。通过Numpy代码示例和坐标转换原理,帮助开发者避免矩阵计算错误和坐标转换偏差,提升工业自动化系统的精度和效率。

weixin_29081703的博客 243

微信数据库读取解密脚本 聊天记录查看工具,支持所有微信版本,后期将支持企业微信[Windows]

(1)获取微信昵称、微信账号、微信手机号、微信邮箱、微信KEY的基址偏移(2)获取微信的微信昵称、微信账号、微信手机号、微信邮箱、微信KEY、微信原始ID(wxid_******)(3)获取微信文件夹路径(4)支持查看聊天记录查看(5)根据key解密微信数据库(6)提供数据库部分字段说明(7)支持微信多开场景,获取多用户信息等(8)微信需要登录状态才能获取数据库密钥(9)支持导出聊天记录为html,备份微信聊天记录,方便查看(10)合并多个数据库,方便查看。

weixin_43101935的博客 1万+

【阅读笔记之四】《DIRECTX.9.0.3D游戏开发编程基础》绘制流水线

绘制流水线           绘制流水线的功能是,在给定的3D场景和指定观察方向的虚拟摄像机的几何描述时,创建一幅2D图像。   1. 模型表示        在现实生活中,任何物体都可以用三角形网格逼近表示。三角形网格是建立物体模型的基本单元。注:线和点图元对于3D图形建模作用不大,这里不讨论。       1) 顶点格式        Direct3D允许自定义顶点格式。一

Josh的专栏 1936

C语言试题一之计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和

1、题目 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和 2、源代码实现 #include <stdio.h> #include <math.h> double fun1(int n) { if (n <= 0) return 0; int i; double sum = 0.0; for (i = 1; i <= n;...

码莎拉蒂 1万+

Cursor + IntelliJ IDEA 双端协同开发实战指南

在AI编程工具与传统集成开发环境的长期争论中,开发者常误以为只能二选一。实际上,以AI代码补全和对话式编程见长的Cursor,与拥有强大静态分析、重构和调试能力的IntelliJ IDEA,分别覆盖了代码生产与质量保障的不同环节。本文将解析双端协同的原理,即让Cursor负责生成样板代码与探索性编程,让IDEA负责工程理解、性能分析与复杂重构,从而在不牺牲开发效率的前提下保证大型项目的稳定性。这种工作流适用于Spring Boot等企业级Java项目,也适合从AI辅助编码转向工程化落地的团队。文章基于真实踩

weixin_34408717的博客 308

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

weixin_43567873的博客 1984

【WRFDA第三期】OBSPROC namelist 变量总结

OBSPROC namelist 变量总结

WW、forever的博客 1120

《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记

模型的表示 场景:物品或模型的集合 任何物品都可以用三角形网络逼近表示。我们经常用以下术语描述三角形网络:多边形(polygons)、图元(primitives)、网络几何单元(mesh geometry)。 描述三角形:指定三个顶点 描述物品:三角形单元列表 顶点格式 可以创建我们所希望包含的顶点信息,如位置,颜色等,如下所示 Code Snippet struct Co...

weixin_34355715的博客 155

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

DirectX 9.0 3D 游戏开发编程基础

DirectX 9.0 3D 游戏开发编程基础(价值599元) 加入QQ群302040480或加QQ2521238762,免费索取教程 第Ⅰ部分 基础知识 必备的数学知识  3D空间中的向量 向量相等 计算向量的长度  向量的规范化  向量加法  向量减法  数乘 点积 叉积 矩阵 矩阵相等、矩阵数乘和矩阵加法  矩阵乘法 单位矩阵 逆矩阵  矩阵的转置

n2dx83uc2的专栏 751

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

DirectX9:基础篇 第五章 绘制流水线

一.简介 绘制流水线也称为渲染管线,在DirectX的固定渲染管线中有九个步骤 用来创建3D世界几何描述的2D图像,并且设定一个虚拟摄像机把其中需要的部分透视投影到屏幕上 绘制流水线的流程:局部坐标系->世界坐标系->观察坐标系->背面消隐->光照->投影->裁剪->视口坐标系->光栅化 ...

weixin_30361641的博客 378

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

DirectX 9.0 学习笔记

<br />                DirectX 9.0<br />1:平面(法向量(normal vector)和平面中一点表示。<br />2,D3DX库用如下结构体来表示一个平面类,typedef struct D3DXPLANE{}<br />3点和平面的空间关系<br />      Direct3D 基础<br />一:<br />1, 初始化Direct3D<br />2,  Direct3d 可以被视作应用程序与图形设备(3d硬件)的交互中介<br />3, 一个中间环节 HAL(

fuli1215的专栏 3753

DirectX9.0学习笔记

第1章:创建和管理Direct3D设备 1.1  什么是Direct3D设备 每个图形API都有一个维持绘图功能整体状态的实体。如Windows GDI用的是DC,Java用的是Graphics对象,而DirectX用的就是IDirect3DDevice9(这个数字表版本)。Direct3D设备管理并维护从分配纹理内存到变换矩阵再到混合状态的一切事情。它有3种基本类型: D3DDEVTY

chenshuye009的专栏 974

directx9.0c和directxv9.0有什么差别,DirectX10.0呢

Directx9.0c是Directx9.0的更高版本。到目前为止DirectX9的开发进程让我们很满意,它的保守动作是将ps和vs提高到2.0版本(据说到发布的时候会提高到3.0)。Ps的意思是像素渲染效果器,vs的意思是顶点渲染效果器。说白了ps和vs可是让游戏程序设计师们更容易更轻松的创造出更漂亮的效果。由于新一代的显卡的Pixel Shader以及Vertex Sha...

weixin_33995481的博客 794

DX9绘图基础-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(7)

DX9绘图基础知识

gosub60的博客 1032

DX绘制流水线

绘制流水线   顶点格式。 、顶点格式(定义结构体)可以有多种,关键就在于结构定义好后,要用灵活顶点格式(Flexible Vertex Format,FVF)标记的组合来描述顶点的结构 #define FVF_COLOR  (D3DFVF_XYZ | D3DFVF_DIFFUSE.。。。) 标记与结构体内数据顺序一致     世界坐标系 让一个立方体中心位于世界坐标系中的点(x

小菜鸟 1488
上一篇: 我的Delphi7里程碑(认识Object Pascal 面向对象(OOP))
下一篇: Direct3D中的绘制
dingdingko
博客等级 码龄20年 50粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值