DX 中的坐标变换

Directx中的坐标变换

(1)世界变换和世界坐标系:物体在三维空间的运动和变形过程称为世界变换,如平移、旋转、缩放等。物体在其中运动的三维空间称为世界空间,它的三维坐标系表示称为世界坐标系,物体顶点在世界坐标系里的坐标变换称为世界变换。

(2)取景变换和观察坐标系:把图形显示想象成摄像过程,取景变换就像摄像机中摄像机的摆放一样,在三维图形显示中,需要设置一个虚拟摄像机,屏幕显示的图形就是虚拟摄像机拍摄在胶片上的景物。以摄像机位置为参考原点,摄像机观察的方向为坐标轴,建立的坐标系称为观察坐标系,物体在观察坐标系中的相对坐标称为观察坐标,顶点从世界坐标到观察坐标的转换称为取景变换。

(3)投影坐标和投影坐标系:物体从世界坐标描述转换到观察坐标后,可将三维物体投影到二维表面上,即投影到虚拟摄像机的胶片上,这个过程就是投影变换。以胶片中心为参考原点的空间坐标系称为投影坐标系,物体在投影坐标系中的坐标称为投影坐标。

(4)视区变换和屏幕坐标系:物体在投影坐标系中的表示为浮点坐标,通过定义屏幕显示区域(一般为显示窗口大小),将浮点坐标转化为像素坐标的过程称为视区变换,该像素坐标值称为屏幕坐标。例如,如果定义视区大小为宽640像素、高480像素,那么投影坐标(1.0f, 0.5f)经过视区变换后的屏幕坐标为(640, 240),如果定义视区大小为宽1024像素、高800像素,经过视区变换后的屏幕坐标为(1204,
400)。

取景变换其实就是设置摄像机,当设置完摄像机以后,其它就已经确定了在世界坐标系中,我们能看到哪个方向上的物体,但要做实际显示,一来不可能把所有这些物体全显示,因为模拟人能看到的角度和远近都有限,所以肯定有所裁剪,并且现在显示都是 2D 显示器,肯定也要模拟视觉效果,所以就有了投影变化,投影变化可以其实就是把
3D 减为 2D,并且模拟人的视觉效果对摄像机所观察的方向进行裁剪(投影变化是建立在视图变化的基础上的),所以投影时需要设置视角范围,最远观察距离,最近观察距离,最后可以选择正交投影,还是接近人类视觉的透视投影,来对看到的物体进行 2D 化显示,最后达到最终效果,相当于在整个渲染管线中,视图矩阵相当于确定了方向,投影矩阵确定了在这个方向上的所要运算的顶点的范围,共同完成从顶点缓冲到最后呈现为 2D 图像的工作。

时间: 2024-10-08 20:32:44

DX 中的坐标变换的相关文章

骨骼蒙皮动画中的坐标变换

背景知识 模型视图变换 OpenGL没有视图矩阵,只有模型视图矩阵,一般游戏引擎都会抽象出视图矩阵的. 总的变换为: v` = projection * view * mode * v; 父子节点变换 v` = worldMatrix * v = (parentWorldMatrix * localMatrix) * v; 骨骼变换 其实真正表示的关节,而不是骨头,只是骨头比较好理解. 默认姿态网格对象坐标空空变换到骨骼局部坐标空间(offsetMatrix). 完了后又从骨骼空间变换回动画姿态

dx11 入门 Tutorial 04: DX、HLSL中矩阵的内存存储和数学计算方式 DirectXSampleBrowser(June 2010)

主要是两方面: 1.shader数据和dx的通信,使用constant Buffer 2.矩阵的数学计算方式和内存存储方式再DX和HLSL中的异同 先说第一个: dx中的常量数据matrix等传入shader中流程: The first thing that we need to do is declare three constant buffer variables. Constant buffers are used to store data that the application n

3.汇编中的标志位

这周主要学习的是转移指令的相关知识和原理. offset在和汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址. jmp是无条件转移指令,可以只修改IP,也可以同时修改CS和IP. CPU在执行jmp指令的时候不需要转移的目的地址,机器码中包含的的是转移的位移. Ret指令用栈中的数据,修改IP的内容,从而实现近转移. Ret=POP  IP Retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移. Retf=POP IP     POP CS   CPU执行call指令时,进

Unity Shader学习笔记(一)坐标变换

基本问题 试想我们的美术做了一个3D模型,然后渲染引擎把模型渲染到屏幕上.我们还可以选定不同的视角,模拟不同的光照条件去观察模型.现在来分析一下这个过程.如果说我们把这个过程看成一个函数,那么函数的输出就是屏幕上的图像.确切地说,是屏幕上的每个像素.这个函数的主要输入是这个3D模型,我们观察的视角,光照情况等等因素.渲染过程就是给出这些因素决定每个像素值的过程. 首先来看模型.模型通常是由可视化的建模软件制作,看上去是一个"实体".然而从计算机的角度来说,模型文件只不过是包含渲染它所需

3D 坐标变换 公式 推导

[ 更新 ]更好的方法见[用抽象代数讨论仿射变换和仿射空间中的坐标变换] ,以下是之前的内容. 以下的推导 结论是正确的,可是过程有点懵. 以下使用行向量: e1=(1,0,0) e2=(0,1,0) e3=(0,0,1) i, j, k是三个线性无关的向量.它们在e1,e2,e3坐标系下的坐标也记作i,j,k i', j', k'是三个线性无关的向量,它们在e1,e2,e3坐标系下的坐标也记作i', j', k' denote???ijk???=A,???i′j′k′???=B 已知点P相对于

图形渲染中的背面消隐

在3d图形学中,一个三角形图元有两个表面 在dx中,认为在摄像机坐标系中 以你的观察方向三角形环绕为顺时针的面为正面,另一面为背面,而在openGL中正好相反.(顶点的方向又称为环绕) dx是左手坐标系而openGL是右手坐标系. dx: D3DRS_CULLMODE,绘制状态 用法:Device->SetRenderState(D3DRS_CULLMODE,X); 其中X可取的值1.D3DCULL_NONE //完全禁用背面消隐2.D3DCULL_CW //只对顺时针绕序的三角形进行消隐3.D

DirectX中的字体应用

1 DX中的创建字体的函数 HRESULT D3DXCreateFont( __in LPDIRECT3DDEVICE9 pDevice, __in INT Height, __in UINT Width, __in UINT Weight, __in UINT MipLevels, __in BOOL Italic, __in DWORD CharSet, __in DWORD OutputPrecision, __in DWORD Quality, __in DWORD PitchAndFa

OpenGL ES总结(二)OpenGL坐标变换之平移及旋转

世界坐标系: 在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的.你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴.长度单位这样来定:窗口范围按此单位恰好是(-1,-1)到(1,1),即屏幕左下角坐标为(-1,-1),右上角坐标为(1,1). openGL使用右手坐标 从左到右,x递增 从下到上,y递增 从远到近,z递增 当前绘图坐标系: 是绘制物体时的坐标系.程序刚初始化时,世界坐标系和当前绘图坐标系是重合的.当用glTranslatef(),gl

3d中的矩阵

  基础: 下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引.如下图所示   行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量. 相等 维数和元素都相等 数乘(与标量相乘) 每一个元素与标量相乘 加法(矩阵+矩阵=矩阵) 两个矩阵相应元素想加所得的矩阵,必须维数相等 矩阵乘法(矩阵*矩阵=矩阵) 条件:A的列数必须等于B的行数 定义:A(m*n) B(n*p) 则乘积AB有意义,且等于一个矩阵C(m*p),其中乘积C[i][j] = A的第i个行向量 * B的