下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用计算机程序制作三维立体画摘要该文介绍了三维立体画的原理和制作方法,并给出了用语言编写的源程序。借助于Pbrush.exe,读者可以自己设计和欣赏各式各样的三维立体画。目前,市面上正在流行各式各样的立体画,其特点是从外表来看与一般的图案很相似,但是双眼紧盯着注视片刻后,一恍惚之间眼前便出现了画中画立体像。笔者第一次看到这种画便被创造者的创意所倾倒。利用众所皆知的双眼视差原理,竟能在一张平面纸上制造出如此奇幻。但是立体画本身除了其创造者的灵感和画面创作者的别出心裁之外,其原理上并无神秘之处。用计算机程序来实现它,可说是易如反掌。笔者用一个晚上时间,便在微机上用BASI语言实现了简单形体平面圆饼的
2、立体画。当然,要使该程序具有完善的功能,进步其制作速度,还是应该用编译语言(如语言)来编写。本文中给出的源程序借助于inds中的.BP图形文件,可使大家自己制作任意形态的立体画。一、立体画的原理看过立体电影的人都知道,当人的双眼分别接收不同视角拍摄的图像时便会产生立体感。这是由于人眼长期观察的习惯造成的。和立体电影原理一样的立体摄影风景照片也很早就已出现。图1中给出了这种立体照片的示意图。左、右照片分别是人的双眼角度上观察一棱锥体时左右眼看到的图像(图2)。左眼看到的是棱锥的顶端向右错动了一些的图像,右眼的看到那么是棱锥的顶端向左错动了一些的图像。假如用一张硬卡片隔开两张照片(如图3),09A
3、04000.GIF;图109A04001.GIF;图209A04002.GIF;图3双眼分别看两张画,会看到一个立体的棱锥体。这种立体照片的观察方法在测绘学中也早已采用。但是,目前的三维立体画在形式上与这些很不一样。它是怎样在同一张画面上呈现立体的呢?首先,分析一下人们是怎样从这些立体画中看出“立体形体的。从前面所说的可以知道,人眼要得到立体感,双眼必须有视差,即双眼看到的图像应该有差异。人们在看立体画时,都有“恍惚一下的过程。在这过程中,双眼的视中心发生了错动(如图4)。这样09A04003.GIF;图4左眼看到的是画面的“偏左像,右眼看到的是画面的“偏右像。只要“偏左像和“偏右像的内容相当
4、于图1的左、右照片,双眼就会感到立体形体。那么,能否把图1的左、右照片分别当做“偏左像和“偏右像,简单重叠来得到立体画呢?显然不行。可以合成立体画的“偏左像和“偏右像是要满足一定条件的。假如图5中表现的棱锥体的外表上有图案的话,09A04004.GIF;图5像素a和像素a应该具有一样的颜色,因为它们是从不同视角观察的同一个实体点。像素b和像素b、像素和像素的情况与此一样。把两幅画分别当作“偏左图和“偏右图,部分重叠成为同一画面时,在新的画面上这种关系仍应该表现为a=a,b=b,=(如图6)。但这时应该注意到,在这张合成09A04005.GIF;图6画面上,点a既是“偏右图上的点a,又是“偏左图
5、上的点b。而一张画面上一样坐标点的像素只可能是一种颜色,因此,产生了新的像素关系a=b。另外,点a既是“偏左图上的点a,又是“偏右图上的点,所以,a=。以此类推,点b和点也有类似的情况。因此出现了新的关系表示式,.=a=a=b=b=.。这就构成了立体画面上像素必需要满足的条件:“等颜色像素链。立体画上的所有点都附属于某一条“等颜色像素链。这就是所有立体画图案都呈现出某种程度上的程度周期性的原因。因此,对于任意立体形状,只要构造出相应的这种“等像素链,并按其规律充填图案即可得到立体画。但是正如前面所述,由于这种“等像素链条件的约束,人们虽然可以随意构造出各种形体的立体画,但其立体形体的外表图案是
6、不能完全随人意愿的。二、制作立体画的计算机程序由于人的双眼的程度性,以上的“等像素链只按程度方向分布,与垂直方向无关。因此,在程序中,各个像素行的处理过程是互相独立的。制作立体画的程序主构造图如图7。09A04006.GIF;图7制作立体画的程序主构造图在以上构造图中,关键是如何建立“等像素链。详细的处理如下。对于立体形体上的每一个点,首先求出该点在“偏左图和“偏右图上的坐标。以图1中的棱锥顶点为例,实际上其X坐标是在中心点,但由于双眼的位置并不在其正上方,顶点在“偏左图上向右位移,在“偏右图上向左位移,而且其位移值的大小显然与其高度有关,即该点坐标越高位移值就越大。a,b,等点也都有这些位移
7、。在求出一个点在“偏左图和“偏右图上的坐标后,再算出在合成图(如图6)上的对应坐标,以建立“等像素关系,如a=a。当立体形体的一个程度剖面上的全部点经过以上处理后,合成图的各条“等像素链关系也就自然形成了。另外,由于有可能出现高点遮盖低点的情况,“等像素链的构造应该从低点到高点逐层进展,高点的“等像素关系将替代低点的“等像素关系。这也是程序主构造图中“首先,对于没有任何形体存在的背景平面构造等像素链的原因。下面给出了根据以上构造图用语言编写的源程序。程序中,每一个坐标点对应一个构造型数据,它包含“前像素、“后像素两个指针。“前像素指针指向该坐标点作为“偏右图上的一点,在“偏左图所对应的点的坐标
8、。“后像素指针指向该坐标点作为“偏左图上的一点,在“偏右图所对应的点的坐标。程序中,“立体形体程度剖面的上下坐标数据、“原始图案素材和输出的“立体画的文件格式都是采用了inds3.1的Pbrush产生的BP图形文件格式。图幅大小要求都是640400,用16种颜色方式。其中,立体形体上各点的上下坐标用图形文件中的颜色值表示,因此该图形文件的图形与带颜色的等高线图平安一样。通常情况下,在16色的BP文件中颜色值从小到大的顺序为:黑色、暗红色、暗绿色、暗黄色、暗蓝色、暗紫色、暗青色、暗灰色、灰色、明红色、明绿色、明黄色、明蓝色、明紫色、明青色、白色。本程序采用最简单的“图案充填方案,即各条“链上的像
9、素点皆采用该“链上的第一个像素的颜色。程序中的常数EYE-SPAE表示“偏左图和“偏右图之间的偏向,B-DT是说明“链的首或尾的指针标志。该程序寄生在inds3.1中的Pbrush软件上。借助于它来构筑立体形体(即立体形体程度剖面上下坐标数据文件图8),设计原始图案(图9)。程序运行后,逐行输入并处理以上两个文件中的图形,然后输出立体画结果文件(图10)。最后,用Pbrush来欣赏立体画result.bp。unsignedintbfReserved1,bfReserved2;/*settzer*/unsigedlngintbfffits;/*byteffsetfrBITAPFILEHEADER
10、tbitappixeldatainthefile*/BITAPFILEHEADER;struttagBITAPINFHEADERunsignedlngintbiSize,/*sizefBITAPINFHEADER*/biidth;/*idthinpixelsbiHEight;/*heightinpixels*/unsignedintbiPlanes,/*alays1*/biBitunt;/*lrbitsperpixelustbe1,4,8r24*/unsignedlngintbipressin,/*BI-RGB,BI-RLE8r4*/biSizeIage,/*ttalbytesiniage*/
11、biXPelsPereter,/*0,rpt,hres.*/biYPelsPereter,/*0,rpt,hres.*/bilrUsed,/*nrally0,ansetalern.lrsthanbiBitunt*/bilrIprtant;/*nrally0*/BITAPINFHEADER;struttagRGBQUADunsignedharrgbBlue,/*blueintensity,0-255*/rgbGreen,/*greenintensity,0-255*/rgbRed,/*redintensity,0-255*/rgbReserved;/*reserved,settZer*/RGBQ
12、UADNU-LR;har*fn-layer=layer.bp;har*fn-rg=rigin.bp;har*fn-result=result.bp;FILE*flayer,*frigin,*fResuunsignedhartp-byte1,tp-byte2;unsignedintline,i-byte,i-pixel,x;unsignedintlayer;intleft-x,right-x;tp-x;unsignedlngintur-ffset;unsignedharhIDTH,rg-lrIDTH;puts(-INTRIK-);puts(-byLiJisng-);if(fLayer=fpen(
13、fn-layer,rb)!=NULL)fread(BITAPFILEHEADER,SIZE-F-BITAPFILEHADER,1,fLayer);fread(BITAPINFHEADER,SIZE-F-BITAPINFHEADER,1,fLayer);if(BITAPFILEHEADER.bfType1=BBITAPFILEHEADER.bfType2=BITAPINFHEADER.biidth=IDTHBITAPINFHEADER.biHeight=NU-LINEBITAPINFHEADER.biBitunt=BITS-PER-PIXELBITAPINFHEADER.bipressin=PR
14、ESSIN)fread(RGBQUAD,SIZE-F-RGBQUAD,NU-LR,fLayer);elseflse(fLayer);printf(File%sisntfitfrthisprgra!n,fn-layer);geth();exit(1);elseprintf(File%sdesntexist!n,fn-layer);geth();exit(2);if(frigin=fpen(fn-rg,rb)!=NULL)fread(BITAPFILEHEADER,SIZE-F-BITAPFILEHEADER,1,frigin);fread(BITAPINFHEADER,SIZE-F-BITAPI
15、NFHEADER,1,frigin);if(BITAPFILEHEADER.bfType1=BBITAPFILEHEADER.bfType2=BITAPINFHEADER.biidth=IDTHBITAPINFHDADER.biHEight=NU-LINEBITAPINFHEADER.biBitunt=BITS-PER-PIXELBITAPINFHEADER.bipressin=PRESSIN)fread(RGBQUAD,SIZE-F-RGBQUAD,NU-LR,frigin);elseflse(frigin);printf(File%sisntfitfrthisprgra!n,fn-rg);
16、geth();exit(3);elseprintf(File%sdesntexist!n,fn-rg);geth();exit(4);if(fResult=fpen(fn-result,b)!=NULL)frite(BITAPFILEHEADER,SIZE-F-BITAPFILEHEADER,1,fResult);frite(BITAPINFHIADER,SIZE-F-BITAPINFHEADER,1,fResult);frite(RGBQUAD,SIZE-F-RGBQUAD,NU-LR,fResult);elseprintf(File%spenerrr!n,fn-result);geth()
17、;exit(5);fr(line=0;lineNU-LINE;line+)printf(line=%dn,line);ur-ffset=(unsignedlngint)PIXEL-DATA-FFSET+(unsignedlngint)BYTE-PER-LINE*line;fseek(fLayer,ur-ffset,SEEK-SET);fseek(frigin,ur-ffset,SEEK-SET);fr(i-byte=0;i-byteBYTE-PER-LINE;i-byte+)fread(tp-byte1,1,1,fLayer);fread(tp-byte2,1,1,frigin);fr(i-p
18、ixel=0;i-pixelPIXEL-PER-BYTE;i-pixel+)x=i-byte*PIXEL-PER-BYTE+i-pixel;if(xIDTH)hx=(unsignedhar)(tp-byte1(BITS-PER-PIXEL*i-pixel)/(unsignedhar)0 x80(BITS-PER-PIXEL-1);rg-lrx=(unsignedhar)(tp-byte2(BITS-PER-PIXEL*i-pixel)/(unsignedhar)0 x80(BITS-PER-PIXEL-1);fr(x=0;xIDTH;x+)dtx.lr=0;dtx.nxt-x=N-DT;dtx.pri-x=N-DT;if(x+EYE-SPAE)IDTH)dtx.nxt-x=x+EYE-SPAE;if(signed)x-EYE-SPAE)=0)dtx.pri-x=x-EYE-SPAE;fr(layer=1;layerNU-LR;layer+)fr(x=0;xIDTH;x+)left-x=x-EYE-SPAE/2+(layer/2);right-x=x+EYE-S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州万山宏鑫环保科技有限责任公司临聘人员招聘8人备考核心试题附答案解析
- 2025中国农业科学院饲料研究所家禽营养与饲料创新团队科研助理招聘1人参考题库附答案
- 2025内蒙古通辽科尔沁左翼中旗消防救援大队招聘政府专职消防员30人备考题库附答案
- 2025海南海口市教育局冬季赴高校面向2026应届毕业生招聘教师(第一号)备考核心试题附答案解析
- 2025年甘肃省武威市凉州区永丰镇招聘专业化管理大学生村文书考试重点试题及答案解析
- 合肥市蜀山区2025年网格员考试题库及答案
- 2025广西南宁市兴宁区虹桥路幼儿园招聘1人备考核心题库及答案解析
- 赣州市人力资源有限公司招聘劳务外派工作人员备考核心试题附答案解析
- 2025年度大学生诚信教育助学贷款知识竞赛题库及答案
- 2025年职业卫生考试试题库及答案
- 通信基站施工进度施工工期保证措施
- 钻孔桩安全技术
- 2025年《社区警务工作规范(试行)》复习测试卷附答案
- 2025秋初中数学九年级上册(沪科版 安徽专用)上课课件 21.4 第3课时 用二次函数解决抛物线形运动问题
- 2021年12月大学英语四级考试真题及答案(第1套)
- JG/T 387-2012环氧涂层预应力钢绞线
- 注塑模具备用件管理制度
- 2024年南昌大学第二附属医院招聘笔试真题
- 甲流儿童预防
- 工业机械之光
- 清华大学《工程伦理》网课习题及期末考试答案
评论
0/150
提交评论