收藏 分销(赏)

3D图形大揭秘:进入3D世界.pdf

上传人:自信****多点 文档编号:520722 上传时间:2023-11-06 格式:PDF 页数:8 大小:3.82MB
下载 相关 举报
3D图形大揭秘:进入3D世界.pdf_第1页
第1页 / 共8页
3D图形大揭秘:进入3D世界.pdf_第2页
第2页 / 共8页
3D图形大揭秘:进入3D世界.pdf_第3页
第3页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、3D图形大揭秘:进进入3 D世界浩然大家好,我是浩然,在上一期中,我们主要学习了如何用计算机绘制图形,特别是如何绘制直线。这实际上也是之后学习3D图形绘制的基础。那么,本期让我们继续探索图形的秘密吧!化曲为直好激动,在铺垫了这么久之后,我们终于要开始学习3 D图形的原理了!没错,不过正式开始之前,让我们先讨论一个问题。上一期中,我们学习了直线的绘制方法,但实际上,很多图形都不是用直线来画的,比如圆形,这要怎么绘制呢?你知道“割圆术”吗(图2)?这是祖冲之计算圆周率时使用的方法。我们可以在圆周上取一些间距相等的点,然后将它们用直线连接,这样就得到了一个正多边形。当点的数量不多的时候(绿色),正多

2、边形的周长和圆的周长相差比较大;但是如果我们增加点的数量(蓝色、黄色),我们会发现正多边形的周长与圆的周长越来越接近。这确实有点儿麻烦。不过我们应该也可以用类似画直线的办法将圆经过的像素涂黑(图1),是不是?我明白了,只要我们有足够多很图1短的直线,也可以“拼凑”出曲44线。不过,反正最后都是要对像素方块进行涂黑,为什么要用直线来近似圆弧,而不是直接绘制呢?这样多了一个步骤。你的困扰是有理由的,既然最终的目标是一样的,为何要“绕路”呢?其实,原因也很简单,从上一期的内容来看,我们想要绘制直线已经比较复杂了,要绘制曲线只会更加复杂。但是如果能够将所有曲线的绘制都转换为对直线的绘制,那么我们就只需

3、要研究一种具体的绘制方法,简化了问题。实际上“化曲为直”代表了一种常见的解决问题的思路,即将复杂的问题转化为无数个细小的简单问题。在一开始我们就讲过,要表示2 D图像,最简单的方法就是在一个方格纸上涂色,形成像素图(点阵图)。换句话说,我们的图形是由许多有颜色的正方形构成的,且这些正方形的边长都为1。此外,正方形的所有顶点的坐标都必须是整数。例如在图3 中,黑色的点代表坐标为整数的位置,其中黄色的块是一个像素;青色的块不是一个像素,因为它的边长不等于1(它其实是由4 个像素构成的);品红的块不是一个像素,因为它的顶点的坐标不是整数;红色的块也不是一个像素,因为它不是一个正方形。我知道了,这就是

4、数学思想。进几3 D世界图3从二维推演到三维,我们可以将三维这么说的话,其实挨个涂黑像素格图形想象成由许多有颜色的方块构成的,子也可以看作对曲线绘制的一种这些方块也需要满足一定的条件:近似。它是一个立方体是的,只不过这种近似连续性比较差,而且在变换过程中很难保持原有的形状,产生大量锯齿。不过,进入3 D世界,我们还是从最容易理解的像素说起吧!立方体的边长必须为1立方体的顶点的坐标必须是整数这样的立方体(图4),我们称之为体素(Voxel)。45于体素的游戏,因为游戏中的物体都是由许多方块构成的(图6,不过这些方块不像像素那样只有一个颜色),这些方块在摆放时位置也是基本固定的,这些特征跟体素非常

5、像。熟悉3 D图形制作软件图4利用体素,我们可以像表示2 D图形一样那有没有使用体素来作图的软表示3 D图形(图5)。件呢?有的,这里给大家介绍一款名为MagicaVoxel的软件。大家可以登录下面的网址进行下载:https:/ 中目前选择了“Erase”,“E r a s e”相当则可以改变方块稀疏性与存储感觉使用体素表示三维物体十分方便,我也曾在Minecraft中搭建过一些建筑,理解起来很容易是的,它们的原理类似。不过很遗憾地告诉你,在实际操图9作中,我们很难用体素来表示三维物体。47些像素不用来显示内容,我们也需要对其进行唤,这是为何?体素不应该像像存储“这个像素没有内容”。就像一张一

6、素一样,很方便使用,显示起来涂了色的方格纸,即使有的格子没有颜色(无也很容易吗?色透明),它也实实在在地占据了一个单位。不知道你有没有注意到,前这样做的好处是,当我们需要知道某一个格面配图中的体素图形,其实都是子的颜色时,可以快速定位。以国际象棋棋比较粗糙的,看上去远不如平面的像素图盘为例(图11),我们很容易就能知道f7和那样精细。这是因为,假设我们表示一个各e5格子的颜色。个边长均为5 0 0 个单位的图形,用像素表示的话,需要5 0 0 5 0 0=2 5 0 0 0 0 个像素;用体素表示的话,则需要加一个维度,需要500500500=125000000个体素!小提示还记得我们前几期介

