`
noar
  • 浏览: 28162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[原]3D中的坐标变换(一)

阅读更多
相机变换:
1.建立一个欧拉相机模型的过程:
I: 计算出相机的平移矩阵(根据相机位置计算平移矩阵的逆矩阵)。
II: 根据相机沿各个坐标轴的变化角度,计算一下各坐标轴的欧拉角度。
III: 然后建立各坐标轴的旋转的逆矩阵。左后根据坐标轴的变换顺序,如:xyz、yxz、xzy、yzx、zyx等旋转顺序,产生一个计算好的旋转矩阵(个坐标轴的旋转矩阵相乘)。
IV: 把平移矩阵和旋转矩阵相乘,得到最终的欧拉相机变换矩阵。

2.建立一个UVN相机模型的过程:
I: 根据相机位置计算出平移逆矩阵;
II: 确定出方向点的坐标;
III: 建立n,即相机位置到参考点的一个向量;
IV: 建立一个临时的v,首先假设v为;这个假设是由于最后都需要把所有的向量都要归一化
V: 建立u,u=v×n;
VI: 建立真正的v,v=n×u;
VII: 对所有的向量(uvn)进行归一化
VIII:计算出uvn旋转逆矩阵
u.x v.x n.x 0
u.y v.y n.y 0
u.z v.z n.z 0
0 0 0 1
VX:根据逆平移矩阵和逆旋转矩阵得出uvn坐标变化矩阵

世界坐标到相机坐标变换:
这个变换就是一个思路:首先计算出逆平移矩阵,然后计算出逆旋转矩阵,最后把逆旋转矩阵和逆平移矩阵合成一个变换矩阵。世界坐标通过这个矩阵变换到相机坐标。

物体的剔除:

1. 首先对经过世界变换到相机变换的物体,进行剔除。
剔除方法:分别对X(左右剪裁面)、Y(上下剪裁面)和Z(远近剪裁面)进行判断,看看物体坐标是否超出各剪裁面界限。
2. 如果超出剪裁面界限则设置一个该多边形已经被裁剪的标记。

不过,有一个问题:如果物体的一部分在里面,另一部分在外面则上述算法不能处理很好。

背面消隐:
1. 计算出面法线:面上两向量进行叉乘;
2. 计算出面发现和视点的夹角:进行点乘;如果夹角大于90度则进行背面消隐;

这里需要指出的是,进行背面消隐的时候先确定物体或多边形是单面有效的,即只有一个面被人看到。其次,背面消隐只应用到世界坐标中的关系,即确定出面法线和视点的关系即可,所以可以在进行世界变换到相机变换前进行背面消隐这样可以减少大量的无谓计算。

相机坐标变换到透视坐标
1.投影变换公式:
X_per = viewing_distance * x_world / z_world;
Y_per viewing_distance * aspect_ratio * y_world / z_world;
如果viewing_distance设置为1,则是平面坐标是归一化的即:x_per为-1到1,y_per为-1/ar到1/ar,其中,ar为屏幕的宽高比;
2.变换算法:
变换算法就是依次对多边形列表或物体中的顶点进行变换,即套用上述公式即可。

需要注意的是软件实现的投影变换最好用公式法,因为需要的cpu开销小,如果用矩阵变换方式进行计算则需要更多的cpu开销,用硬件实现的话矩阵变换方法最好,因为多数显卡只进行矩阵计算。
分享到:
评论

相关推荐

    基于VC++的OpenGL编程讲座之坐标变换.rar_VC 坐标_opengl 变换_vc opengl 坐标_坐标 变换_坐标

    本讲座主要围绕OpenGL中的坐标变换展开,这是一项关键技能,因为变换是3D图形学中的核心概念。在OpenGL中,坐标变换包括平移、旋转、缩放等操作,这些操作都是通过矩阵运算实现的。矩阵是数学中的强大工具,可以用来...

    已知两个坐标系下对应点坐标求转换矩阵

    转换矩阵通常是一个4x4的矩阵,称为齐次坐标变换矩阵。在三维空间中,它可以表示旋转、平移甚至缩放等多种变换。对于没有缩放的情况,我们通常使用3x3的旋转矩阵R和3x1的平移向量t来构建转换矩阵T,即: \[ T = \...

    刚性 3D 变换算法(空间三对点及以上的点求解两个坐标系之间的变换矩阵 python\matlab)

    总结来说,刚性3D变换是计算机图形学和图像处理中的基础概念,通过找到适当的旋转和平移矩阵,可以将一个坐标系中的3D点群映射到另一个坐标系。Python和MATLAB提供的强大数学工具使得这一过程变得简单且高效。在实际...

    全局到局部坐标变换矩阵:T = trans_matrix_beam3d(x0,y0,z0,x1,y1,z1,alpha)-matlab开发

    在本场景中,我们讨论的是一个在MATLAB环境中实现的特定函数——`trans_matrix_beam3d`,用于计算空间中光束或梁的坐标变换矩阵。这个函数将帮助我们把梁的一端坐标转换到另一端的局部坐标系。 首先,让我们深入...

    单个坐标把dxdydz的坐标值转换为dNdEdU方向

    总之,从笛卡尔坐标到dNdEdU方向的转换是三维空间坐标变换的一部分,它涉及到几何信息和表面属性的表示,对于理解和创建复杂的三维视觉效果至关重要。在实际应用中,理解并熟练掌握这种转换方法能帮助开发者更好地...

    原生js实现3d旋转

    在JavaScript中实现3D旋转是一项复杂但有趣的技术挑战,它涉及到计算机图形学的基本概念,如向量、矩阵、坐标变换以及WebGL或CSS3等技术。在这个场景中,我们将主要探讨如何利用原生JavaScript实现3D旋转,而不依赖...

    原生态JS 3D banner.rar

    这通常涉及到数学,尤其是向量和矩阵运算,用于计算新的3D坐标。 接下来,CSS3是实现3D效果的关键。CSS3提供了transform属性,允许我们对元素进行旋转、缩放、平移等变换,其中transform-style属性可以设置为...

    opengl求坐标

    1. **坐标变换**:在OpenGL中,我们经常需要对物体进行平移、旋转和缩放操作。这通过矩阵运算实现,例如,平移可以通过一个4x4的平移矩阵完成,旋转则由旋转矩阵表示,缩放用缩放矩阵表示。这些矩阵组合在一起形成...

    FireMonkey-3D-Sun-Earth-and-Moon-main.zip

    2. 3D图形编程基础:学习如何创建3D模型,设置模型的属性,如大小、颜色和旋转角度,以及如何进行3D空间坐标变换。 3. 物理模拟:理解天体运动的基本原理,如万有引力和开普勒定律,并将这些概念转化为编程逻辑。 4....

    8.9对纹理进行变换1

    在3D图形编程中,纹理变换是一个重要的概念,它允许我们改变纹理在表面的显示方式,从而创造出各种视觉效果。本节将详细讨论如何对纹理进行变换,包括平移、旋转和缩放,并通过具体的例子来阐述这些操作的实际应用。...

    vc++ 几何变换代码

    总结来说,VC++中的几何变换是通过数学公式和编程技巧实现的,涵盖了从基础的坐标变换到复杂的图像操作。通过熟练掌握这些变换,开发者能够处理和操纵图像,从而在图像处理、游戏开发等领域发挥重要作用。

    (原)关于OpenGL中的几个坐标系统的理解-lihaiping1

    当我们在OpenGL中定义二维图形的顶点时,如果不进行额外的坐标变换,直接将数据传递给顶点着色器,那么这些顶点将被期望位于NDC空间中,其坐标值范围限定在[-1,1]。例如,一个简单的全屏正方形的顶点坐标可能如下所...

    3D图像算法从入门到进阶(包含C实现)

    在3D图像算法的世界中,理解基础概念是至关重要的,这包括3D坐标系统、矢量和矩阵。本文档提供了一个逐步深入的学习路径,从3D的简介开始,然后逐步探讨更复杂的概念,如线性变换、三维坐标实现以及3D纹理映射。 3D...

    正交变换与逆变换1

    在数学和计算机科学中,正交变换是一种保持向量间角度不变,并且长度不改变的线性变换。这种变换在图像处理、信号处理以及...理解和掌握正交变换及其逆变换的概念,能够帮助我们更好地理解和解决涉及到坐标变换的问题。

    图形的对称变换,旋转变换,缩放变换演示

    在计算机图形学中,对称变换、旋转变换和缩放变换是三种基本的几何变换,它们被广泛应用于2D和3D图形处理、游戏开发、图像编辑软件等多个领域。这些变换通过改变图形的位置、方向和大小,可以实现丰富的视觉效果和...

    C#透视变换

    在计算机图形学中,透视变换是一种...总之,C#中的透视变换是一个结合了数学和编程技巧的领域,对于创建逼真的3D图形和游戏环境尤其重要。通过掌握透视变换,开发者可以为应用程序添加更丰富的视觉效果,提高用户体验。

    根据4对同名点求取变换矩阵工具

    总结起来,"根据4对同名点求取变换矩阵工具"是一个用于计算坐标变换的实用程序,它基于四对对应点来构建和求解变换矩阵。在PclSharp的支持下,这个工具可能特别适用于3D点云数据的坐标系统转换。理解并掌握这一技术...

    在VB6.0和DX9中实现3D图象编程

    总结起来,在VB6.0和DX9中实现3D图像编程涉及的知识点包括:DirectX的使用,3D图形基础,顶点和多边形,坐标变换,光照和材质,纹理映射,动画和交互,以及渲染循环。每个部分都需要深入理解和实践才能熟练掌握。...

    原生js html5 canvas 3D云动画效果

    在3D云动画中,开发者可能利用这些API结合透视变换来创建3D效果,使云朵看起来像是在空间中漂浮。通过改变画布的投影矩阵,可以模拟出深度感,使云朵呈现出立体形态。 3D云动画的实现还涉及到数学知识,尤其是向量...

    JavaScript实现的3D球面标签云效果

    4. **3D坐标系和投影**: 为了将标签分布在球面上,需要理解3D空间中的坐标系统,以及如何将3D坐标转换为2D屏幕坐标。同时,了解透视投影和正交投影的概念,有助于在视觉上创建更真实的3D效果。 5. **动画和事件处理...

Global site tag (gtag.js) - Google Analytics