首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用什么公式或算法来绘制一个3D球而不使用类OpenGL的库呢?

我可以用什么公式或算法来绘制一个3D球而不使用类OpenGL的库呢?
EN

Stack Overflow用户
提问于 2015-12-22 00:33:06
回答 2查看 459关注 0票数 0

我知道有四种技术可以绘制3D物体:

(1)线框建模与绘制;(2)加性建模;(3)减法建模;(4)样条曲线。

然后,对这些模型进行了隐面去除算法。

我说的对吗?

这样的话,我可以用什么公式或算法来绘制一个三维球呢?

我正在使用一个名为来自科罗拉多大学的WinBGIm的低级库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-22 11:26:50

绘制3D对象的技术有4种: (1)线框建模与绘制;(2)加性建模;(3)减法建模;(4)样条曲线。

这些是建模技术,而不是渲染技术。它们允许你在数学上定义网格的几何学。如何将这些数据呈现到2D画布上则是另一回事。

在2D画布上绘制3D模型有两种基本方法。

射线追踪

光线追踪的基本思想是通过帆布上需要确定颜色的点,从相机的原点传递光线。确定哪个型号被它击中,选择最接近的一个,确定它是如何照明的,以计算那里的颜色。这是通过进一步跟踪光线从命中点到所有的光源在现场。如果您注意到,这种方法不需要使用隐藏表面确定算法,如背面剔除,z-缓冲器等,因为基本思想是基于隐藏表面算法(射线跟踪)。

有一些软件包、库等可以帮助您做到这一点。然而,通常情况下,射线追踪器是作为一个大学水平的项目从头到尾写的。然而,这种方法需要更多的时间来呈现(而不是代码),但是结果通常比下面的结果更令人愉快。当你想渲染像电影这样的非交互视觉时,这种方法更受欢迎。

光栅化

这种方法采用原语(三角形和四边形)定义场景中的模型,并定期对模型进行采样(屏幕像素覆盖),并将其写入颜色缓冲区。在这里,隐藏的表面通常使用Z-缓冲器消除;当写入彩色缓冲器时,存储碎片的z阶和更近的一个的缓冲区将获胜。

由于多年的研究和投入的资金,大多数现代计算机上都有廉价的硬件支持,这是比较流行的一种方法。像OpenGL和Direct3D这样的库可以方便地进行开发。虽然结果不像射线追踪那样令人愉悦,但渲染速度更快,因此在交互式实时渲染游戏中得到广泛应用。

如果您不想使用这些库,那么您必须执行通常被称为软件呈现的操作,即您将最终完成这些库所做的工作。

我可以用什么公式或算法来绘制一个三维球体?

这取决于你选择的是哪一个。如果你只需用正投影在2D中对一个三维球面进行栅格化,你所要做的就是在画布上画一个圆圈。

票数 1
EN

Stack Overflow用户

发布于 2015-12-22 10:54:00

如果您正在寻找隐藏的线条删除(绘制边缘,而不是内部的脸),解决办法很容易:“背面剔除”。

模型的每一个边缘都属于两张脸。对于每一张脸,你都可以计算出法向量,并检查它是否面向观察者(通过法线的点积符号和投影线的方向);换句话说,如果观察者位于由脸的平面定义的外部半空间中。然后,边缘是完全可见的当且仅当它属于至少一个正面。

通常的球面离散是通过绘制等距的平行线和子午线来实现的。这可能是有利的调整平行间距,使所有的瓷砖是大约相同的面积。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34406695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档