3d坐标系_3dmax坐标系 - CSDN
精华内容
参与话题
  • 3D坐标系:3D笛卡尔坐标系和3D柱面坐标系的区别

    在做一个WPF集成SharpDX的功能。

    遇见一个奇葩问题:MeshBuilder.AddBox(Point3D center, double xlength, double ylength, double zlength, BoxFaces faces);这个方法里面的BoxFaces 参数很让人迷惑。

    查看了一下源码:

    BoxFaces下有如下成员:

    Top = PositiveZ,

    Bottom = NegativeZ,

    Left = NegativeY,

    Right = PositiveY,

    Front = PositiveX,

    Back = NegativeX,

    ...

    那么问题就来了,这里的Top 、Bottom 、Left 、Right 、Front 、Back 和主界面的ShowViewCube里那些F B L R U D所指的方向不一样。。

    如图:

                   


    ShowViewCube(3D笛卡尔坐标系--右手)                            BoxFaces(3D柱面坐标系--右手)


    这可咋整,让我好迷惑,以后这参数咋设置,乱七八糟的。。。

    于是各种百度,最后在一篇博文里看到了对于3D坐标系的介绍,解决了我的问题。


    到这里还没结束,用MeshBuilder.AddBox(Point3D center, double xlength, double ylength, double zlength, BoxFaces faces);添加的面(比如图片)

    显示出来却是颠倒的,具体效果就是沿着X+方向顺时针旋转了90°,在这里再做一个逆旋转回去就行了。

    RotateTransform3D rota = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 90));// 把笛卡尔坐标系的点反转回柱面坐标系(绕X+轴顺时针旋转90°)
    Vector3D center = new Vector3D(10,10,10);
    center = rota.Transform(center);



    -----------------------------------------------------------------以下为引用--------------------------------------------------------------------------------------

    http://heweiyou.blog.51cto.com/5656256/1129911 感谢原博主的文章。。。)

    3D笛卡尔坐标

    3D笛卡尔坐标系故名思议则是在2D坐标系的基础上增加了一个维度,命名其为z轴,当然z轴也应有其正方向,因此出现了两种坐标系:左手坐标系(LHS)和右手坐标系(RHS)(用左手或右手握住z轴,如果其他手指从x轴绕到y轴,则大拇指将指向z轴的正方向)。

     

              

                 

    3D柱面坐标系

    3D柱坐标系较为接近2D极坐标系,在rθ的基础上多了一个z的值,如图:

      

              

               

    其中:

    x = r*cosθ

    y = r*sinθ

    z = z

    r =sqrt(x*x+y*y)

    tanθ = y/x

    3D球面坐标系

    使用两个角度和到原点的距离来定义点,如图:

                     

               

        其中:

        r = p*sinφ

        x = r*cosθ

        y = r*sinθ





    展开全文
  • Unity3D整理——坐标系

    千次阅读 2018-03-06 14:45:03
    在Unity3D中,坐标系至少存在如下三种:世界坐标系、屏幕坐标系和视口坐标系。(当然,在世界坐标系中的坐标叫世界坐标; 屏幕坐标 和 视口坐标 定义同理,不再赘述。)其一,世界坐标世界坐标,是Unity3D里面每一个...

    坐标系,是一位叫笛卡尔的人提出的。

    而后面提及的左手坐标系右手坐标系中,在数学定义上,便使用了向量的一种运算,这种运算也是以笛卡尔命名,叫笛卡尔积

    在Unity3D中,坐标系至少存在如下三种:世界坐标系屏幕坐标系视口坐标系

    (当然,在世界坐标系中的坐标叫世界坐标屏幕坐标视口坐标 定义同理,不再赘述。)

    其一,世界坐标

    世界坐标,是Unity3D里面每一个场景(Scene)默认的,是一个独立的初始化空间。

    所以,假如一个物体的世界坐标是(0, -10, 0),可以被视为是一个“绝对坐标”。其中,虽然可以通过移动窗口或者F键的方式把该物体移到视觉中间,但(0, -10, 0)还是(0, -10, 0),不会改变,只不过看起来在视觉中间了。

    ——怎么获取呢?

    ——使用gameObject.transform.postion,这个值获取到的就是该物体的世界坐标。

    当然,在tranform下,还有一个是localPosition

    localPositionposition 的区别就在于:前者是相对父物体的相对世界坐标;后者是在初始化空间里的绝对世界坐标;当然,如果一个物体没有父物体,则二者等效

    其中,在Unity3D的Inspector面板中,显示的便是每一个物体的localPosition 数值。



    举个例子:ParentGameObject 没有父物体,而ParentGameObject 的世界坐标是 (0, -10, 0),其下的ChildGameObject 相对世界坐标是(0, 10, 0);于是,按照上述说法:

    对于ParentGameObject而言:

    ParentGameObject.tranform.position = (0, -10, 0);

    同时,它没有父物体,localPosition与position等价,所以,ParentGameObject.tranform.localPosition = (0, -10, 0);

    对于ChildGameObject而言:

    ChildGameObject.tranform.localPosition = (0, 10, 0) 自然不用多说;

    重要的是,此时,ChildGameObject.tranform.position 应该等于(0, 0, 0)。

    (注:在Unity3D里面,(0, 0, 0) 用Vector3.Zero表示即可。)

    ——接下来的问题是:这个默认的世界坐标系是采用左手坐标系还是右手坐标系?

    ——答案是:左手坐标系


    此外,再插一个题外话:InverseTransformVectorTransformPoint

    上述二者,实现localPositionpostion 的互相转化

    比如:

    #1 : 求A物体下相对世界坐标为(10, 10, 10)的物体,其绝对世界坐标是多少?

    A.tranform.TransformPoint(new Vector3(10, 10, 10));

    #2 : 求绝对世界坐标为(20, -20, 20)的物体,相对于A物体的相对世界坐标是多少?

    A.tranform.InverseTransformVector(new Vector3(20, -20, 20));

    其二,屏幕坐标

    屏幕坐标,是在Unity3D里面 Game视图下的坐标,此时,屏幕大小也需要纳入考虑。

    其中,以左下角为起点(0,0),右上角为终点(Screen.width,Screen.height)


    但是,请注意:千万不要以为屏幕坐标是一个二维坐标!屏幕坐标,也是一个三维坐标!

    ——那么,z轴坐标值怎么算?

    ——根据Camera的位置来算。

    比如,Camera的世界坐标是(0, 0, -10),那么屏幕坐标中任何一点的z轴坐标值都是10(当然,x轴、y轴坐标值另当别论);换句话说,屏幕坐标的z轴坐标值就是camera位置的z值的相反数

    于是,根据上述所说,屏幕坐标跟两个因素有关:屏幕大小和Camera的世界坐标。所以,举个例子:Camera的世界坐标是(0, 0, -10),屏幕大小为800x600,那么,屏幕里中间点的屏幕坐标是多少?是(400, 600, 10)。


    当然,在Unity3D中不需要人为计算,使用方法WorldToScreenPoint() 即可把一个物体的世界坐标转换成屏幕坐标Camera.main.WorldToScreenPoint(GameObject.tranform.position);

    其三,视口坐标

    关于,视口坐标,其实一句话便可以讲清楚:视口坐标是标准化后的屏幕坐标。

    也就是说,它和屏幕坐标的属性是一样的。只不过其范围是,左下角为起点(0,0),右上角为终点(1, 1)。其余,与屏幕坐标同理。

    比如:Camera的世界坐标是(0, 0, -10),屏幕大小为800x600,那么,屏幕里中间点的视口坐标是多少?是(0.5, 0.5, 10)。

    当然,在Unity3D中也不需要人为计算,使用方法WorldToViewportPoint() 即可把一个物体的世界坐标转换成视口坐标Camera.main.WorldToViewportPoint(GameObject.tranform.position);

    总结:相互转换

    1. 同样是世界坐标

      相对世界坐标转绝对世界坐标:TransformPoint();

      绝对世界坐标转相对世界坐标:InverseTransformVector();

    2. 世界坐标转换为屏幕坐标:Camera.main.WorldToScreenPoint();

    3. 屏幕坐标转换为世界坐标:Camera.main.ScreenToWorldPoint();

    4. 世界坐标转换为视口坐标::Camera.main.WorldToViewportPoint();

    5. 视口坐标转换为世界坐标:Camera.main.ViewportToWorldPoint();

    6. 视口坐标转换为屏幕坐标:Camera.main.ViewportToScreenPoint();

    7. 屏幕坐标转换为视口坐标:Camera.main.ScreenToViewportPoint();

    展开全文
  • 3D空间的坐标系

    千次阅读 2012-01-19 15:23:37
     所谓本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转、平移等操作都是围绕局部坐标系进行的。这时当物体模型进行旋转、平移等操作时,局部坐标系也执行相应的旋转、平移等操作。  局部坐标
    
    
    转载自http://blog.csdn.net/trojanpizza/article/details/6652533

    1. 本地坐标系、局部坐标系(Local Coordinate)
       所谓本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转、平移等操作都是围绕局部坐标系进行的。这时当物体模型进行旋转、平移等操作时,局部坐标系也执行相应的旋转、平移等操作。
       局部坐标系是一个假想的坐标系,该坐标系与物体的相对位置至始至终是不变的,假想出这个坐标系的目的主要是为了正向理解对三维场景中物体执行的平移和旋转操作。使用局部坐标系理解模型变换时,所有的变换操作直接作用与局部坐标系,由于局部坐标系与物体的相对位置不变,因此对局部坐标系进行平移、旋转和缩放时,物体在场景中位置和形状也会发生相应的变化

    2. 世界坐标系、全局坐标系(World Coordinate)
       所谓世界坐标系就是将所有物件投射到同一个坐标系的坐标系,对于屏幕上的所有物体来说,这个坐标系系统都是相同的并且不会改变。用户默认的观察视角是沿着Z轴的负半轴方向。全局坐标系是三维空间物体所在的坐标系,模型的顶点坐标就是基于这个坐标系来表达的。

    3. 左手坐标系和右手坐标系(Left-handed Coordinate And Right-handed Coordinate)
       左手坐标系:手握拳,沿X轴正方向到Y轴正方向握紧,大拇指方向与Z轴正方向一致的坐标系称为左手坐标系。
       右手坐标系:右手握拳,沿X轴正方向到Y轴正方向握紧,大拇指方向与Z轴正方向一致的坐标系称为右手坐标系。

    4. 世界转换(World Transform)
       渲染流水线的第一步是将物体从本地坐标系转换到世界坐标系,这一过程称为世界转换。作用是把独立的物体放在一个统一的坐标系内,组成一个完整的世界场景。

    展开全文
  • 三维坐标系介绍与转换

    万次阅读 2015-11-19 20:22:52
    关于三维视图的坐标系,屏幕坐标与世界坐标的转换

    转载自:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/OnlineHelp/Flash3D/G_ProjectDocumentation/B_coordinate_system.html

    三维坐标系介绍


    基本概念

            我们需要三个轴来表示三维坐标系,前两个称作x轴和y轴,这类似于2D平面,第三个轴称作z轴。一般情况下,3个轴互相垂直。也就是每个轴都垂直于其他两个轴。图1展示了一个3D坐标系。

    3D笛卡尔坐标系

    图1 3D笛卡尔坐标系

            在Flash3D产品中我们实际上是位于z轴负方向面向xy平面来进行操作。当我们面对计算机屏幕并且坐标系没有旋转的情况下,实际看到的应该是图2的情况,这时候z轴垂直屏幕向里。

            在这里的三维空间中,z 属性表示深度。当对象向右移动时,x 属性的值会增大。当对象向上移动时,y 属性的值会增大。当对象远离视点时,z 属性的值会增大。若使用透视投影和缩放,则对象在靠近屏幕时会显得大一些,而在远离屏幕时会显得小一些。

    面对计算机实际看到xy平面

    图2 面对计算机实际看到xy平面

            2D平面中我们指定x轴向右为正,y轴向上为正的坐标系为标准形式,但是3D中并没有标准形式。不同的作者、不同的研究领域使用不同的标准。但这里我们统一使用图1所示坐标系。

             把3D中的x轴、y轴等同于2D中的x轴、y轴是不准确的。3D中,任意一对轴都定义了一个平面并垂直于第3个轴(例如,包含x,y轴的xy平面,垂直于z轴。同样,xz平面垂直于y轴,yz平面垂直于x轴)。我们指定+x,+y和+z分别指向右方,上方和前方。

            在3D中定位一个点需要三个值:x,y和z,分别代表该点到yz,xz和xy平面的有符号距离1。例如x值是到yz平面的有符号距离,此定义是直接从2D中扩展来的。如图3所示:

    3D中定位点

    图3 3D中定位点


    左手坐标系与右手坐标系

            3D坐标系存在两种完全不同的坐标系:左手坐标系和右手坐标系。如果同属于左手坐标系或右手坐标系,则可以通过旋转来重合,否则不可以。

             “左手”和“右手”分别代表什么意思呢?我们先学习一下怎样判断坐标系的类型。伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上。中指指向前方。现在,我们就已经建立了一个左手坐标系,拇指、食指和其余手指分别代表x、y、z轴的正方向。如图4所示:

    左手坐标系

    图4 左手坐标系

            同样,伸出右手,使食指向上,中指向前,拇指这时指向左,这就是一个右手坐标系,拇指、食指和其余三个手指分别代表x、y、z轴的正方向。右手坐标系如图5所示:

    右手坐标系

    图5 右手坐标系

            无论你怎么转动手腕,也不可能让两只手代表的坐标系重合。

            在我们的Flash3D产品中使用的是左手坐标系。

             左手坐标系与右手坐标系对于“正向旋转”的定义也是不一样的,假设空间有一条直线,我们需要绕该直线旋转一定的角度,首先我们叫这个轴为“旋转轴”,不要想当然的认为这里的“轴”是基准轴(x,y或z轴),旋转轴可以取任意方向。这时候如果希望绕轴旋转30度,我们怎么知道该如何旋转呢?

             我们首先要知道哪个方向为正,哪个方向为负,这样才能进行下一步操作。标准区分左手坐标系中的正向与负向的方式叫做“左手法则”。如何操作呢?首先明确一个前提,虽然旋转轴理论上是无限长的,但是我们还是认为它和基准轴一样有一个正方向和一个负方向;左手法则的使用方式:左手握住旋转轴,竖起拇指指向旋转轴正方向,正向旋转方向就是其余手指卷曲的方向;相同的操作方式在右手坐标系就是“右手法则”;如下图6,7:

    左手法则

    图6 左手法则

    右手法则

    图7 右手法则

            可以发现,在左手坐标系统中,从旋转轴正方向看下去,正向旋转方向就是顺时针方向;而在右手坐标系统中,从旋转轴正方向看下去,正向旋转方向就是逆时针方向;

            左手坐标系与右手坐标系可以互转,最简单的方式就是将某一个基准轴的正方向和负方向调转;如果掉转了两个轴,相当于绕第三个轴旋转了180度,并没有坐标系的变化。

    世界坐标系与物体坐标系

    世界坐标系

            3D世界坐标与flash里的坐标不一样, flash坐标只有两根轴(x轴与y轴)以flash影片左上角为坐标原点,向右为X轴正方向,向下为Y轴正方向。3D的世界坐标有三轴(x,y,z),如图8:

    视口与世界坐标

    图8 视口与世界坐标

            世界坐标的Z轴垂直于视口平面。

    物体坐标系

            每个3D元素都有自身坐标,在默认情况下,新创建一个3D元素时,该元素的自身坐标与世界坐标重合。下图新建一球(3D基本元素),该球自身坐标与世界坐标重合。

    自身坐标

    图9 自身坐标

            当3D元素被移动或转动时,其自身坐标也跟着移动和转动。

    自身坐标相对世界坐标旋转

    图10 自身坐标相对世界坐标旋转(rotationZ=30)

            将图9里的球的绕z轴旋转30度时就的到图2。图中黑线描出世界坐标。


    SuperMap iClient For Flash3D产品中的一些概念

    屏幕坐标,世界坐标,地图坐标

             屏幕坐标比较容易理解,就是我们看到的电脑屏幕对应的坐标点,这里的坐标点为二维坐标点,以左上角为原点,水平向右是正向x轴,垂直向下是正向y轴。当我们的鼠标在屏幕上移动或者点击的时候,首先获得的是屏幕坐标,进而通过转换能够得到世界坐标和地图坐标,屏幕坐标如下图11。

    屏幕坐标

    图11 屏幕坐标

             世界坐标系直接影响到我们观察到的Flash3D内部对象的效果,例如近大远小的透视效果, 所以世界坐标系是一个三维坐标系,我们这里使用的是笛卡尔坐标系,如图1所示,初始 状态,原点位于屏幕正中心,xy平面与计算机屏幕重合,向右向下为正,z轴垂直于电脑 屏幕向里为正。

            地图坐标系是我们看到 的地图平面的坐标系,是一个二维坐标系,它以左下角为原点,向右为x轴正方向,向上 为y轴正方向,如图12所示。这里的二维地图平面放在世界坐标系中,所以它有翻转等效 果。

    地图坐标系

    图12 地图坐标系

    三种坐标系之间转换关系

             当我们已知屏幕坐标,需要知道对应的世界坐标的时候,就会用到屏幕坐标向世界坐标的转换(map:screenToVector3D()方法);同理,当已知三维对象的世界坐标需要知道屏幕坐标的时候,就需要世界坐标向屏幕坐标的转换(map:vector3DToScreen()方法)。应用场景比如:鼠标单击屏幕上某一点能够拾取世界坐标系中该点所在的地物等。

            当我们已知世界坐标上的一个坐标位置,需要知道它在地图上的位置的时候,则需要进行世界坐标到地图坐标的转换(map: vector3DToMap()方法);同理,当知道地图上坐标点,需要知道它在世界坐标系中的位置时,就需要将地图坐标转换成世界坐标(map: mapToVector3D()方法)。应用场景比如:三维世界有一个建筑,需要放在二维地图上,位置间的转化就显得非常必要了。

            当需要鼠标在屏幕移动并获取其对应的地图坐标点位置的时候,就需要屏幕坐标向地图坐标的转换(map: mapToScreen()方法),当已知地图上某点地理坐标,需要知道对应的屏幕坐标的时候,就需要将地图坐标转换成屏幕坐标(map: screenToMap()方法)。应用场景比如:鼠标的框选能够选取地图坐标中对应位置的地物要素(这里就类似二维地图的一些操作),就会用到地图坐标与屏幕坐标的转换。

            总之,坐标之间的转换在具体的应用场景中是非常重要的,尤其影响各个地物之间在不同坐标系之间的展现形式。

    展开全文
  • 3D坐标系

    2019-08-14 00:07:38
    3D渲染中,首先要确定的就是坐标系坐标系根据实际情况,分为两种: 左手坐标系 右手坐标系  在3D空间中,这两个坐标系是没有办法重合到一起的:    Unity使用的坐标系为左手坐标系。  在确定左手...
  • 3D数学 坐标系

    千次阅读 2015-07-13 11:35:08
    坐标系 什么是多坐标系?用处是什么? 顾名思义,多坐标系指在同一空间的...而这些不同的坐标系又有嵌套关系(如耳朵坐标系嵌套在头部坐标系中,头部坐标系又嵌套在上体坐标系,上体坐标系又嵌套在整个身体坐标系
  • 3D空间坐标系认识

    千次阅读 2014-04-10 07:19:27
    这样我们就需要一个3D空间坐标系来进行描述和进行显示,在真实的世界里,每一个物品都存在于3D空间中。这也就意味着,要想放置一个物品在一个特殊的位置,我们必须要使用一个坐标系并且定义3个描述特定位置的坐标。...
  • 3D坐标系变换

    万次阅读 2017-06-22 09:32:18
    3D坐标系变换~
  • Directx3D - 3D空间的坐标系

    千次阅读 2011-08-02 09:26:18
    Directx3D - 3D空间的坐标系
  • 3dsMax和Unity3D坐标系同步

    万次阅读 2014-01-03 19:42:05
    3ds Max直接导出的FBX导入到Unity3D里,会发现x轴旋转度为-90, 这是因为3ds Max采用的是右手坐标系统,Unity则是左手坐标系统。接下来将演示告诉你如果修正这一问题。
  • 3D图形学坐标系变换

    万次阅读 2013-06-04 11:06:20
     3D计算机图形学常用的有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系。我们主要讨论的就是这些坐标系间的转换。这些坐标系都是为了完成计算机3D图形学最最最基本的目标而出现。3D计算机图形学...
  • Unity3D中的四种坐标坐标系

    万次阅读 2016-07-23 09:33:55
    Unity3D中的四种坐标系
  • 相机模型(Camera Model)

    千次阅读 2016-06-18 23:00:43
    Perspective Camera ModelPerspective Camera Model 或 Pinhole Camera Model都是简单但是应用广泛的模型,描述了将物体从3D世界坐标系转换(World Coordinate)到2D图像坐标系(Image Coordinate)的数学映射过程。...
  • 依次有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系.我要讨论的就是这些坐标系间的转换。 这些坐标系不是凭空而来,他们都是为了完成计算机3D图形学最最最基本的目标而出现.计算机3D
  • 3d max 模型局部坐标系修改

    千次阅读 2018-03-23 19:09:15
    3d max 坐标系包括世界坐标系和局部坐标系。世界坐标系用于表示模型所在场景,局部坐标系表示模型所在位置。局部坐标系相对于世界坐标系的位置,即模型的坐标。3dmax 软件和 AutoCAD软件的思路有点类似。通过捕捉...
  • <Unity3D>Unity3D的四种坐标系

    万次阅读 2013-04-19 09:32:04
    World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。  Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)...
  • 3dsMax与Unity3D坐标系同步

    千次阅读 2016-04-06 11:07:50
    本文转自:... 问题   3ds Max直接导出的FBX导入到Unity3D里,会发现x轴旋转度为-90,如下图所示: ... 这是因为3ds Max采用的是右手坐标系统,Unity则是左手坐标系统。接下来将演示告诉你如
  • 非常显而易见,他们之间的转换关系如下:x = r * cos(theta)y = r * sin(theta)r = sqrt(x2 + y2)theta = arctg(y/x)2) 3D笛卡尔坐标系在2D笛卡尔坐标系上增加了Z轴,形成3D笛卡尔坐标系。分为左手坐标系和右手坐标...
  • 这里研究生的摄像机模型都是针孔摄像机,摄像机的标定问题是CV领域的一个入门级的问题,初学摄像机标定时会被各种坐标系弄晕,这里再介绍一下,常提到的坐标系有四个:世界坐标系(Ow,以空间一点为原点)、摄像机...
  • 笛卡尔坐标系

    万次阅读 2018-04-17 00:11:31
    由于本人也在不断学习中,如有错误,欢迎指正,谢谢! 笛卡尔坐标主要有: 1D :就是我们在初中时候学过的叫数轴,用单个...三维坐标系分为左手坐标系和右手坐标系坐标系 如下图的绘制,根据不同的坐标...
1 2 3 4 5 ... 20
收藏数 38,355
精华内容 15,342
关键字:

3d坐标系