使用 OpenGL 来开发模型编辑器

使用 OpenGL 来开发模型编辑器
使用 OpenGL 来开发模型编辑器

1 前言:

在计算机图形图像处理中,由于OpenGL库带来的便利,使得其取得了越来越广泛的应用.本文旨在通过一个小的应用实例,介绍了OpenGL的基本编程思路, 希望这些知识和经验能有助于OpenGL的推广。

2 OpenGL简介:

OpenGL(Open Graphics Library)是独立于操作系统和硬件环境的三维图形软件库. 由于其开放性和高度的可重用性,目前已成为业界标准. 很多优秀的软件都是以它为基础开发出来的,象著名的产品有动画制作软件3DMAX ,Soft Image,VR软件和GIS软件等等。

OpenGL认可开发人员对真实世界中的二维图形和三维几何物体的描述,而且将这些几

何形体绘制到三维图形加速卡的帧缓存中,可用一个简单的工作流程图来描述OpenGL的工作原理,如图2所示。

图像像素像素操作光栅化评价器顶点操作几何物体顶点显示列表纹理存储器基本操作帧缓存器

图2 OpenGL工作流程

2.1 OpenGL的主要功能有:

1)几何建模:在OpenGL中提供了绘制点,线,多边形等基本形体的函数,还提供了绘制复杂三维曲线,曲面(如Bezier,Nurbs等)和三维形体(如球,锥体和多面体等)的函数.由于OpenGL是以顶点为图元,由点构成线,由线及其拓扑结构构成多边形.所以应用这些建模函数,可构造出几乎所有的三维模型。

2)坐标变换:包括取景变换,模型变换,投影变换和视区变换。

3)颜色模式设置:RGBA模式和颜色索引模式。

4)光照和材质设置:可设置四种光,即辐射光,环境光,镜面光和漫反射光.材质用模型表面的反射特性表示。

5)图像功能:提供像素拷贝和读写操作的函数,还提供了反走样,融合和雾化等,以增强图像效果

6)纹理映射:OpenGL的纹理映射功能可十分逼真地再现物体表面的细节。

7)实时动画:利用OpenGL的双缓存(Double Buffer)技术可获得平滑逼真的动画效果。

8)交互技术:方便的三维图形交互接口(选择,拾取,反馈),可进行人机交互操作。

2.2 Win32下OpenGL的运行机制:

由于OpenGL的作用机制是客户(Client)服务器(Server)机制,由客户(用OpenGL 绘制图形的应用程序)向服务器(OpenGL内核)发送OpenGL命令,服务器则负责解释这些命令。在多数情况下,客户和服务器在同一机器上运行,当然,也可以在网络环境下使用,所以OpenGL具有网络透明性,与在Win32下的图形设备接口(GDI)把图形函数库封装在动态的连接库GDI32.DLL内一样,OpenGL的图形库也被封装在一个动态连接库opengl32.dll 内。从客户应用程序发布的对OpenGL函数的调用首先被opengl32.dll处理,然后传送给服务器后,被Winsrv.dll进一步处理,再传给Win32设备驱动接口(DDI),最后把处理过的图形命令送给视频显示驱动程序。图2.2显示了整个处理过程。

客户应用程序

OpenGL DLL Win32.DDI 视频驱动程序OpenGL命令

图2.2 OpenGL在Windows 环境下的运行机制。2.3 OpenGL函数及结构

下面以Microsoft的Windows95(98)为支撑平台,说明OpenGL函数及结构。

1)OpenGL核心函数

OpenGL核心函数有100多个,每个函数以gl开头。这些函数是最基本的,可运行于任何的工作平台。可用这些函数创建二维和三维几何形体,设置视点,建立视觉体,设置颜色及材质,建立灯光,进行纹理映射等。

2)OpenGL实用库函数OpenGL实用库函数以glu开头。这些函数是基于核心函数的,提供对辅助函数特性的支持,并且执行了核心的OpenGL交互,因而是比核心函数更高一层的函数,也更具有通用性。

3)辅助库函数辅助库函数有31个,这些函数以aux开头。主要是帮助初学者尽快进入编程而做简单练习之用。

4)Windows专用函数这些函数以wgl开头,是用于连接OpenGL和Windows窗口系统的。用它们可以管理着色描述表(Render Context)及显示列表(Display List),扩展功能,管理字体位图等。

5)Win32 API函数共6个函数,用于处理像素格式及缓存。ChoosePixelFormat DescribePixelFormat ……

6)OpenGL结构共有4个,列举如下:GLYPHMETRICSFLOA T LAYERPLANEDESCRIPTOR PIXELFORMA TDESCRIPTOR POINTFLOA T

3 VC环境下的实现背景:对三维物体进行可视化编辑,即增删改点,面操作.模型为用VRML表示的一个人头像.流程:数据准备à初始化绘制环境à模型的绘制à交互操作,点和面的编辑à导出数据

3.1 数据准备

1) 从指定的VRML文件中手工挑选出组成各个特征的点数据及面数据,处理后存为input.dat文本文件,点由三维坐标表示,面则统一为三角型面片,由三个点索引组成,格式如下:

##V ertex//点数据,点的三维坐标;

#skin//特征名称;

0.0000 -31.9007 487.6600//点坐标

31.0000 -28.3430 470.4640

63.0000 -29.9017 455.9880

……

#facet//面数据,相关点的索引;

#skin//特征名称;

0 1 16//点的索引;

1 15 16

16 15 13

……

其中特征分为(skin,tongue,teeth,ear,lip,eye,mouth,nose,eyebrow);

2)从input.dat文件中读入点和面数据,存入程序结构中(PointNode,FaceNode),同时建立图元(点和面)的显示列表,为绘制模型做好准备。

typedef struct pt_node

{

char pZT;//点的状态,(’V’--有效;’I’--无效),为后续编辑作准备;

double pt[3];//点的三维坐标;

}PointNode;

typedef struct fe_node

{

char fZT;//面的状态(’V’--有效;’I’--无效);

int Pt1Index;//面片中第一个V ertex的点索引;

int Pt2Index;//面片中第二个V ertex的点索引;

int Pt3Index;//面片中第三个V ertex的点索引;

}FaceNode;

void CDisplayView::DrawTriangle(int &i, GLdouble pt1[], GLdouble pt2[], GLdouble pt3[]) {//创建三角行面片的显示列表;

CalculateNormal(pt1,pt2,pt3,dNormal);//首先计算该面的法向量;

glNewList(i,GL_COMPILE);//建立第i个显示列表;

glBegin(GL_TRIANGLES);

glNormal3dv(dNormal);//指定该面的法向量为dNormal;

glV ertex3dv(pt1);

glV ertex3dv(pt2);

glV ertex3dv(pt3);

glEnd();

glEndList();

i++;

}

void CDisplayView::DrawPoint(int &n, GLdouble pt[])

{//创建点的显示列表;

glNewList(n,GL_COMPILE);

glBegin(GL_POINTS);

glV ertex3dv(pt);

glEnd();

glEndList();

n++;

}

3.2初始化绘制环境

