中期报告虚拟漫游系统.docx
- 文档编号:26854222
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:30
- 大小:1.13MB
中期报告虚拟漫游系统.docx
《中期报告虚拟漫游系统.docx》由会员分享,可在线阅读,更多相关《中期报告虚拟漫游系统.docx(30页珍藏版)》请在冰豆网上搜索。
中期报告虚拟漫游系统
1、已完成的设计研究工作及取得的初步成果
1.1虚拟漫游系统的分析和框架设计
1.1.1市场需求分析
随着住房制度改革的进一步深入,房地产日益成为人们消费和投资的热点,房地产市场也日益活跃起来。
面对种类繁多的物业和错综复杂的房地产市场,不仅消费者们常常感到无从选择,房地产开发商也苦于思索更新、更好的营销模式,以便于更好、更快的推广自己的产品。
但是传统的房地产营销模式只是发放一些简单的宣传画册或是在一些重要的地段投放广告。
面对日益庞大的房地产市场,这些显然不能起到显著的效果。
为此,建立基于虚拟现实的房地产展示系统是非常可行的。
传统的房地产营销模式主要分为以下三种:
第一种,房地产开发商只用二维图形方式表示房地产的位置和结构,主要包括开发商制作房屋的平面结构图和效果图、制造楼盘的简单模型、印制宣传手册或是在一些重要的地段投放平面广告等。
但这些广告无论再好,都只是一些二维图形,其数据简单、信息含量少、缺乏关联性,因此其在空间表现能力和分析能力有很大的局限性。
第二种,为了克服这方面的缺陷,许多人采用了三维动画的方式进行房地产的三维展示,但是这种方式只适合简单的演示功能,并且场景画面是由动画制作人员根据材料或想象直接画制而成,和真实的环境和数据有较大的差距,属于演示类艺术作品。
而且只能如电影一样单向演示,场景变化,画面需要事先制作生成,耗时、费力、成本较高。
第三种,有些开发商也运用了计算机和网络进行房地产信息的发布和宣传,现在大部分的房地产开发商拥有自己的网站或是一套营销系统,但是这些网站或系统只能发布一些单纯的文字信息或简单的动画,不能直观而又动态的描述消费者所要了解的房源信息。
然而,采用虚拟现实技术(VR)可以解决这些问题,而且,房地产虚拟漫游系统将文字、声音、二维图形图像、三维动画结合,客户不仅可以从任意角度来观察建筑物的效果,还可以按自己选择的任意路径进行漫游,以了解楼盘的布局和周围的环境。
其促销效果之佳,是传统销售楼宇和营销模型无法相提并论的。
在房地产领域,传统的规划和管理手段已不适应城市飞速发展的需要。
为此,要适应现代城市发展的客观要求在房地产建设管理和规划中必须寻求新技术、新方法。
随着计算机技术和测绘技术的不断发展和进一步的结合,虚拟现实技术得到了很大的发展,三维虚拟现实技术以及三维景观建模技术得到了广泛关注,并已成功地运用到城市管理、环境保护、项目展示等众多领域。
虚拟现实技术使人们能在虚拟的环境中通过动态交互方式对整个建筑的外部及其内部进行全方位的观察,并且能感受到建筑的真实空间感,以及大面积三维仿真地形,因此它在GIS、城市规划、土地管理越来越多的领域中得到了广泛使用。
并且,对于大型房地产项目而言,它的投入大,要求高,因此,可以借助于VR技术对房地产项目的方案进行更为直观地推敲。
投资商可通过亲身感受,评估各方案的特点和优劣,以便做出最佳的方案决策,不但可以避免决策失误,而且可以大大提高该房地产的项目潜在市场价值,从而提高土地资源利用效率和项目开发成功率,保护投资。
可以相信,虚拟漫游系统技术这一全面直观的新型房地产展示模式,必将为各类楼盘的展示和营销带来震撼人心的巨大魅力。
1.1.2系统需求分析
设计一个展示房地产的虚拟漫游系统,主要从三维场景建模和构建三维仿真环境两个方面来考虑。
即在计算机中,按实际的尺寸将环境中的主要的建筑物建造起来,构成一个虚拟场景,包括地形、建筑物、主要视觉模型等。
然后构建三维仿真环境,即完成对三维仿真控制的设计,对物体进行各种操作,漫游方式(包括步行漫游和鸟瞰漫游)的设定和实现。
三维场景操作,包括场景放大、缩小、移动、旋转等所建三维场景可以任意放大、缩小。
三维场景的移动漫游功能除了传统GIS的二维(X、Y轴)漫游外,还可以在第三维模型中漫游:
如果使用了带有滚轮的鼠标,可以通过鼠标上的滚轮在三维视图上进行Z轴上的漫游。
三维场景的旋转可是真正意义上的三维旋转,选择旋转功能后在二维/三维视图上按下鼠标左键并拖动,即可改变人眼观察的方位角度(0°至360°),也实现了场景的旋转(并不改变场景中对象的实际坐标值)。
如果使用了带有滚轮的鼠标,还可通过鼠标上的滚轮改变人眼的俯视角度(-90°至90°)。
键盘操作控制漫游,可以通过设定键沿任意路线、任意方向前进、后退,并可实时改变视角、视野、视距、角度和高度等。
任意给定路线的实时漫游,可任意指定一条已有的地形线或注记线,也可根据自己的需要沿特定线路绘制一条注记线或地形线,选定后启用该功能即可沿指定线路虚拟漫游。
系统具体实现过程如下:
1.规划重建对象:
了解研究区域概况,明确所要达到的仿真目标,并选定实时系统的硬件环境和软件平台。
2.准备数据:
采用多种数据获取手段收集建立虚拟房地产场景所必需的地物、建筑特征数据和纹理数据等,并对其进行必要的数据处理(如格式转换、图像处理等)。
3.建立地形模型:
使用采集的三维数据创建地形模型,映射纹理和其他特征数据。
并在实时系统平台上对其进行显示测试。
4.添加地物模型:
向地形模型场景中添加各种地物模型以丰富虚拟地理环境的视觉效果。
5.模型数据库优化:
为了获得更好的运行性能,应减少多边形的数量并重新组织模型数据库的层级关系。
6.在MicrosoftVisualC++6.0编程环境下,利用VC++代码驱动,生成使用程序定义文件,最后设定漫游方式,实现对房地产虚拟漫游系统的交互。
1.1.3基本框架设计
在房地产的虚拟漫游系统中,其技术的核心是通过计算机产生一种如同“身临其境”的三维空间环境,而且使操作者能够进入该环境,直接观测和参和该环境中事物的变化和相互作用,主要是由3dsMax、OpenGL和VC++6.0软件共同设计完成。
虚拟漫游系统是人产生“身临其境”的感觉,因为所看到的形象会随着视点的变化即时变化,从而更增强了临境感。
从技术的角度来说明这种适用于人的信息环境的特点,下面,用一个“灵境技术的三角形”,较简洁的说明虚拟漫游系统的基本特征,即三个“I”,它们是Immersion-Interaction-Imagination(沉浸-交互-构想)。
如图1.1所示。
图1.1虚拟现实的三个“I”特性
以往的三维场景建立往往都是纯粹通过3dsMax等软件构建的,而且三维浏览也是全采用3dsMax制作的简单动画。
而该系统凭借VC++平台,借助OpenGL进行三维建模,建立的三维场景中的各种地物都有其相应的空间地理属性,而绝非像在3dsMax中是直接简单的把三维模型组合在一起。
其漫游实现的机理如图1.2所示。
图1.2漫游实现的机理
开发房地产虚拟漫游系统的主要目的是方面客户买房和提高房地产的项目潜在市场价值,保护投资。
它的技术采用模型和使用者的假设关系如图1.3所示。
图1.3技术采用模型及假设关系
以3dsMax为操作平台,该系统具体的三维造型设计流程如图1.4所示。
图1.4三维造型设计流程图
从根本上说,OpenGL是一种过程语言而非描述性的语言,它独立于窗口系统和操作系统,以它为基础开发的使用程序可以十分方便地在各种平台间移植。
它可以和VC++紧密接合,保证算法的正确性和可靠性。
OpenGL提供了直接控制二维和三维几何体的基本操作,其基本的操作顺序如图1.5所示。
图1.5OpenGL的基本操作
房地产虚拟漫游系统的场景构建如图1.6所示。
图1.6系统场景构建图
1.2虚拟漫游系统的开发平台环境配置
1.2.1Autodesk3dsMax开发平台环境配置
安装步骤:
(1)打开3dsMax2010的安装包,双击setup.exe,选择安装产品,接受协议,填写完信息后如图1.7所示。
图1.73dsMax2010安装
(2)安装完产品后,双击Autodesk3dsMax快捷方程式,选择激活产品,在注册机上获取激活码后,确认激活,如图1.8所示。
图1.8注册框
图形驱动设置:
运行Autodesk3dsMax,选择【自定义】→【首选项】→【视口】→【选择驱动程序】→【从Direct3D回到上一界面】,图形驱动程序设置项选择OpenGL项,点击确定,如图1.9所示。
图1.9图形驱动程序设置
1.2.2VisualC++6.0的配置
VisualC++6.0的安装
1VisualC++6.0的安装步骤如下:
打开VisualC++6.0的安装包,双击SETUP.EXE,选择接受协议,填写完信息如图1.10所示。
图1.10安装向导
2选定存储路径后,选择Typical安装方式,如图1.11所示。
图1.11安装过程
③点击确定,安装就完成了。
创建VisualC++程序
建立一个程序,首先启动VisualC++6.0程序。
1选择菜单【文件】→【新建】,在弹出的对话框中选择标签工程,再选中MFCAppWizard(exe);在工程名称栏中录入“虚拟漫游系统”,在位置栏中选择目录。
其他设置默认选择。
单击确定按钮。
经过上述5步骤完成初步设置,如图1.12所示;
图1.12新建对话框
2显示步骤1对话框。
选择单文档,在单击文本框的下箭头,在下拉选单中选择“中文[简体,中国][APPWZCHS.DLL]”。
其他设置为默认选择。
再点击下一步按钮,完成第一步设置如图1.13所示;
图1.13步骤1对话框
③显示步骤2对话框。
选择单选项否,保持其他默认设置再单击下一步,完成第二步设置;
④显示步骤3对话框。
选择单选项“没有,不需要”和复选项“ActiveX控件”,再单击下一步按钮,完成第三步设置;
⑤显示步骤4对话框,选择复选项“隐藏工具栏”、“初始化状态栏”、“打印和打印浏览”、“3D外观”,样式为“普通”,单击下一步;
图1.14信息对话框
⑥显示步骤5对话框。
选择默认设置,单击下一步按钮,完成第五步设置;
⑦显示步骤6对话框。
保持缺省设置,单击完成按钮;
⑧显示项目信息对话框。
单击完成按钮完成全部设置,如图1.14所示。
1.2.3OpenGL的基础库设置
(1)更改头文件:
打开VisualC++程序工作区FileView页面,显示HeaderFiles的所有文件,在“虚拟漫游系统View.h”文件的程序前加上以下语句:
////////////////////////////////////////////////////////////////////////
#include"gl\gl.h"
#include"gl\glu.h"
////////////////////////////////////////////////////////////////////////
点击保存按钮,如图1.15所示。
图1.15更改文件
(2)改程序为静态库运行方式:
单击VisualC++程序菜单【工程】→【设置】→【常规】,单击Microsoft基础类的下箭头,选择“使用MFC作为静态链接库”;
(3)连接OpenGL库文件:
在上一个打开的ProjectSettings窗口中单击【连接】,打开链接页面,添加两个OpenGL库文件(OpenGL32.Libglu32.lib)到Object/Librarymodules栏中,单击完成确定设置完成,如图1.16所示。
图1.16设置链接库
1.3房地产虚拟漫游系统的详细设计
1.3.1三维模型的创建
Autodesk3dsMax的操作界面由菜单栏、视图区、透视图区、工具栏、命令面板、动画控制区和视力控制区几部分构成。
本次室内模型设计以客厅为主,构建房屋首先要进行的是的墙体的制作,其实是家具的制作,接着是合成对象,最后进行总体修饰和渲染,具体设计步骤如下:
(1)制作墙体:
1启动3dsMax,新建一个场景;
图1.17部分墙体效果图
2单击“几何体”面板中的“标准基本体”,从弹出的下拉列表中选择“AEC扩展”类型,单击墙,并在“参数”卷展栏中设置墙的宽度(厚度)和高度;③输入X、Y、Z的轴值分别为4500、6000、0,单击“添加点”确定墙体的点位。
创建一个长方体作为地板,复制一个长方体作为天花板,如图1.17所示。
(2)制作吊顶
1在顶视图中,在之前绘制的地板内绘制一个5000*3000的矩形,选中之前绘制的图形,右击鼠标,从弹出菜单上选中“附加”命令,再单击内部的矩形,将二者结合成一个对象;
2对结合后的图形施加“挤出”修改器,“数量”即吊顶板的厚度设定为60,移到天棚下面60处;
3附上材质后,渲染场景,如图1.18所示。
图1.18吊顶效果图
(3)制作地毯
1创建一个平面,切换到前视图,为避免地毯和地板处于同一高度产生错误的渲染效果,将代表地毯的平面上移一个单位(即1mm);
2编辑地毯材质。
对于表面不是很光滑的布料,使用标准材质中的Oren-Nayar-Blinn明暗器来表现,然后漫反射通道制定地毯的图片“斑点.jpg”,将布的粗糙度提高到100,点击Standard按钮,将标准材质转换为高级照明覆盖材质,并设反射比为0.7,颜色溢出为0.25,生成地毯如图1.19所示。
图1.19地毯效果图
(4)制作茶几
1在顶视图中绘制一个长方体,赋予木纹材质,制成茶几面;
2在长方体的四角创建4个半径18mm,高度150mm相同的圆柱体作为桌脚,再以同样的方法做4个相同的圆柱,和桌脚合并成完整的桌腿,将它们都赋上金属材质;
3将茶几面和桌腿合并成一体,放置在地毯上,如图1.20所示。
图1.20茶几效果图
(5)用同样的方法完成其他家具的设计,把它们成套合并,放置在适当的位置,添加灯光效果后室内的效果如图1.21所示。
图1.21模型效果图
1.3.2三维模型的导出
对于三维图形数据模型,有很多软件提供了读取其他格式的能力,不仅能够实现提供格式转化的功能,还包括建模和绘制等功能。
VisualC++6.0是不能直接采用模型的.max格式的。
如果想要作用于模型,就要将模型从Autodesk3dsMax软件中导出为.3DS格式,它能将三维图形数据文件转化成用它们进行绘制OpenGL的C语言源程序。
美中不足的是,对于3ds等模型存储的数据,它只能保存和转换几何信息,材质等信息则在转换时全部丢失。
具体的导出模型方法是:
在菜单栏中,选择导出,保存类型设置为.3DS,找到需要导入的.3DS文件后,选择路径,点击保存就完成模型的导出了。
1.3.3在OpenGL中读取3DS模型文件
以3DS格式保存的三维图形文件非常丰富,读取和操作3DS文件对于建立比较实用的三维图形使用软件显得非常重要。
程序中共用到3种主要的数据结构:
顶点集(Vertices)、多边形列表(PolyList)、和相关三角形列表(CommonTriangleList)。
顶点集(Vertices)是顶点及其法向量的列表,多边形中的顶点将用在下标表示,OpenGL将这个数组视为一个顶点数组(vertexarray)。
这里存储的法向量是每一个顶点的法向量,而不是多边形的法向量。
多边形列表(PolyList)包括一系列的材质,一个材质由这样一组属性构成:
漫反射颜色、光照度和纹理映射等。
和每一种材质相对应是一组三角形,每个三角形由一个三元整数组表示,它们分别是三角形每个顶点在顶点集中的下表。
本次设计读取3DS文件到图形数据结构中所设计的部分重要代码如下:
//从文件中读入len个字节的数据到dest指针指向的内存中
voiddread(void*dest,intlen)
{
if(fread(dest,len,1,InFile)!
=1)
longjmp(EnvState,1);
}
//将文件指针移到指定的位置
voiddsetpos(dwordpos)
{
if(fseek(InFile,(long)pos,SEEK_SET)!
=0)
longjmp(EnvState,1);
}
//找到文件当前位置
dworddgetpos(void)
{
longpos;
if((pos=ftell(InFile))==-1L)
longjmp(EnvStates,1);
return(dword)pos;
}
//安全地分配一定大小的内存
void*getmem(intsize)
{
void*mem;
if((mem=malloc(size))==0)
longjmp(EnvStates,1);
returnmem;
}
//扩大scene数组,以装入新的形体(Mesh)对象
H3dsMeshObj*EnlargeMeshArray(void)
{
void*mem;
H3dsMeshObj*obj;
if((mem=realloc(scene->meshobjlist,sizeof(H3dsMeshObj)*(scene->meshobjs+1)))==0)
{
printf("Errorreallocatingmem\n");
longjmp(EnvStates,1);
}
scene->meshobjlist=(H3dsMeshObj*)mem;
obj=&scene->meshobjlist[scene->meshobjs++];
memset(obj,0,sizeof(H3dsMeshObj));
returnobj;
}
//扩大scene数组,以装入新的材质(Mat)
H3dsMat*EnlargeMatObjArray(void)
{
void*mem;
H3dsMat*obj;
if((mem=realloc(scene->material,sizeof(H3dsMat)*(scene->NumMaterials+1)))==0)
{
longjmp(EnvStates,1);
}
scene->material=(H3dsMat*)mem;
obj=&scene->material[scene->NumMaterials++];
memset(obj,0,sizeof(H3dsMat));
returnobj;
}
//读入当前形体对象顶点列表。
3DS文件顶点的定义:
由一个表示顶点数目的整型数开始,接着是相应数目的顶点定义信息,每个顶点由3个浮点数分别表示其3个坐标。
voidReadVertList(H3dsMeshObj*meshobj)
{
wordnv;
intn;
dread(&nv,sizeof(nv));
meshobj->NumVerts=nv;
meshobj->vertlist=(H3dsVert*)getmem(sizeof(H3dsVert)*nv);
for(n=0;n { dread(&meshobj->vertlist[n].x,sizeof(float32)); dread(&meshobj->vertlist[n].y,sizeof(float32)); dread(&meshobj->vertlist[n].z,sizeof(float32)); } } //读入当前形体对象的面列表(三角形列表)。 在3DS中定义的每一个面都是三角形,每个三角形由它的3个顶点的序号以及一个面信息(标识)组成。 文件中第一项是三角形的数目,其后跟相应数目的三角形定义数据(包括3个顶点的序号和标识顶点顺序的面信息),面信息中包括3个顶点的顺序。 程序如下: wordReadFaceList(H3dsMeshObj*meshobj) { wordnv; wordswap; intn; dread(&nv,sizeof(nv)); meshobj->NumFaces=nv; meshobj->facelist=(H3dsFace*)getmem(sizeof(H3dsFace)*nv); for(n=0;n { dread(&meshobj->facelist[n].p0,sizeof(word)); dread(&meshobj->facelist[n].p1,sizeof(word)); dread(&meshobj->facelist[n].p2,sizeof(word)); dread(&meshobj->facelist[n].flag,sizeof(word)); if(meshobj->facelist[n].flag==0x07) { swap=meshobj->facelist[n].p1; meshobj->facelist[n].p1=meshobj->facelist[n].p2; meshobj->facelist[n].p2=swap; } } return(nv); } //读入当前形体对象的纹理映射坐标 voidReadMapList(H3dsMeshObj*meshobj) { wordnv; intn; dread(&nv,sizeof(nv)); meshobj->NumMaps=nv; meshobj->maplist=(H3dsMap*)getmem(sizeof(H3dsMap)*nv); for(n=0;n { dread(&meshobj->maplist[n].u,sizeof(float32)); dread(&meshobj->maplist[n].v,sizeof(float32)); } } //读入当前形体对象的平移矩阵 voidReadTraMatrix(H3dsMeshObj*meshobj) { inti; for(i=0;i<12;i++) dread(&meshobj->TraMatrix[i],sizeof(float32)); meshobj->matrix=1; } //为多边形指定块中的材质 voidReadFaceMaterial(H3dsMeshObj*meshobj) { wordnf; wordface; charname[50]; H3dsMatList*binding; intn; binding=EnlargeBindingsArray(meshobj); n=0; do { dread(&name[n++],1); } while(name[n.1]! ='\0'&&n name[n.1]='\0'; strcpy(binding->name,name); dread(&nf,sizeof(nf)); binding->NumFaces=(int)nf; binding->faces=(word*)(malloc(sizeof(face)*nf)); for(n=0;n { dread(&face,siz
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中期 报告 虚拟 漫游 系统