7、绍过的矩阵吗?点阵图其实就可以看作一个大的矩阵。三维比二维确实多了很多。abCdefg h88是的,用体素表示三维7物体,会占用特别多的存储空6间,而计算机的存储能力是有限的。如5果我们只使用2 5 0 0 0 0 个体素来表示同样4的三维图形,那么图形的分辨率就只有32500006 3,这就太粗糙了。我们真的需要那么多体素吗?我们又不可能透过物体表面看到它的内部,是不是只存储物体表面的体素就可以了?鱼小朵的思路是正确的,但是实际上并没有那么简单。我们回忆一下2 0 2 3 年3 月刊中关于BitBlit的内容,我们存储像素图时其实存储的是一个完整的图形区域,即使其中有f7e5321abCde

8、fgh图11小提示说明:在下文中,这个国际象棋棋盘中用橙色和淡黄色表示的格子都视作空格子,给它们涂色是为了区分每一个格子。765432148当然,我们确实可以只存储有颜色的格子的信息。例如,我们不保存完整的8 8 的国际象棋画布,而是只将有颜色的格子单独抽出来,保存为一张张“卡片”,并标记好它们的位置(图12)。获得答案,而是需要先看一遍手中的所有“卡片”才行。虽然节省了存储空间,但是计算步骤变多了。abCdefgh8877665544332211abCdef9h四叉树与几叉树那有没有什么办法能够既实现高效的存储,又实现高效的计算呢?答案是肯定的!我们可以发现,在稀疏图像中,大部分的像素都是空

9、的,对于这些像素,我们用最基本的像素单位来表示实在是太浪费资源了,我们可以考虑用一些“大块”的图来代替像素。还是以国际象棋棋盘为例,我们可以将整张图分成四个区域(图13)。abCdefghf7e5这样,当只有少数几个像素有颜色时(比如两个),我们就大大节省了存储空间。但是,这样做也有缺点,我们拿着手中的一系列“卡片”,很难知道它们代表的到底是什么图形,要知道具体的图形,我们需要将每张“卡片”按照标记的位置摆上去才行。另外,这样做也带来了一个麻烦,那就是当我们想要知道某个格子的颜色时无法直接图1287654321abCdef9h图13我们此时会发现,左上、左下、右下三个区域的内容全部相同(均为空

10、),所以用44的“大块”就足够描述它们了。而右上角的区域,它的内部存在三种像素(红、绿、空),因此我们需要继续划分(图14)。8765432149abCdefh8877665544332211abCdef9h们可以进一步给每一个块进行编号(图16)。abCdefgh821121272132146231232523323443图142822762454332经过再一次划分,右边的两个2 2 的块内容相同,但左边的两个2 2 的块还各有两种不同的像素,我们需要继续划分(图15)。到这里,每一个块中都只有一种颜色了,我们就不需要再划分了。这种结构就是大名鼎鼎的“四叉树”O1abCdef9h思考你能找

11、出编号的规律吗?1图16abCde876549h87654那么,我们怎么知道某个块的颜色呢?这里以查询f5的颜色为例进行讲解:我们在(a-h,1-8)的区域内确定f5的颜色,可以确定,它位于(e-h,5-8)的区域内,这个区域不是一个完整的格子,需要继续寻找。321abCde我们可以计算出,如果采用像素存储,共需要8 8=6 4 个像素。而用这种“四叉树”划分的方式,则只需要3+2+8=13 个块!我3219h我们在(e-h,5-8)的区域内确定f5的颜色,可以确定,它位于(e-f,5-6)的区域内,这个区域不是一个完整的格子,图15需要继续寻找。我们在(e-f,5-6)的区域内确定f5的颜色

12、,可以确定,它位于(f-f,5-5)区域内,这个区域是一个完整的格子“2 3 4”,50是不是不一定要求有大片格子的颜色为空。停止寻找。空白像素,只要有大片相再以查询h8格子的颜色为例讲解:同颜色的像素,即可使用四叉树?我们在(a-h,1-8)的区域内确定h8 的颜色,可以确定,它位于(e-h,5-8)的区域内,这个区域不是一个完整的格子,需要继续寻找。我们在(e-h,5-8)的区域内确定h8 的颜色,可以确定,它位于(g-h,7-8)的区域内,这个区域是一个完整的格子“2 2”,格子的颜色为空。停止寻找。通过这种方式,我们就能够快速确认每一个格子的颜色。对于三维图形,也是如此,只是我们需要对

13、空间八分而不是四分,从而形成空间八叉树(图17)。利用八叉树,物体内部的广大区域都可以用较大的格子表示,只有在边界附近才会用细小的格子来表示,这样就提高了存储的效率。是的,这正是四叉树的优点(图18)。不过,这种表示方法其实也有一些缺点,我们下期再讲。abCde821121272132141654321abCdef9h图189h8227231232233234362454321结语本期我们首先了解了“化曲为直”的思想,接着了解了像素在三维图形中OO的对应单位一一一体素,然后学习了如何利用四又树和八叉树来高效地存储图像。本期到这里就结束了,大家如果有什么问题,可以发送电子邮件到hawran图。那么,我们下期再见!51

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服