1)填充PIXELFORMA TDESCRIPTOR 结构。PIXELFORMA TDESCRIPTOR pixelDesc = { ……};//按需要填充适当的值;

2)设置像素格式

m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);

//确定设备上下文(DC)所支持的像素格式中,与给定像素格式描述符最为匹配的像素格式索引值;

if(m_GLPixelIndex ==0)

{

MessageBox(“ChoosePixelFormat failed!”);

return FALSE;//执行失败!

}

if(!SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)) //将设备上下文(DC)中的像素格式return FALSE;//执行失败!设置为索引值m_GLPixelIndex所

指定的格式;

3)创建着色描述表

HWND hWnd = GetSafeHwnd();//得到Windows窗口的窗口句柄;

HDC hDC =::GetDC(hWnd);//得到设备上下文(DC)句柄;

if(MyFunction_SetWindowPixelFormat(hDC)==FALSE)//测试设置像素格式是否正确;

return FALSE;//测试失败;

hglrc = wglCreateContext(hDC);//建立hDC所关联的OpenGL绘图上下文(RC);

if(hglrc == NULL)

return FALSE;//创建失败;

if(wglMakeCurrent(hDC,hglrc)==FALSE)//将一个指定的绘图描述表变为正在调用线程return FALSE;//失败;的当前绘图描述表。

4)对灯光,材质等环境相关参数进行初始化

int CDisplayView::OnCreate(LPCREA TESTRUCT lpCreateStruct)

{

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

……

glPolygonMode(GL_FRONT,GL_FILL);//多边型的正面为填充模式;glPolygonMode(GL_BACK,GL_FILL);//多边形的背面为填充模式;

glShadeModel(GL_SMOOTH);//明暗模式为平滑型;

glEnable(GL_DEPTH_TEST);//使能深度消隐;

glEnable(GL_NORMALIZE);//使能法向量单位化;

glFrontFace(GL_CW);//设置朝向正面的多边型的顶点环绕方向为顺时针方向;

GLfloat ambientProperties[] ={0.15f,0.15f,0.15f,1.0f};//设置环境光分量;

GLfloat diffuseProperties[] ={0.7f,0.7f,0.7f,1.0f};//设置漫反射光分量;

GLfloat specularProperties[] ={0.7f,0.7f,0.7f,1.0f};//设置镜面反射光分量;

GLfloat position[] = {1.0,1.0,-5.0,0.0};//设置光源位置;

glClearDepth(1.0f);//设置深度缓冲的值为1;

//把各光分量的值赋给光源0;

glLightfv(GL_LIGHT0,GL_AMBIENT,ambientProperties);

glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseProperties);

glLightfv(GL_LIGHT0,GL_SPECULAR,specularProperties);

glLightfv(GL_LIGHT0,GL_POSITION,position);

glEnable(GL_LIGHTING);//使能照明效果;

glEnable(GL_LIGHT0);//使能灯光0;

}

5)场景布置

为了将物体放置在场景中合适的位置,需要使用一些OpenGL的变换操作。OpenGL变

换有基本变换和投影变换两种,基本变换是对三维物体进行平移、旋转、缩放等。投影变换则把物体从三维投影到二维。视区则决定物体的投影图像在显示设备中的尺寸和位置。OpenGL中的多数变换均对应于相应的变换矩阵,可以说就是实现将物体的各个顶点通过各种变换矩阵的作用映射到屏幕的过程。根据变化的类型,分为三种矩阵模式,GL_MODELVIEW对应于基本变换,GL_PROJECTION对应于投影变换,GL_TEXTURE对应于纹理矩阵类型。具体应用见小节1,小节2。

1.对几何造型初始化

void CDisplayView::InitGeometry()

{//x,y,z方向的默认旋转角度;

m_xRotate = 0.0f;

m_yRotate = 0.0f;

m_zRotate = 0.0f;

//x,y,z方向默认的平移大小;

m_xTrans = 0.0f;

m_yTrans = -0.5f;

m_zTrans = -3.5f;

//x,y,z方向默认的缩放大小;

m_xScaling = 1.0f;

m_yScaling = 1.0f;

m_zScaling = 1.0f;

}

2.设置透视投影变换和视区

void DisplayView::OnSize(UINT nType, int cx, int cy)

{

CView::OnSize(nType, cx, cy);

GLint w=cx;

GLint h=cy;

glViewport(0,0,w,h);//设置视区;

glMatrixMode(GL_PROJECTION);//表明下面的矩阵操作是关于投影变换矩阵的;glLoadIdentity();//单位阵作为当前矩阵;

gluPerspective(60.0,h/w,1.0f,128.0);//设置透视投影矩阵;

glMatrixMode(GL_MODELVIEW);//表明下面的矩阵操作是关于模型-取景变换矩阵的glLoadIdentity();//同上;

glPushMatrix();//把当前的变换矩阵压栈;

glTranslatef(m_xTrans,m_yTrans,m_zTrans);//x,y,z方向按给定实参值进行平移;

glRotatef(m_xRotate,1.0f,0.0f,0.0f);//x轴旋转m_xRotate度;

glRotatef(m_yRotate,0.0f,1.0f,0.0f); //y轴旋转m_yRotate度;

glRotatef(m_zRotate,0.0f,0.0f,1.0f); //z轴旋转m_zRotate度;

glScalef( m_xScaling,m_yScaling,m_zScaling ); //x,y,z方向按给定实参值进行缩放;

glPopMatrix();//原来的变换矩阵出栈;

glDrawBuffer(GL_BACK);//绘制操作在后台缓存;

}

3.3 模型的绘制

由于侧重模型的编辑操作,在绘制时并未计算顶点的法向量,仅仅求出了各个面片的法向量。

void CDisplayView::OnPaint()

{

CPaintDC dc(this);

glClearColor(0.0f,0.5f,0.5f,1.0f);//将显示窗口颜色设置为蓝绿色;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//用该色清除颜色,深度缓存;

……

DrawScene();//绘制模型,即调用显示列表;

……

SwapBuffers(dc.m_ps.hdc);//当前设备的前台缓存和后台缓存交换;

}

void CDisplayView::Drawscene()

{

for( int i = 0;i< TotalNum;i++ )

glCallList(i);//调用显示列表,该数据已在2.4.1节准备完毕;

}

3.4点和面的编辑

为了能够编辑点和面,必须首先在显示窗口中获取相关数据,即拾取到相应的点和面,然后才能对其进行正确的编辑操作。一般的绘图程序通常只是在屏幕上绘制场景中物体的二维或三维静态图像,用户不能对其中的图形进行有效的交互。为了方便人机交互,往往需要通过鼠标等设备来选定观察体积中的某个或某几个图元,以便对其进行进一步的操作。这种在选择模式下确定选中物体的操作称为拾取操作。选择模式下的拾取操作通过将一个特殊的拾取矩阵与投影矩阵相乘,从而将绘图操作限制在视口中鼠标附近的一个小区域内。通过鼠标点击来激活选择模式,这样鼠标附近绘制的物体就会被选中,即确定了鼠标附近所绘制的

