引入
在下面几种情况,你会用三维绘图工具还是二维绘图工具?
- 机械设计师要设计一种齿轮组合机械,要看到多个面的效果
- 电影大片场景渲染
要想知道如何画出三维图像,首先要了解几个知识点
三维[1]
通常我们说的三维是指在平面二维系中又加入了一个方向向量构成的空间系。三维既是坐标轴的三个轴,即x轴、y轴、z轴,其中x表示左右空间,y表示前后空间,z表示上下空间(不可用平面直角坐标系去理解空间方向)。在实际应用方面,一般把用X轴形容左右运动,而Z轴用来形容上下运动,Y轴用来形容前后运动,这样就形成了人的视觉立体感。
三维是由一维和二维组成的,二维即只存在两个方向的交错,将一个二维和一个一维叠合在一起就得到了三维。
三维具有立体性,前后,左右,上下都只是相对于观察的视点来说。没有绝对的前后,左右,上下。
三维绘图[1]
在工程设计和绘图过程中,三维图形应用越来越广泛。AutoCAD可以利用3种方式来创建三维图形,即线架模型方式、曲面模型方式和实体模型方式。线架模型方式为一种轮廓模型,它由三维的直线和曲线组成,没有面和体的特征。表面模型用面描述三维对象,它不仅定义了三维对象的边界,而且还定义了表面即具有面的特征。实体模型不仅具有线和面的特征,而且还具有体的特征,各实体对象间可以进行各种布尔运算操作,从而创建复杂的三维实体图形。
三维绘图是用二维线条画出三维图像的过程
三维绘图与二维绘图的区别
三维绘图的优点 |
立体感 |
光影 |
前后虚实 |
质感 |
动态性 |
拟真 |
细节表现 |
复杂 |
特效 |
二维绘图的特点 |
平面 |
简单 |
渐变 |
三维建模发展史
https://jingyan.baidu.com/article/414eccf61237c16b431f0ac4.htmljingyan.baidu.com
二维绘图的原理
这是一个xy直角坐标系
例如,画一个正方形。
坐标假设为:(0,0), (2,0), (0,2), (2,2)
- 定义xy坐标系,x轴向右,y轴向上
- 第一个坐标O:在原点,打一个点
- 第二个坐标A:点从原点出发,沿着x轴方向移动2,停下来
- 第三个坐标C:点从原点出发,沿着y轴方向移动2,停下开
- 第四个坐标B:点从原点出发,沿着x轴方向移动2,y轴方向移动2,停下来
- 连线:OA、AB、BC、CO
填充正方形:指针从A向左移一点,向BC的垂直方向,画线,再向左一点... ...直到填充整个正方形
这样可能可以实现一点点的“材质包”功能。
三维绘图的原理
这是一个正方体
例如:画一个正方体,z高2
定义一个三维坐标系xoy,x轴方向左下角45°,y轴方向右,z轴方向上
前面都一样
P点(坐标x, y, z)怎么画?
以图中的样子为例:指针向x轴(x,y坐标同时减)移动x,向y轴(y坐标加)移动y,向z轴(指针向上移动)。
在图形表面填充,就把每一面图形当作二维坐标系看待,依次填充
如何让图形旋转起来?
- 按住鼠标左键并让指针左右移动,x轴的方向(指针左移,x轴方向向左变化)变化,y轴的方向(指针左移,y轴向下变化)变化
- 擦除所有画笔痕迹
- 重新按照新的坐标系方向画图
在一个坐标系内绘制两个以上的正方体的原理可能差不多。
三维透视效果
这是一个三维透视图(一点透视)
如何画出左上的的正方形?
方法一:在正方体的每个面,以消失点为原点建多个二维坐标系
- 定义一个点(消失点)
- 向左上角的正方形的位置引出四条射线,射线形成的角度参考正方形的横向宽度的弧度制对应的角度制 //画线参考系
- 以点为中心建二维坐标系,x轴面向正方形的右边面的某条边,y轴面向上方 //右边的面的坐标系
- 画线:距离点20~30处为一条边(举例而已,仅供参考)
- 依次画出坐标系所在的右边平面内的所有边
- 以点为中心建二维坐标系,x轴面向正方形的左边面的某条边,y轴面向上方 //左边边的面的坐标系
- 画线:距离点20~30处为一条边(举例而已,仅供参考)
- 依次画出坐标系所在的左边平面内的所有边
- 以点为中心建二维坐标系,x轴面向正方形的上边面的某条边,y轴面向右方 //上边的面的坐标系
- 画线:距离点20~30处为一条边(举例而已,仅供参考)
- 依次画出坐标系所在的上边平面内的所有边
- 以点为中心建二维坐标系,x轴面向正方形的上边面的某条边,y轴面向右方 //下边的面的坐标系
- 画线:距离点20~30处为一条边(举例而已,仅供参考)
- 依次画出坐标系所在的下边平面内的所有边
方法二:用一般的三维的方法来画
- 定义一个二维坐标系,x轴面向右边,y轴面向上方
- 向左上角的正方形的位置引出四条射线,射线形成的角度参考正方形的横向宽度的弧度制对应的角度制 //画线参考系
- 输入外面四个点的坐标,连线
- 在射线上找一个点,做水平线,垂直线,在焦点做更多水平线和垂直线
- 清掉这个面的不必要的线
- 连线
接下来就是用代码实现了
用各种代码绘图:
plot3实现三维图形的绘制jingyan.baidu.com Linux下开发基于.NET的三维绘图程序 - AnyCAD - 博客园www.cnblogs.com python mayavi三维绘图blog.csdn.net
https://www.codetd.com/article/736572www.codetd.com45.Qt openGL实现三维绘图 https://www.codetd.com/article/736572www.codetd.com
参考
- ^ab三维绘图 https://baike.baidu.com/item/%E4%B8%89%E7%BB%B4/9517577?fr=aladdin#3_3