文档介绍:用计算机程序制作三维立体画论文, 计算机论文论文,论文用计算机程序制作三维立体画摘要该文介绍了三维立体画的原理和制作方法, 并给出了用 C 语言编写的源程序。借助于 , 读者可以自己设计和欣赏各式各样的三维立体画。目前, 市面上正在流行各式各样的立体画, 其特点是从外表来看与一般的图案很相似, 但是双眼紧盯着注视片刻后, 一恍惚之间眼前便出现了画中画——立体像。笔者第一次看到这种画便被发明者的创意所倾倒。利用众所皆知的双眼视差原理, 竟能在一张平面纸上制造出如此奇幻。但是立体画本身除了其发明者的灵感和画面创作者的别出心裁之外, 其原理上并无神秘之处。用计算机程序来实现它, 可说是易如反掌。笔者用一个晚上时间, 便在微机上用 BASIC 语言实现了简单形体——平面圆饼的立体画。当然, 要使该程序具有完善的功能, 提高其制作速度, 还是应该用编译语言(如C 语言) 来编写。本文中给出的源程序借助于 Windows 图形文件, 可使大家自己制作任意形态的立体画。一、立体画的原理看过立体电影的人都知道, 当人的双眼分别接收不同视角拍摄的图像时便会产生立体感。这是由于人眼长期观察的****惯造成的。和立体电影原理相同的立体摄影风景照片也很早就已出现。图1 中给出了这种立体照片的示意图。左、右照片分别是人的双眼角度上观察一棱锥体时左右眼看到的图像(图 2) 。左眼看到的是棱锥的顶端向右错动了一些的图像, 右眼的看到则是棱锥的顶端向左错动了一些的图像。如果用一张硬卡片隔开两张照片( 如图 3),@***@; 图 1@@ @***@; 图 2@@ @***@; 图3 双眼分别看两张画, 会看到一个立体的棱锥体。这种立体照片的观察方法在测绘学中也早已采用。但是, 目前的三维立体画在形式上与这些很不相同。它是怎样在同一张画面上呈现立体的呢? 首先, 分析一下人们是怎样从这些立体画中看出“立体形体”的。从前面所说的可以知道, 人眼要得到立体感, 双眼必须有视差, 即双眼看到的图像应该有差异。人们在看立体画时, 都有“恍惚”一下的过程。在这过程中,双眼的视中心发生了错动( 如图 4) 。这样@***@; 图4左眼看到的是画面的“偏左像”, 右眼看到的是画面的“偏右像”。@@ 只要“偏左像”和“偏右像”的内容相当于图 1 的左、右照片, 双眼就会感到立体形体。那么, 能否把图 1 的左、右照片分别当做“偏左像”和“偏右像”, 简单重叠来得到立体画呢? 显然不行。能够合成立体画的“偏左像”和“偏右像”是要满足一定条件的。如果图 5 中表现的棱锥体的表面上有图案的话, @***@; 图5像素a 和像素 a' 应该具有相同的颜色,因为它们是从不同视角观察的@@ 同一个实体点。像素b 和像素 b' 、像素 c 和像素 c' 的情况与此相同。把两幅画分别当作“偏左图”和“偏右图”, 部分重叠成为同一画面时, 在新的画面上这种关系仍应该表现为 a=a',b=b',c=c'( 如图 6) 。但这时应该注意到, 在这张合成@***@09A04005. GIF; 图6 画面上,点 a' 既是“偏右图”上的点 a', 又是“偏左图”上的点 b 。而@@ 一张画面上相同坐标点的像素只可能是一种颜色, 因此, 产生了新的像素关系 a'=b 。另外,点a 既是“偏左图”上的点 a, 又是“偏右图”上的点 c', 所以,a=c' 。以此类推,点 b' 和点 c 也有类似的情况。因此出现了新的关系表示式,...'=c=c'=a=a'=b=b'=... 。这就构成了立体画面上像素必须要满足的条件:“等颜色像素链”。立体画上的所有点都从属于某一条“等颜色像素链”。这就是所有立体画图案都呈现出某种程度上的水平周期性的原因。因此, 对于任意立体形状, 只要构造出相应的这种“等像素链”, 并按其规律充填图案即可得到立体画。但是正如前面所述, 由于这种“等像素链”条件的约束, 人们虽然可以随意构造出各种形体的立体画, 但其立体形体的表面图案是不能完全随人意愿的。二、制作立体画的计算机程序由于人的双眼的水平性, 以上的“等像素链”只按水平方向分布, 与垂直方向无关。因此, 在程序中, 各个像素行的处理过程是相互独立的。制作立体画的程序主结构图如图 7。@***@; 图7 制作立体画的程序主结构图在以上结构图中, 关键是如何建立“等@@ 像素链”。具体的处理如下。对于立体形体上的每一个点, 首先求出该点在“偏左图”和“偏右图”上的坐标。以图 1 中的棱锥顶点为例, 实际上其 X 坐标是在中心点, 但由于双眼的位置并不在其正上方, 顶点在“偏左图”上向右位移,在“偏右图”