物体名称。

1)拾取数据

实现如下:

void CDisplayView::OnLButtonDown(UINT nFlags, CPoint point) {//拾取操作有鼠标的LBUTTONDOWN消息触发;

……

glGetIntegerv(GL_VIEWPORT,viewport);//得到当前的视口;

w=viewport[2];

h=viewport[3];

glSelectBuffer(512,buf);//指定返回的选中纪录所使用的数组;

glRenderMode(GL_SELECT);//进入选择模式;

glInitNames();//初始化名称栈;

glPushName(-1);//将-1压入栈;

glMatrixMode(GL_PROJECTION);

glPushMatrix();

gluPickMatrix( (GLdouble)x,(GLdouble)(viewport[3]-y),3.0,3.0,viewport);//定义拾取矩阵;gluPerspective(60.0,h/w,1.0f,128.0);// 设置透视投影矩阵;

glMatrixMode(GL_MODELVIEW);

……

/*绘制场景并命名*/

glLoadName(i); //给说绘制的物体命名

glCallList(i);//调用显示列表,绘制图元(i);

……

hits=glRenderMode(GL_RENDER);//退出选择模式

if( hits )//处理命中信息

{

ResultName = GetSelectObject(buf,hits);//该函数返回命中图元的名称;

…… //主要处理当一次点击发生多次命中,只返回Z坐标值最小的那个图元

/*改变该图元的显示,重新绘制*/

glLineWidth(1.1f);

glColor3f( 1.0f,0.0f,0.0f);

绘制该图元;

……

}

}

2)编辑操作

2.1)增加,删除,修改一个点

根据用户输入的坐标值,将该点显示出来,观察其位置,确定之后保存在点的数据结构中,状态记为有效(V),此为增加操作。删除则只改其状态,记为(I),重新绘制即可。修改转化为删除和增加操作。

2.2)增加,删除,修改一个面

面的增,删,改操作同上。

3.5 导出数据

将最终满意的点,面数据以文件方式输出,格式与3.1节中使用的格式相同。

主界面如下:

(网页编辑:风之翼

OpenGL入门学习之七——使用光照来表现立体感

OpenGL入门学习之七——使用光照来表现立体感 2009-01-07 11:49 从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏。因此对于人类而言,光线很大程度上表现了物体的立体感。 请看图1,图中绘制了两个大小相同的白色球体。其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉。左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体。 图1 OpenGL对于光照效果提供了直接的支持,只需要调用某些函数,便可以实现简单的光照效果。但是在这之前,我们有必要了解一些基础知识。 一、建立光照模型 在现实生活中,某些物体本身就会发光,例如太阳、电灯等,而其它物体虽然不会发光,但可以反射来自其它物体的光。这些光通过各种方式传播,最后进入我们的眼睛——于是一幅画面就在我们的眼中形成了。 就目前的计算机而言,要准确模拟各种光线的传播,这是无法做到的事情。比如一个四面都是粗糙墙壁的房间,一盏电灯所发出的光线在很短的时间内就会经过非常多次的反射,最终几乎布满了房间的每一个角落,这一过程即使使用目前运算速度最快的计算机,也无法精确模拟。不过,我们并不需要精确的模拟各种光线,只需要找到一种近似的计算方式,使它的最终结果让我们的眼睛认为它是真实的,这就可以了。 OpenGL在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境。光源就是光的来源,可以是前面所说的太阳或者电灯等。材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL中没有考虑光的折射),材质特点就决定了物体反射光线的特点。光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是由哪个光源发出,这时,指定一个“环境亮度”参数,可以使最后形成的画面更接近于真实情况。

达尔ABAQUS三维无限元模型建立

达尔文档 分享知识传播快乐 ABAQUS三维无限元模型建立 本资料为原创 2017年7月达尔文档|DareDoc原创 本教程目的实现无限元单元的建立,从而用于无限元人工边界当中。 现以6m*6m*50m柱体为例,在其四周和底部建立一层无限单元。外层柱尺寸 12m*12m*56m,仅划分一层单元,内部柱体网格划分为1m*1m*1m。建立完后的模型如下图所示。 图1 外层无限元,有限元柱体和无限元-有限元模型 1.创建内部柱体和外部包裹柱体 在part模块中,建立Part-1和Part-2。先创建内部柱体part,在草图中建立一个 6m*6m的方框。 图2 草图中创建方形截面6*6 对截面进行拉伸,深度为50(图3)。同理,创建外部包裹柱体Part-2,截面尺寸为6*6,拉伸深度为56。 图3 拉伸深度及创建的part1 2.对两个柱体进行装配并切割 在装配模块中,将两个part进行装配。装配后,由于两者位置不对,需要将内部柱体的顶面与外部柱体顶面平齐,所以进行平移实例操作。平移完成后,用外部part 减去内部part,形成Part-3。 图4 装配效果图及平移后切割 图5 平移后两柱体位置,切割完成后模型 3.对包裹体切割,重新建立Part 为使后面能够顺利划分网格,需要对形成的Part-3进行切割,重新建立底部。先将part分割成四部分。可采用切割命令,使用三点切割体,如下图所示。 图6 切割part示意图 切割完毕后,底部块已经被切碎,需要通过“创建切削放样”进行删除,并重新建立。创建切削放样时建立两个截面,第一个截面为内部截面,按住shift键选择四个边完成,如图7所示,第二个截面为模型最底部正方形。两个截面创建完成后按确定按钮,底部便被切削去掉(图8左)。此时,模型底部需要根据形状填补,采用“创建实体放样”生成补块,过程与切削放样基本相同,需要注意创建时要勾选“保留内部边界”,否则后续网格不能划分(图8右)。 图6 切割完模型,对模型底部进行切削放样 图7 切削放样时选择的内外两个截面 图8 切削完毕后模型,创建实体放样 4.对无限元和有限元两部分进行装配,网格划分 在装配模块中,对Part-1和Part-3进行装配,装配完毕后进行合并,如图9。

实验7 OpenGL光照

实验7 OpenGL光照 一、实验目的 了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。 二、实验内容 (1)下载并运行Nate Robin教学程序包中的lightmaterial 程序,试验不同的光照与材质系数; (2)运行示范代码1,了解光照与材质函数使用。 三、实验原理 为在场景中增加光照,需要执行以下步骤: (1)设置一个或多个光源,设定它的有关属性; (2)选择一种光照模型; (3)设置物体的材料属性。 具体见教材第8章8.6节用OpenGL生成真实感图形的相关内容。 四、实验代码 #include #include static int year =0,day=0; void init(void){ GLfloat mat_specular[]={1.0,1.0,1.0,1.0}; GLfloat mat_shininess[]={50.0}; GLfloat light_position[]={1.0,1.0,1.0,0.0};

