`
wjlgryx
  • 浏览: 305674 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

3D绘图过程及原理简介

阅读更多
3D绘图过程及原理简介 收藏
Standard Primitives(标准几何体)
在创建命令面板的Geometry(几何体)对象类型中有如下几个次级分类项目:
• Standard Primitives(标准几何体):相对简单的几何体,如立方体、球体和锥体等。
• Extended Primitives(扩展几何体):相对复杂的几何体,如倒角柱体和纺锤体等。
• Compound Objects(合成物体):通过合成方式产生物体,如连接、变形和离散等。
• Particle Systems(粒子系统):产生微粒属性的物体,如雨、雪、喷泉和火花等。
• Patch Grids(网格面片):以面片方式创建网格模型,是一种独特的局部造型方法。
• NURBS Surfaces(NURBS曲面):用于创建复杂光滑的曲面,是一种全新的造型方法。
• AEC Extended(AEC扩展):用于建筑、工程以及土地构建方面对象的创建。如树木、栏杆和墙壁等。
• Dynamics Objects(动力学对象):用于创建具有动力学属性的物体。
• Stairs(楼梯):用于楼梯对象的创建,有4种可选择的楼梯类型。
• Doors(房门):用户房门的创建。有3种类型可供选择。
• Windows(窗户):创建窗户对象,有6种窗户类型。
在3ds max 6中,提供了10种标准几何体,分别为Box(立方体)、Sphere(球体)、Cylinder(柱体)、Torus(圆环)、Teapot(茶壶)、Cone(锥体)、GeoSphere(几何球体)、Tube(管状体)、Pyramid(四棱锥)和Plane(平面),如下图所示。
顶点(vertexs) 图元(primitives) 片元(fragments,又叫片断) 像素(pixels)
________________________________________
阶段1. ?顶点 ->图元
    几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。
________________________________________
阶段2.? 图元? ->片元
    图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。
1) 裁剪
    在裁剪时点,线段和多边形处理略微不同。对于点,要么保留原始状态(在裁剪体内部),要么被裁掉(在裁剪体外部)。对于线段和多边形来说,如果部分在裁剪体外部,则需要在裁剪点生成新的几何顶点。对于多边形,还需要在新增的顶点间增加完整的边。不论裁剪了线段还是多边形,都需要给新增几何点赋予边界标志、法线、颜色和纹理坐标信息。
裁剪过程时两步:
   a 应用程序指定裁剪(Application-specific clipping),一旦组合图元完成后,如果在程序中用glClipPlane()函数定义了任意的裁剪面,就进行裁剪。
   b 视景体裁剪(View volume clipping),随后,图元被投影矩阵投影(进入裁剪坐标系),被相应的视景体裁剪。投影矩阵可以由glFrustum() 或者glOrtho()定义,投影矩阵的操作和上面其他矩阵变换的操作相同。
2) 转换到窗口坐标
    坐标在转换为窗口坐标之前,要除以规格化设备坐标(normalized device coordinates)的w值进行规范化。然后对这些规范化数据进行视口变换(viewport)计算生成窗口坐标。可以用glDepthRange()和glViewport()控制视口大小,决定屏幕上显示图象的区域。
3) 光栅化
    光栅化是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元(fragment)。(yuyu注:这就是片元和像素之间的关键区别,虽然两者的直观印象都是的像素,但是片元比像素多了许多信息,在光栅化中纹理映射之后图元信息转化为了像素)在这个阶段,对象素绘制和位图进行操作需要用到当前栅格位置(用glRasterPos*()定义)。正如上面讨论的,三种图元的光栅化方法是不同的,另外,象素块和位图也需要光栅化。
   a)图元
    采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函数可以选择图元的光栅化维数和模式。另外,还可以用glCullFace(), glFrontFace()和glPolygonMode()控制多边形正反面不同的光栅化效果。
   b)象素
    有几个函数实现象素保存和转换。函数glPixelStore*()用于内存中的象素是如何保存的。glPixelTransfer*() and glPixelMap*()用于象素在写入帧缓冲区前是如何处理的。glDrawPixels()定义了一个象素矩形。用glPixelZoom()实现象素的缩放。
   c)位图
    位图是具有特定片元模式的0和1的矩形。每个片元有相同的相关数据。可以用glBitmap()定义。
   d)纹理存储
    纹理贴图是将指定的部分纹理图象映射到每个图元上。每个片元(fragment)具有的纹理坐标属性,该坐标与纹理图象坐标对应,得到纹理图象该位置的颜色值来修改片元的RGBA颜色,从而完成这个映射过程。用glTexImage2D()或glTexImage1D()来定义纹理图象。glTexParameter*()和glTexEnv*()来控制纹理如何解释和应用到一个片元上。
   e)雾
    已经光栅化的片元具有纹理贴图修正后颜色,可以采用融合因子再融合雾颜色,该融合因子大小根据视点和片元间的距离来定。用glFog*()指定雾化颜色和融合因子。
________________________________________

阶段3.? 片元->像素?
    OpenGL允许光栅化生成一个片元,只要该片元通过一系列检测就可以修改帧缓冲区中对应象素。如果它通过测试,片元数据可以直接替换帧缓冲区中的已有值,或者和已有值合并,这取决于设置的模式。
    1)象素所有权(ownership)检测
    第一个测试是判断在帧缓冲区中的象素所对应的某个片元是否属于当前OpenGL上下文。如果属于,片元进行下一个测试。如果不属于,窗口系统决定是否忽略该片元,或者是否进行下一步片元操作。
    2)裁剪检测
    用glScissor()函数,可以定义一个任意屏幕校准矩形,在该矩形外的片元将被忽略。
    3)Alpha检测
    Alpha测试只能在RGBA模式下进行,如果片元的alpha值超出一个固定参照值,片元将被忽略,这个比较函数可以用glAlphaFunc()实现并设定参考值。
    4)模版检测
    当模版缓冲区的值超出一个参照值,模版测试将有条件的忽略该片元。这个比较函数和固定值可以用glStencilFunc()实现。不论图元通过或没有通过模版测试,模版缓冲区中的值会根据glStencilOp()函数进行修改。
    5)深度检测
    当深度缓冲区的值与参照值的比较失败,深度测试忽略该片元。GlDepthFuc()用来执行这个比较命令。如果模版启用,深度比较的结果会影响模版缓冲区值的更新。
    6)融合
    融合合并了一个片元R、G、B和A值和存储在帧缓冲区对应位置的这些值。融合只能在RGBA模式下实现,它的实现需要片元的alpha值和对应当前存储象素,还需要RGB值。用glBendFun()控制,可以修改融合因子的源和目标。
    7)抖动
    如果启动抖动,片元的颜色或者颜色索引采用抖动算法。这个算法只需要片元的颜色值和它的x和y坐标。
    8)逻辑操作
    最后,在片元和帧缓冲区对应值之间要进行一个逻辑操作,结果将替换当前帧缓冲区的值。用glLogicOp定义想要的逻辑操作。这个逻辑操作只能在颜色索引模式下运行,而不能在RGBA模式运行。
________________________________________
象素
   在OpenGL流水线的上个阶段,片元转换为帧缓冲区中的象素。帧缓冲区实际上是一组逻辑缓冲区——包括颜色缓冲区、深度缓冲区、模版缓冲区和累积缓冲区。颜色缓冲区包括左、前右、后左、后右和一些辅助缓存值(auxiliary buffers)。可以直接从中读取或者复制。对于OpenGL不同上下文,这些缓冲区可能不全
    1)帧缓冲区操作
    用glDrawBuffer为绘图选择一个颜色缓冲区。另外在预片元化(per-fragment)操作后,可以用四个不同函数保留写入这些逻辑缓冲区的操作,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()对累积缓冲区进行操作。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().对不同缓冲区中指定相对应的颜色值、颜色索引值、深度值、模板值和累积值。
    2)读取和复制象素
    用glReadPixel()从帧缓冲区中把象素读到内存中,进行各种操作,保存处理结果。另外,可以用glCopyPixel()从帧缓冲区中复制一块象素到另一个帧混存。glReadBuffer()可以读取和复制颜色缓冲区中的象素。
分享到:
评论

相关推荐

    WPF 3D 绘图入门,附源码

    对于初学者来说,掌握WPF 3D绘图的原理和实践技巧是至关重要的。 首先,让我们从《WPF 3D Prime》开始,这篇文章可能会介绍WPF 3D的基本概念,如3D坐标系统、视口3D、以及如何在WPF项目中设置3D场景。3D坐标系统...

    Qt Creator中的3D绘图及动画教程(参照NeHe)(所有的资源文件)

    在本教程中,我们将深入探讨如何在Qt Creator中利用OpenGL进行3D绘图和动画制作。这个教程受到了经典的NeHe教程系列的启发,NeHe是OpenGL编程的一个里程碑,为初学者提供了丰富的学习资源。我们将主要关注以下几个...

    3D打印原理,简单实用

    3D打印技术的基本原理是“分层制造,逐层叠加”,这与数学上的积分过程相似。可以形象地将其称为“立体打印机”。3D打印机可以根据零件的形状,每次制作一个具有一定微小厚度和特定形状的截面,然后再将它们逐层粘结...

    行业分类-设备装置-3D绘图笔.zip

    下面我们将深入探讨3D绘图笔的工作原理、应用范围、以及与之相关的技术知识。 1. **工作原理** 3D绘图笔的核心工作原理基于热熔技术。笔内部有一个加热元件,可以将塑料线材加热到熔化状态。当用户通过笔头挤出...

    教育科研-学习工具-3D绘图笔的加热结构.zip

    这款3D绘图笔的加热结构是其核心部分,对于理解和掌握3D绘图笔的工作原理及优化设计至关重要。 首先,3D绘图笔的工作原理基于熔融沉积技术(Fused Deposition Modeling, FDM)。其基本流程是,通过内置的加热元件将...

    DXP、Altium Designer 封装库 3D库 PCB库 原理图库.zip

    在AD制图过程中,这些库文件的使用至关重要。设计师首先在原理图库中选取或创建元件符号,绘制电路原理图;接着,将原理图导入到PCB设计环境中,选择对应的封装,并利用3D库进行视觉验证;同时,PCB库被用来设定电路...

    基础3D绘图

    在计算机图形学领域,3D绘图是一种将三维模型转换为屏幕上的图像的过程。WPF(Windows Presentation Foundation)是微软.NET Framework的一部分,提供了一个强大的图形系统,包括对3D绘图的支持。本教程将深入探讨...

    3D多边形绘图游戏(1)

    总的来说,"3D多边形绘图游戏(1)"是一个涵盖了3D图形学原理、Java编程、游戏逻辑和物理模拟的综合性项目。通过分析Simple3DTest1.java源代码,我们可以深入理解这些技术是如何结合在一起,构建出一个生动有趣的3D...

    XY平面绘图仪3D模型图纸 UG(NX)设计.rar

    总之,XY平面绘图仪3D模型图纸的UG(NX)设计涵盖了从概念构思到最终产品的全过程,涉及机械设计、3D打印技术和电子控制等多个领域。通过这份资料,无论是专业人士还是爱好者,都能深入学习和实践相关知识,从而提升...

    科研绘图使用3DMAX制作三棱镜色散彩虹效果教程

    3DMAX结合Mental Ray渲染器,能够模拟真实世界的光照和材质特性,为科研绘图提供逼真的视觉效果。 首先,我们要理解三棱镜色散的基本原理。色散是光在不同介质中传播时,由于不同颜色的光波长不同,导致它们的折射...

    行业分类-设备装置-3D绘图笔进丝机构.zip

    本文将深入探讨3D绘图笔的进丝机构设计及其工作原理。 首先,3D绘图笔进丝机构的主要任务是将3D打印材料(如PLA、ABS等)连续且稳定地送入加热头,通过加热熔化后在空气中形成连续的线条,从而实现三维空间的绘制。...

    Virtual Machine 3D加速

    - **Direct3D**:是微软开发的一套3D绘图编程接口,是DirectX的一部分,广泛应用于Windows平台。 这些API通过提供一套标准化的接口来简化图形渲染的过程,使得开发者无需关心底层硬件的具体细节,即可高效地开发出...

    高教类课件:3D工程制图

    本课件旨在帮助学生掌握3D工程制图的基本原理和技能,为将来从事工程设计、产品开发等专业工作打下坚实基础。以下是关于3D工程制图的一些关键知识点: 1. **三维建模基础**:学习3D工程制图,首先需要了解基本的...

    用在C++上的3D控件

    通过结合C++的强大编程能力与QwtPlot3D提供的3D绘图功能,开发者可以构建出具有专业级视觉效果的应用程序,帮助用户更好地理解和分析3D数据。 总的来说,QwtPlot3D为C++开发者提供了一个高效且灵活的工具,用于在Qt...

    《3D打印技术概论习题册》参考答案-B03-4786.pdf

    按技术原理分类,3D打印常见的分类方式包括:高分子聚合反应原理、烧结和熔化原理、熔融粘合原理、层压制造原理、气溶胶打印原理、生物绘图原理等。其中,应用较为广泛的3D打印技术包括光固化成形技术(SLA)、熔融...

    金工实习报告(钳工+3D 打印+数控车床)

    在实习中,学生可能学习了3D打印的基本原理、打印材料的选择、模型设计软件的使用以及3D打印机的操作。3D打印技术能够快速制造复杂的几何形状,对于创新设计和个性化生产具有极大优势。实习过程中,学生可能设计并...

    3D计算机图形学 学3D必备

    首先,几何建模是创建3D对象的过程,可以使用多边形、曲线、曲面等多种方式来表示物体的形状。例如,线框模型、表面模型和体素模型是常见的几何表示方法。 坐标系统在3D图形中至关重要,包括世界坐标系、摄像机坐标...

    DELPHI-3D引擎核心完整源码,带SDK开发说明书地图编辑器

    这款引擎的核心特性包括实时3D渲染、光照处理、纹理映射、模型加载以及物理模拟等,同时配备SDK开发说明书和地图编辑器,使得开发过程更加便捷和高效。 一、3D渲染技术 3D引擎的核心在于其渲染技术。在DELPHI-3D...

    nuScenes数据集3D转2Dpython源码

    首先,我们需要理解3D转2D的基本原理。在自动驾驶系统中,3D物体检测通常是通过激光雷达(LiDAR)数据进行的,这些数据提供了环境的精确3D几何信息。然后,为了在图像上显示或进一步处理这些检测结果,我们需要将3D...

    计算机地图制图原理与方法-图形处理变换与常用地图操作

    在地图制图过程中,还会涉及到数据采集、数据预处理、数据清洗、空间分析等步骤。数据采集可能通过实地测量、遥感卫星图像或者现有数据库获取。预处理包括数据格式转换、坐标系匹配等,确保所有数据能够在同一平台上...

Global site tag (gtag.js) - Google Analytics