我知道有四种技术可以绘制3D物体:
(1)线框建模与绘制;(2)加性建模;(3)减法建模;(4)样条曲线。
然后,对这些模型进行了隐面去除算法。
我说的对吗?
这样的话,我可以用什么公式或算法来绘制一个三维球呢?
我正在使用一个名为来自科罗拉多大学的WinBGIm的低级库。
发布于 2015-12-22 11:26:50
绘制3D对象的技术有4种: (1)线框建模与绘制;(2)加性建模;(3)减法建模;(4)样条曲线。
这些是建模技术,而不是渲染技术。它们允许你在数学上定义网格的几何学。如何将这些数据呈现到2D画布上则是另一回事。
在2D画布上绘制3D模型有两种基本方法。
射线追踪
光线追踪的基本思想是通过帆布上需要确定颜色的点,从相机的原点传递光线。确定哪个型号被它击中,选择最接近的一个,确定它是如何照明的,以计算那里的颜色。这是通过进一步跟踪光线从命中点到所有的光源在现场。如果您注意到,这种方法不需要使用隐藏表面确定算法,如背面剔除,z-缓冲器等,因为基本思想是基于隐藏表面算法(射线跟踪)。
有一些软件包、库等可以帮助您做到这一点。然而,通常情况下,射线追踪器是作为一个大学水平的项目从头到尾写的。然而,这种方法需要更多的时间来呈现(而不是代码),但是结果通常比下面的结果更令人愉快。当你想渲染像电影这样的非交互视觉时,这种方法更受欢迎。
光栅化
这种方法采用原语(三角形和四边形)定义场景中的模型,并定期对模型进行采样(屏幕像素覆盖),并将其写入颜色缓冲区。在这里,隐藏的表面通常使用Z-缓冲器消除;当写入彩色缓冲器时,存储碎片的z阶和更近的一个的缓冲区将获胜。
由于多年的研究和投入的资金,大多数现代计算机上都有廉价的硬件支持,这是比较流行的一种方法。像OpenGL和Direct3D这样的库可以方便地进行开发。虽然结果不像射线追踪那样令人愉悦,但渲染速度更快,因此在交互式实时渲染游戏中得到广泛应用。
如果您不想使用这些库,那么您必须执行通常被称为软件呈现的操作,即您将最终完成这些库所做的工作。
我可以用什么公式或算法来绘制一个三维球体?
这取决于你选择的是哪一个。如果你只需用正投影在2D中对一个三维球面进行栅格化,你所要做的就是在画布上画一个圆圈。
发布于 2015-12-22 10:54:00
如果您正在寻找隐藏的线条删除(绘制边缘,而不是内部的脸),解决办法很容易:“背面剔除”。
模型的每一个边缘都属于两张脸。对于每一张脸,你都可以计算出法向量,并检查它是否面向观察者(通过法线的点积符号和投影线的方向);换句话说,如果观察者位于由脸的平面定义的外部半空间中。然后,边缘是完全可见的当且仅当它属于至少一个正面。
通常的球面离散是通过绘制等距的平行线和子午线来实现的。这可能是有利的调整平行间距,使所有的瓷砖是大约相同的面积。
https://stackoverflow.com/questions/34406695
复制相似问题