GLfloat white_light[]={1.0,1.0,1.0,1.0}; GLfloat Light_Model_Ambient[]={0.2,0.2,0.2,1.0}; glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_SMOOTH); //glMaterialfv(材质指定,单值材质参数,具体指针); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//镜面反射光的反射系数 glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);//镜面反射指数 //glLightfv(光源,属性名,属性值); glLightfv(GL_LIGHT0, GL_POSITION, light_position); //光源位置 glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); //漫放射光分量强度 glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); //折射光强度 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); //光源2 GL_LIGHT1 GLfloat mat_specular1[]={1.0,1.0,1.0,1.0}; GLfloat mat_shininess1[]={50.0}; GLfloat light_position1[]={0.0,0.0,0.0,0.0}; GLfloat red_light[]={1.0,0.0,0.0,1.0}; GLfloat Light_Model_Ambient1[]={0.2,0.2,0.2,1.0}; glLightfv(GL_LIGHT1, GL_POSITION, light_position1); //光源位置 glLightfv(GL_LIGHT1, GL_DIFFUSE, red_light); //漫放射光分量强度 glLightfv(GL_LIGHT1, GL_SPECULAR, red_light); //折射光强度 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient1); //开启灯光

Auto CAD三视图生成步骤

◆由三维实体生成三视图和轴测图简要步骤 1、将三维模型以二维线框显示。 2、进入图纸空间 可选择打印设备、图纸大小,或不选任何选项,按“确定”后,生成一个浮动视口。 删除该浮动视口。 重新设置四个浮动视口:主视、俯视、左视、西南轴测图。 3、创建实体轮廓线 方法见教材P284 4.创建实体轮廓,对四个视口的图形均进行创建实体轮廓的操作 自动生成PH-XX和PVX-X八个图层 4、调整显示在视口中视图的比例 命令:mvsetup↙ 输入选项 [对齐(A)/创建(C)/缩放视口(S)/选项(O)/标题栏(T)/放弃(U)]: s↙ (缩放视口:调整对象在视口中显示的缩放比例因子。缩放比例因子是边界在图纸空间中的比例和图形对象在视口中显示的比例之间的比率。)选择所有视口 设置视口缩放比例因子为:<统一(U)>: 5、将自动生成的前三个PH-XX图层的线型设置成dashed,并修改颜色。 将轴测图的PH-XX图层关闭(一般最后生成轴测图,因此是最后一个PH-XX 图层)。 6、关闭或冻结0层 7、绘制中心线、调整线型比例等 8、标注尺寸(与二维标注方式相同) ◆构建场景的简要步骤 注:所有尺寸仅用于方便作图,做作业时不必标注。 一、台阶 1、绘制台阶平面图,见图1

图1 2、实体拉伸命令制作台阶,相邻两个台阶的高度为25,如图2 图2、 3、布尔并集将各台阶合成一个实体,见图3 图3 二、制作建筑主体

1、新建UCS,如图4 图4 2、制作内空的长方体 (1)用实体长方体命令制作,尺寸长、宽、高为:800,800,450,见图5。 (2)在此长方体内再作长方体,尺寸:长、宽、高为700、700、450,见图6。(3)再用布尔差减去中间长方体。 图5

SU导入3D的流程

Sketchup建模及导入3D的方法及选项设置 用su建模,一是推敲方案,二是在方案推敲完成导入3D后进入后期的渲染,出效果图。 SU建模注意:为了加快建模速度必须设定自己的一套快捷键,在建模的过程中必须每个体量编辑组件,以便以后的修改。为了能导入3D中进行渲染,Sketchup的模型必须面是统一 的,系统默认白色的是正面,蓝色的是反面,就必须把正面朝外反面朝里,要不然在3d里面反面是显示不出来。 第一,第二就是Sketchup 一定是专业版,只有它才能导出3ds格式和dwg格式。 第二,在Sketchup中把材质都赋好,记得一点是不要用Sketchup默认的材质,要新建材质赋你有的jpg格式贴图,这样在3d里面才能继续调整贴图,Sketchup默认的贴 图在3d里可是不认。 第三,就是导出了,在Sketchup里面:文件,导出,3d模型,第一个下拉菜单选所有图层,然后中间的全部都不要选择,最后一个把单位改成毫米就可以了。第一个不动直接确定,第二个点否,现在导进来了,打灯光,打摄像机,调Vary选项。 第四,在Sketchup中赋好的材质,先把模型选中然后在编辑菜单中选Poly Select (可编辑网格选择),下面有几个选项选倒数第二个Polygon,然后在Select By Material ID里面输入相应的材质ID,被选中的材质就会变成红色,这样就可以进行材质的调 整了。 第五,SU导出3DS格式说明:1、Sin gel Object勾选此选项时,整个场景将合并成一个物体被输出,在SketchUP中建立的群组和组件将不能被单独进行操作,在场景中线面数很大的情况 下有可能不能完成输出;(这视情况而定) 2、Objects By Geometry 此选项将以群组和组件为单位输出物体,SketchUP 最表面一层的群组和组件被保留为单独的物体,可以在max中进行单独灵活的各种 编辑,推荐使用。缺点是每一个群组和组件都会输出一个自身的多重子材质 3、Output Texture Maps 如果不勾选,输出材质中将不包含贴图信息;贴图 文件路径需要在max里添加,建议将所有贴图复制到max模型文件所在工作目录, 这样就不会出现找不到贴图的错误信息 4、Output 2-Sides 输出双面:一般情况下不需要,会额外增加模型量;但是 在SketchUP建模阶段必须保证面法线正反的正确性,否则反面在max里无法显示, 产生丢面现象。Materiar和Geometry分别以材质和物体产生双面。 5、Output Standalong Edges 输出边线,对于max 不必要。 6、Use “Color By Layer ” Mater用I层的颜色作为材质输出,是以层颜色进行管 理的材质,需要在建模起始阶段就规划好的材质管理方式,物体(或面)将以所在的层的颜色为自身的材质。因为SketchUP里组件和层是参插的,在组件具有复合 材质时好像不易管理。 7、Gen erate Cameras 产生相机,基本上每一个页面会产生一个相机,这个不用勾 选。

第三章光照模型纹理映射

第三章光照模型及纹理映射 基本光照模型 1.在现实生活中,当光照在非透明物体上时,部分光线被物体吸收,剩余的部分光线被反射。人眼依靠这种反射光来感知物体的形状、颜色和其他细节。从光源投向物体的光称为入射光,从物体表面反射回的光称为反射光。 1.1光照模型概述 当光照射到物体表面上时,将出现3种情况: ●光从物体表面反射,形成反射光 ●光穿透物体,形成透射光 ●光被物体吸收,转化成为物体的内能 在上述三种情形的光线中,通常只有前2种情形的光线会对人眼产生视觉效果,使人察觉到物体的色彩变化。 OpenGL用一种近似的光照模型模拟现实世界的光照效果。在该模型中,仅当物体表面吸收和反射光线时,光源才会起做作用。每一个物体表面都假定是由某种特性的材料构成的。一种材料可能发出自己的光线,也可能在各个方向上发散一些射入的光线,还有可能像镜子一样在某个方向强烈地反射入射光。 1.2光照分量 在OpenGL的简化光照模型中,将光照分为4个独立的组成部分:辐射光、环境光、漫反射光和镜面反射光。 1)辐射光

辐射光是直接从物体或光源发出的,不受任何其他光源的影响。 2)环境光 环境光是这样一种光线,它被环境多次反射,以致于连初始 方向也难以确定。这种光线看起来就像来自于所有的方向, 当它照在一个物体表面时,它在所有的方向上等量地反射。 3)漫反射光 在被照射物体表面的反射光中,那些均匀地向各个方向反射 出去的光,称为漫反射光,如黑板反射就属于漫反射光 4)镜面反射光 镜面反射光是指超一定方向的反射光,如点光源照射光滑金 属球表面时,会在球表面形成一个特别亮的区域,呈现所谓 的高亮(Highlight>,这就是光源在该物体表面形成的镜面反射光(Specular Light>。点光源照射表面光滑的物体时,高亮区域小而亮;而点光源照射表面粗糙的物体时,高亮区域大而不亮。 1.3创建光源 光源有许多特性,如颜色、位置、方向等。不同特性的光源,作用在物体上的效果是不一样的。 1.3.1定义一个简单光源 在OpenGL中,定义一个光源是由函数glLight(>来实现的,该函数的原型为:void glLight(GLenum light,GLenum pname>; light为一个光源,pname为光源light指定一个单值的光源参数,

三维模型导入ADAMS的实用方法

三维模型导入ADAMS仿真的实用方法摘要:此文内容主要来源于 宋博士的博客(https://www.360docs.net/doc/5d8288484.html,/doctorsongshaoyun)。 本文所提供的方法是现有ADAMS书籍上未曾提供的内容,是解决大家建模感觉繁琐的非常实用的方法。 下面谈谈我的一些经验:尽管ADAMS软件中提供了几何建模的工具,但相比现在成熟的三维专业设计CAD软件而言其功能非常薄弱。ADAMS/View提供的建模工具功能非常的原始,即使对于简单的几何模型,用户想直接在ADAMS/View中建立也需要非常熟练地掌握移动和旋转工作栅格才能实现,而对于复杂的机械装配模型,ADAMS/View基本无能为力,因此目前通常的做法是先用成熟三维设计软件(如CATIA,UG,Pro/E,Solidwork等)精确建立机械系统实体零件模型和虚拟装配模型,之后通过数据交换的方式(我一般使用parasolid格式)将模型导入到ADAMS软件中,根据实际情况抽象出相应的运动副添加适当的约束、驱动和负载等(此处在正确位置建立合适的Maker点很关键,对于不规则实体有时软件自动建立的cm点并非在仿真需要的地方,运动副位置设置错了容易导致仿真失败)建立起机械系统的虚拟样机,来模拟实际工况和真实运动情况。此外机械系统方面的仿真建议大家使用Adams/Machinery这个插件,可以极大的提高仿真效率。 欢迎访问我的新浪博客(https://www.360docs.net/doc/5d8288484.html,/u/1774643737)。 基于SOLIDWORKS-ADAMS的机构动力学仿真对一个实际的机构做动力学仿真,是我们在机械设计实践中经常会遇到的的问题。一般我们会首先用某款三维软件(如SOLIDWORKS,SOLIDEDGE,PRO/E,UG,CATIA等)对所有零件进行建模,然后把零件组装成为装配体,接着把模型导入到机构动力学软件如ADAMS中进行动力学中仿真。 然而,从三维软件的装配模型导入到ADAMS中时,由于装配体中的零件很多,如果直接导入,会在ADAMS中出现许多零件,而其中许多零件之间并不存在相对运动,为了在ADAMS 中进行正确的仿真,就需要首先对没有相对运动的一系列零件之间建立固定副。对于简单的

AutoCAD机械制图--由三维实体生成二维视图

第15章由三维实体生成二维视图 ◆15.1 概述 ◆15.2 由三维实体生成三视图 ◆15.3 由三维实体创建剖视图

15.1 概述基本视图:实体模型 在投影面投影所得到的图形称为基本视图,通常可分为主视图、俯视图、左视图、右视图、仰视图、后视图。图15-1所示的是三维零件图在各个方向的投影视图所得的效果。 (a) 三维视图 (b) 主视图(c) 后视图(d) 俯视图(e) 仰视图(f) 左视图(g) 右视图 图15-1 各个视图

剖视图:假想用一个剖切平面将三维实体剖开,移去观察者和剖面之间的部分,而将留下的部分向投影面投影,所得视图称为剖视图。 剖面图:也叫断面图,假想用剖切面将零件的某处切断,紧画出其断面的图形,称为剖切图。分为移出断面图和重合断面图。 图15-2是剖视图和剖面图的比较。 (a) 阶梯轴(b) 剖面图(c) 剖视图 图15-2 剖面图和剖视图

模型空间是为创建三维模型提供一个广阔的绘图区域,用户可以通过建立UCS,创建各种样式的模型并设置观察视点和消隐、渲染等操作。 而布局空间是用于创建最终的打印布局,是图形输出效果的布置,用户不能通过改变视点的方式来从其他角度观看图形。 它们的主要区别标志是坐标系图标。模型空间中,坐标系图标是一个反映坐标方向的坐标架,而布局空间中,坐标系图标则是三角板形状。利用布局空间可以把在模型空间中绘制的三维模型在同一张图纸上以多个视图的形式排列并打印出来,而在模型空间中则无法实现这一点。

15.2 由三维实体生成三视图 AutoCAD将三维实体模型生成三视图的方法大致有两种: 第一种方法是先使用VPORTS或MVIEW命令,在布局空间中创建多个二维视图视口,然后使用SOLPROF命令在每个视口中分别生成实体模型的轮廓线,以创建二维视图的三视图。 第二种方法是使用SOLVIEW命令后,在布局空间中生成实体模型的各个二维视图视口,然后使用SOLDRAW命令在每个视口中分别生成实体模型的轮廓线,以创建二维视图的三视图。下面分别介绍各个命令的使用。

DMAX模型导入到Unity3D的步骤

3DMAX模型导入到Unity3D的步骤 1、打开3DMAX,自定义-》单位设置,将系统单位和显示单位都设置为“厘米” 2、建立一个Polygon管状体,参数如下:内径20CM,外径30CM,高30CM 注:保证其坐标原点在0,0,0 3、选中模型右击鼠标转换为可编辑多边形。 多模型进行一些挤出操作。 4、开始导出模型。保持模型选中状态,点击左上角3DMAX图标菜单, 导出-》导出选定对象。导出格式为.FBX,名称必须为英文字母类, 跳出的选项框默认直接确定即可。 例如导出的名称为 5、接下来打开Unity3D,新建立一个项目。 因为是测试项目所以可不导入Unity提供的资源包 6、将之前在3DMAX里导出的模型复制到Unity项目所在文件夹中的Assets文件夹下。 Unity会自动刷新出资源并自动创建一个Materials材质文件夹。如下图示: 7、单击Tube资源,在旁边的Inspector视图中可以看到:Scale Factor的值 表示的比例

8、鼠标拖动Tube到场景中,保持选择状态,摁键盘“F”键,物体自动放大到场景最大 点。3DMAX模型导入到Unity3D的步骤完成。 9、在3DMAX里新建立一个圆柱,系统单位和显示单位仍为CM厘米,圆柱参数如下: 半径100cm,高100cm,模型中心在坐标原点,转换为可编辑多边形, 保存命名为。将复制到Unity项目的Assets文件夹下 10、拖动yuanzhu到主场景。接着在Unity里建立一个圆柱体 Unity里默认是直径1M,高1M的圆柱。我们之前在3DMAX里建立的圆柱半径100cm,导入到Unity后即直径是200cm了。 将Unity里建立的圆柱,Scale参数中的X和Z放大2倍,这个圆柱的半径才是100cm(直径200cm) 然后将从3DMAX里导入的圆柱与Unity里建立的圆柱比较:半径是一样大小的。 说明在3DMAX里建立对应到Unity的模型,系统单位和显示单位设置为“CM”最好。

AutoCAD三维图转成三视图

AutoCAD中由三维图转成三视图(二维图)——附视频文件 本文主要介绍利用AutoCAD2000强大的图纸布局功能,把用户已经绘制了三维模型生成三视图。当切换到图纸空间后,AutoCAD在屏幕上显示一张二维图纸,并自动创建一个浮动视口,在这个视口中显示出已经绘制的三维模型,可根据三维模型轻易地创建多种形式的布局。用户可以调整视口视点以获得所需的主视图,然后再用SOLVIEW命令生成其他视图,如正交视图、剖视图、斜视图等。 下面将通过实例来介绍由三维模型生成三视图的技巧,并着重介绍标准的主视图、左视图、俯视图、剖视图生成方法。 1.利用三维模型创建各视图的视口 1.1 主视图视口的创建 下一步中,我们将打开已经绘制好的三维模型。首先形成模型的主视图视口,并将它布置在“图纸”的适当位置。 1)打开磁盘上的文件“机架.dwg”。 2)从模型空间切换到图纸空间。单击图形绘图窗口底部的选项卡layout1,打开[Page Setup-Layout1]对话框,然后在“Paper size”下拉列表中设定图纸幅面为“ISO A2 (594.00×420.00mm)”,单击OK按钮,进入图纸空间。AutoCAD在A2图纸上自动创建一个视口。 注意:可以把浮动视口作为一个几何对象,因此能用MOVE、COPY、SCALE、STRETCH等命令及界标点编辑方式进行编辑。 3)选择浮动视口,激活它的界标点,并进入拉伸模式,然后调整好视口大小。单击状态栏的PAPER按钮,激活浮动视口,再执行下拉菜单View→Zoom→All或标准工具条中的??按钮,使模型全部显示在视口中,如图1所示。 4)设置“前视点”。执行下拉菜单View→3D Views命令,选择适当的视口方向,就可获得了主视图的视口,如图2所示。 1.2 左视图及俯视图视口的创建 下面根据主视图视口创建左视图及俯视图的视口。 1)执行下拉菜单Draw→Solids→Setup→View,或在Solids工具条??按钮,在命令状态行提示下,键入ortho或o。接下来指定视口的投影方向,如图3,选择浮动视口的A边(在创建俯视图视口时选择B边),同时出现一条十字橡皮线,然后拉动十字橡皮线在主视图的右边(在创建俯视图视口时在主视图的下边)单击一点指定左视图的位置。此时无须精确调整视图的位置,因为以后还可以再调整视图的位置。 2)下一步,确定视口的大小。如图3,单击左视图的左上方的任一位置点1处(在创建俯视图视口时单击点3处),再单击左视图的右下方的任一位置点2处(在创建俯视图视口时单击点4处)。 3)最后,输入视图名称为剖视图。键入回车结束命令。

“三维实体转三视图”的详细图解

下面是“三维实体转三视图”的详细图解: 1.要将二维实体用三视图来出图,首先要画好二维立体图。第一步,不管是像现在这样的着色图…… 2.还是像现在这样的消隐图……

3.都要转换到“二维线框”模式,原因是要显示所有线条,包括因阻挡但实际存在的线条,以备以后有用。 4.在正式转三视图之前,先把出图的纸张格式定好,包括纸张横式/竖式,是否黑白打印…… 5.打印设备设置

6.打印布局设置 7.点击“设置视图”命令,或在命令行中输入solview,这个命令在布局里创建每个视图放置可见线和隐藏经线的图层(设置视图命令)

8.界面自动转到而已窗口,删除自动生成的布局。方法:点击外围的框线,实线变虚,Delete就删除了,点击Esc键,退出刚才的命令。 9.界面变成了完全的空白,再点击“设置视图”按钮,这回是正式开始设置视图了。

10.在布局里,点击鼠标右键,弹出菜单。选择UCS 11.因第一个出现的是俯视图,一般是放在左下角,因此在布局1/4的左下角中部为视力中心。 第一选项,选默认(直接回车) 第二选项,不知道比例,直接回事即可。 第三选项,指定视图中心,在布局中大概位置点击一下(点击后,如果觉得位置不好,还可以进行一次选择,点击第2次)

12.指定视图中心(点击鼠标左键后),即出现俯视图,由于我们事先没有指定比例,因此出现的俯视图根据原三维图的大小,可能会很大,也许会很小。我们只要及时滚动鼠标的滚轮还调节大小,在调节大小的同时,还可以点击鼠标的左键来调整视图的中心位置。 13.调整完成后,点击鼠标的右键或回车,命令要求指定俯视图视口的大小,方法和画矩形一样,从一个角到对角。

实验七 OPENGL光照效果

1.实验七OpenGL光照效果(选做) 1.实验七:OpenGL光照效果。 2.实验目的:通过上机编程,熟悉并掌握OpenGL中光照效果的制造方法。 3.实验要求: (1)先做实验项目:实验六“OpenGL组合图形”。 (2)每人一组,独立完成。 (3)利用OpenGL提供的颜色、光源、材质设置,对实验六“OpenGL组合图形” 中自己设计的物体设置绘制颜色和材质参数,并在场景中添加光源,形成一 定的光照明暗效果。 4.实验原理及内容: 在现实世界中,光线和物体的材质共同决定了物体在人眼中的效果。OpenGL 中则涉及到绘制颜色、物体的材质参数、场景中的光源颜色和位置,以此达到一定 的真实感光照效果。 (1)颜色: OpenGL通过指定红、绿、蓝(RGB)三个成分的各自亮度来确定颜色,有时还有第四个成分alpha:glColor*(red,green,blue[,alpha]); glColor()函数设置当前的绘图颜色,red、green和blue分别为红、绿、蓝的亮度,alpha为透明度,取值均为0.0~1.0。在该函数之后绘制的所有物体都将使用该 颜色。 (2)光线: OpenGL的光照模型中将光源分成四种: 发射光:一个物体本身就是一个发光源,如太阳、电灯等,这种光不受其它任何光源的影响。 环境光:从光源出发后光线被环境多次反射,以致没有明确的方向,或者说来自于所有的方向。被环境光照射的物体,各个表面都均等受光。 散射光:来自于某个方向,被物体表面均匀地反射,例如荧光照明、窗口射入的阳光等。 镜面光:来自于一个方向,被物体强烈地反射到另一个特定的方向。高亮

度的镜面光往往能在被照射的物体表面产生亮斑,如金属球上的高光区。 对于散射光和镜面光,入射角度、距离和衰减因子还会影响到最终的光照效果。 除了物体本身的发射光以外,通常意义上的光并不会是单纯的环境光、散射光或镜面光,而是由这三种类型的光混合组成的。 在OpenGL中,光也是采用RGBA值来定义的,分别描述光线中红绿蓝各成分的相对亮度。计算混合光的亮度时,则把相应的颜色亮度叠加即可,例如:环境光为(R1,G1,B1),散射光为(R2,G2,B2),镜面光为(R3,G3,B3),则混合后的光线为(R1+R2+R3,G1+G2+G3,B1+B2+B3)。 (3)材质: 材质是物体本身的一种属性,主要用来表征物体对不同颜色、不同类型光线的反射、吸收性能。 在OpenGL中设置材质参数,就是要指定这种材质对环境光、散射光、镜面光的反射能力,有时还需要说明该种材质是否具有发光能力。 在最终绘制每个像素时,OpenGL自行将物体材质的各分量与光线的各分量相乘再叠加,从而得到每个像素的RGB值。例如:光线为(R,G,B),材质为(MR,MG, MB),则最终绘制时颜色为(MR*R,MG*G,MB*B)。 (4)获得光照效果的一般过程为: a)使能光照:glEnable(GL_LIGHTING); b)设置一种光照模式:glLightModel*(); 如果只需要普通的无方向的环境光: GLfloat light_ambient[]={red,green,blue,alpha};//环境光的分值 //全局环境光的默认取值为(0.2,0.2,0.2,1.0) glLightModel*(GL_LIGHT_MODEL_AMBIENT,light_ambient); 如果需要在某个具体位置上放置某个光源,例如: GLfloat light_ambient[]={0.3,0.3,0.3,1.0};//环境光 glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); GLfloat light_diffuse[]={0.7,0.7,0.7,1.0};//散射光 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); GLfloat light_specular[]={1.0,1.0,1.0,1.0};//镜面光 glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);

三维建模要求规范-基本知识

实用标准文档三维建模规

城市三维建模是为城市规划、建设、运营、管理和数字城市建设提供技术服务的基础,是城市经济建设和社会发展信息化的基础性工作。城市三维模型数据是城市规划、建设与管理的重要基础资料。为了建设市三维地理信息系统,规市三维建筑模型的制作,统一三维模型制作的技术要求,及时、准确地为城市规划、建设、运营、管理和数字城市建设提供城市建筑三维模型数据,推进城市三维数据的共享,特制定本规。项目软件及数据格式 1、项目中使用的软件统一标准如下: 模型制作软件:3DMAX9 贴图处理软件:Photoshop 平台加载软件:TerraExplorer v6 普通贴图格式:jpg 透明贴图格式:tga 模型格式:MAX、X、XPL2 加载文件格式:shp 平台文件格式:fly 2、模型容及分类 城市建模主要包括建筑物模型和场景模型。 2.1、建筑物模型的容及分类

建筑物模型应包括下列建模容: 各类地上建筑物,包括:建筑主体及其附属设施。含围墙、台阶、门房、牌坊、外墙广告、电梯井、水箱以及踢脚、散水等。 各类地下建筑物,包括:地下室、地下人防工程等。 其他建(构)筑物,包括:纪念碑、塔、亭、交通站厅、特殊公益建(构)筑物以及水利、电力设施等。 全市建筑物模型分为精细模型(精模),中等复杂模型(中模),体块模型(白模)。市全市围主要大街、名胜古迹、标志性建筑等用精模表示,一般建筑物用中模表示,城中村、棚户区等用白模表示。 2.1.1、精细复杂度模型(精模) 2.1.1.1、定义:精细模型为,能准确表现建筑物的几何实体结构,能表现建筑物的诸多细节,对部分重要建筑景观进行重点准确制作表现的模型制作方式。 2.1.1.2、一般制作围:城市中主干道两旁的主要建筑物、主干路十字路口的主要建筑,电信、移动、金融中心大楼,火车站,重点政治、经济、文化、体育中心区建筑,包括标志性建筑物,城市中知名度高的名胜古迹、地标性建筑(如大雁塔、钟楼等)。 2.1.1.3、制作方式:精细制作,不仅能反映实际建筑的大小,整体结构,而且能反映建筑物的细节结构。贴图效果好,带光影效果。用户看上去感觉就是实际的建筑、真实度高。 2.1.2、中等复杂度模型(中模) 2.1.2.1、定义:为了保证大规模数字城市在平台上流畅运行,并能准确表现建筑物的几何实体结构,在不影响建筑物真实性几何结构的基础上,可以忽略部分实体结构,对部分建筑景观进行简单制作表现的模型制作方式。 2.1.2.2、一般制作围:城市中非主干道两旁的主要建筑物、城市临街小区居民楼和其

prescan 3D模型导入步骤

3D模型导入 一.把3D导入PreScan中有步骤: 1.从sketchup软件中导出目标模型文件 1)打开sketchup,右击“文件”——“3D模型库” ——“获取模型”,然后再弹出的模型库页面中 搜索目标模型; 2)选择目标文件并点击下载(保存为.dae格式,只有这个文件prescan才能识别)。 2.把下载下来的目标模型文件添加到prescan用户元素 库中 1)右击prescan上的“Tools”——“User Library Elments Wizard”; 2)弹出的菜单最上面是选择存放路径,下面的选项按钮点击“classic ULE”,然后点击“Add folder” 并对新生成的文件命名; 3)点击新生成的文件来激活对话框右边的“New Element”按钮并点击; 4)在弹出的对话框的第一页给文件命名以及选择元素类型并点击“next”; 5)在弹出的对话框的第二页给添加的心元素命名以及必要的描述并点击“next”; 6)在弹出的对话框的第三页选择第一步骤下载下

来的目标模型文件并点击“next”; 7)第四页是对目标模型进行尺寸设置,一般从sketchup中下载文件都已设置好,可以直接点 击“next”; 8)下面只要顺着点击“next”即可,最后点击“User Library Elments Wizard”对话框上的“refersh and close”就能在prescan的UL Elements中直接拖 拉该模型放置场景中。 注意:1)在3D模型库中下载的文件需有 textures.txt文件,不然导入的在3D viewer中看 到的模型将是一片漆黑。

OpenGL光照与材质

OpenGL---------光照的基本知识 从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏。因此对于人类而言,光线很大程度上表现了物体的立体感。 请看图1,图中绘制了两个大小相同的白色球体。其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉。左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体。 OpenGL对于光照效果提供了直接的支持,只需要调用某些函数,便可以实现简单的光照效果。但是在这之前,我们有必要了解一些基础知识。 一、建立光照模型 在现实生活中,某些物体本身就会发光,例如太阳、电灯等,而其它物体虽然不会发光,但可以反射来自其它物体的光。这些光通过各种方式传播,最后进入我们的眼睛——于是一幅画面就在我们的眼中形成了。 就目前的计算机而言,要准确模拟各种光线的传播,这是无法做到的事情。比如一个四面都是粗糙墙壁的房间,一盏电灯所发出的光线在很短的时间内就会经过非常多次的反射,最终几乎布满了房间的每一个角落,这一过程即使使用目前运算速度最快的计算机,也无法精确模拟。不过,我们并不需要精确的模拟各种光线,只需要找到一种近似的计算方式,使它的最终结果让我们的眼睛认为它是真实的,这就可以了。 OpenGL在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境。光源就是光的来源,可以是前面所说的太阳或者电灯等。材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL中没有考虑光的折射),材质特点就决定了物体反射光线的特点。光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是由哪个光源发出,这时,指定一个“环境亮度”参数,可以使最后形成的画面更接近于真实情况。 在物理学中,光线如果射入理想的光滑平面,则反射后的光线是很规则的(这样的反射称为镜面反射)。光线如果射入粗糙的、不光滑的平面,则反射后的光线是杂乱的(这样的反射称为漫反射)。现实生活中的物体在反射光线时,并不是绝对的镜面反射或漫反射,但可以看成是这两种反射的叠加。对于光源发出的光线,可以分别设置其经过镜面反射和漫反射后的光线强度。对于被光线照射的材质,也可以分别设置光线经过镜面反射和漫反射后的光线强度。这些因素综合起来,就形成了最终的光照效果。 二、法线向量 在OpenGL中,法线的方向是用一个向量来表示。不幸的是,OpenGL并不会根据你所指定的多边形各个顶点来计算出这些多边形所构成的物体的表面的每个点的法线(这话听着有些迷糊),通常,为了实现光照效果,需要在代码中为每一个顶点指定其法线向量。 指定法线向量的方式与指定颜色的方式有雷同之处。在指定颜色时,只需要指定每一个顶点的颜色,OpenGL就可以自行计算顶点之间的其它点的颜色。并且,颜色一旦被指定,除非再指定新的颜色,否则以后指定的所有顶点都将以这一向量作为自己的颜色。在指定法线向量时,只需要指定每一个顶点的法线向量,OpenGL会自行计算顶点之间的其它点的法线向量。并且,法线向量一旦被指定,除非再指定新的法线向量,否则以后指定的所有顶点都将以这一向量作为自

三视图自动生成机设计说明书

三视图自动生成机设计说明书 长春工程学院 2013年12月1日

目录 一、参赛人员基本信息 .................................................... - 1 - 二、创新构思与设计 ........................................................ - 1 - 1、设计目的.................................................................. - 1 - 2、创新构思.................................................................. - 2 - 三、设计方案 .................................................................... - 3 - 四、工作原理 .................................................................... - 4 - 1、机构原理说明.......................................................... - 4 - (1)旋转台的旋转机构 ......................................... - 4 - (2)齿轮传动组合机构 ......................................... - 4 - (3)传动及动力转向机构 ..................................... - 5 - (4)机械式开关机构 ............................................. - 5 - 2、控制原理示意图...................................................... - 6 - 五、样机主要零件设计图 ................................................ - 7 - 六、主要功能指标与应用前景......................................... - 9 - 1、功能指标.................................................................. - 9 - 2、应用前景.................................................................. - 9 - 七、实物照片 .................................................................. - 10 -

Quest3D模型的导入教程

一、前期准备工作(本教程以3DSMax为建模工具作为使用参考) 1.使用3DSMax创作一个最简单的茶壶模式: 2.在File(文件)菜单栏中选择运行Export(输出)命令,然后在Select File to Export(选择输出文件)对话框中选择Quest3D公司自己开发支持的X文件格式,选定后点击"完成"按钮: 3.在"场景统计和文件选项"对话框中选择并完成相应的设置: 4.Quest3D公司为3DSMax开发的X文件输出插件会自动将模型保存为X文件,本实例中将文件名设置保存为teaport.X.

二、在Quest3D中导入模型: 1.双击快捷图标运行Quest3D程序,在File(文件)菜单栏中选择运行Import导入命令: 2.在Select File to Import(选择输入文件)对话框中选择teaport.x文件: 3.Quest3D在点击导入文件对话框中的"打开"按钮后会弹出X Object Importer Options(X对象导入选项)对话框,进行相应的载入类型和选项设置.完成设置后点击"OK"确认按钮:

4、在Load Channel Group(载入通道组合)警告提示框,用以确定文件名和文件类型,: 5、当Channel通道窗口中出现DX8 3D Object相应的模型结构关系图后,就完成了模型的导入任务: 三、在动画窗口正常显示3D模型 出现问题:当我们完成第二步骤的工作以后,却发现在动画窗口中看不到相应的模型,这就意味着在Run预览运行效果和打包输出后一无所见! 这可是一个及其严重的问题哟,怎么办呢,解决方法如下: 1.在template模板窗口中,拖动Quick Start中的ObjectInspectiong的链接到Channel通道窗口:

AutoCAD建立简单三维模型教程

AutoCAD的多文档设计环境,让非计算机专业人员也能很快掌握并使用。使用AutoCAD 进行二维绘图,对具有机械制图基础的人来说,是比较容易掌握的;但对三维建模,特别是自学者,却总觉得不知从何下手。本篇AutoCAD教程就教大家由三视图绘制三维实体图时的整个建模过程的步骤和方法。 一、分析三视图,确定主体建模的坐标平面 在拿到一个三视图后,首先要做的是分析零件的主体部分,或大多数形体的形状特征图是在哪个视图中。从而确定画三维图的第一步——选择画三维图的第一个坐标面。这一点很重要,初学者往往不作任何分析,一律用默认的俯视图平面作为建模的第一个绘图平面,结果很容易给后续建模造成混乱。 图1 此零件主要部分为几个轴线平行的通孔圆柱,其形状特征为圆,特征视图明显都在主视图中,因此,画三维图的第一步,必须在视图管理器中选择主视图,即在主视图下画出三视图中所画主视图的全部图线。

图2 此零件的特征图:上下底板-四边形及其中的圆孔,主体-圆筒及肋板等,都在俯视图,故应在俯视图下画出三视图中的俯视图。 下图是用三维图模画三维图,很明显,其主要结构的形状特征――圆是在俯视方向,故应首先在俯视图下作图。

图3 二、构型处理,尽量在一个方向完成基本建模操作 确定了绘图的坐标平面后,接下来就是在此平面上绘制建模的基础图形了。必须指出,建模的基础图形并不是完全照抄三视图的图形,必须作构型处理。所谓构型,就是画出各形体在该坐标平面上能反映其实际形状,可供拉伸或放样、扫掠的实形图。 如上文图1所示零件,三个圆柱筒,按尺寸要求画出图4中所示6个绿色圆。与三个圆筒相切支撑的肋板,则用多段线画出图4中的红色图形。其它两块肋板,用多段线画出图中的两个黄色矩形。

相关文档
最新文档