opengl光照模型试验

opengl光照模型试验
opengl光照模型试验

学号:姓名:协作者:

实验二题目:光照模型的实现第十四周星期四

实验二光照模型的实现

一、实验目的

掌握OpenGL的光照及材质效果设置方法

二、实验要求

在Windows平台上用VC++结合GLUT做实验,要求掌握结合VC++和OpenGL的光照模型的理解及实现,实验完成后要求根据自己的成果撰写一份实验报告。

三、实验环境

操作系统:Windows xp

开发环境:VC++6.0以及GLUT

图形交互设备:鼠标和键盘

四、实验内容

在实验一的基础上理解并实现添加各种光(环境光,发散光,镜面光,聚光),使效果更逼真以接近实际环境。

1、打开灯光,设置灯光的位置、方向、类别、颜色和衰减,并改变其

值,观察效果的变化。

2、实现旋转和移动灯光。

3、设置材质,了解材质和光照如何相互影响。

五、存在的问题和感想

Opengl是一个强大的图形设计工具,对于设计具有真实感的图形真的很有帮助,在学习opengl的过程中,遇到了许多问题,比如,光照效果函数的使用,什么环境光,漫射光,反射光,一开始总搞不懂这些光找出来的具体效果是怎样的,还有对三维空间,视点坐标,模型坐标的变换等等,通过学习,参考别的代码,初步了解了这些函数调用的效果,也感觉到了opengl功能的强大,给人的视觉效果等等。学习opengl真的是充满了无穷的乐趣啊!

六、结果测试

1、球体、单色渲染、光照

2、单击右键弹出选择菜单,选择正方体、单色渲染和光照

3、单击右键弹出选择菜单,选择棱锥,单色渲染和光照

4、单击右键选择平滑渲染,上下左右键旋转光源

附件:

#include

#include GLfloat xRot=0.0f;

GLfloat yRot=0.0f;

GLfloat xRot1=0.0f;

GLfloat yRot1=0.0f;

GLfloat lightColor[]={1.0f,1.0f,1.0f}; GLfloat white[]={1.0f,1.0f,1.0f}; GLfloat

specular[]={1.0f,1.0f,1.0f,1.0f}; GLfloat

lightPos[]={0.0f,50.0f,0.0f,1.0f}; GLfloat

lightDir[]={0.0f,1.0f,0.0f,1.0f}; GLfloat

specref[]={1.0f,1.0f,1.0f,1.0f}; GLfloat

ambientLight[]={0.5f,0.5f,0.5f,1.0f}; char textrueObject[]={"png1.png"};

int iShape=1;

int iModel=1;

void DrawGround(void);

void DrawCube(void);

void DrawTriangle(void);

void RenderScene(void){

glClear(GL_COLOR_BUFFER_BI T|GL_DEPTH_BUFFER_BIT);

if(iModel==1)

glShadeModel(GL_FLAT);

if(iModel==2)

glShadeModel(GL_SMOOTH); glPushMatrix();

glRotatef(xRot,0.0f,1.0f,0.0f);

glRotatef(yRot,1.0f,0.0f,0.0f);

glDisable(GL_LIGHTING); glLightfv(GL_LIGHT0,GL_POSITI ON,lightPos);

glLightfv(GL_LIGHT0,GL_SPOT_ DIRECTION,lightDir); glTranslatef(lightPos[0],lightPos[1], lightPos[2]);

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

//glutSolidCone(3.0f,4.0f,15,15);

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

glutSolidSphere(2.0f,30,30); glPopMatrix();

glPushMatrix();

glRotatef(xRot1,0.0f,1.0f,0.0f);

glRotatef(yRot1,1.0f,0.0f,0.0f);

glEnable(GL_LIGHTING);

if(iShape==1){

glColor3f(0.0f,1.0f,1.0f); glutSolidSphere(25.0f,30,30);

}

if(iShape==2){

DrawCube();

}

if(iShape==3){

DrawTriangle();

}

glPopMatrix();

glPushMatrix();

glDisable(GL_LIGHTING);

glTranslatef(0.0f,-50.0f,0.0f);

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

DrawGround();

glPopMatrix(); glutSwapBuffers();

}

void SetupRC(void){

glEnable(GL_DEPTH_TEST); glEnable(GL_DITHER); glFrontFace(GL_CCW);

glEnable(GL_TEXTURE_3D); glEnable(GL_LIGHTING);

//光源属性

glLightModelfv(GL_LIGHT_MOD EL_AMBIENT, ambientLight); glLightfv(GL_LIGHT0,GL_DIFFU SE,ambientLight);

glLightfv(GL_LIGHT0,GL_SPECU LAR,specular);

glLightf(GL_LIGHT0,GL_SPOT_C UTOFF,120.0f);

glLightfv(GL_LIGHT0,GL_SPECU LAR,white);

glEnable(GL_LIGHT0);

//设定材质属性

glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT,

GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT,GL_AM BIENT_AND_DIFFUSE,white);

glMaterialfv(GL_FRONT,

GL_SPECULAR,specref);

glMateriali(GL_FRONT,

GL_SHININESS,128); glClearColor(0.0f,0.0f,0.0f,1.0f);

}

void ChangeSize(int w, int h)

{

GLfloat fAspect;

if(h == 0)

h = 1;

glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION);

glLoadIdentity();

fAspect = (GLfloat) w / (GLfloat) h;

gluPerspective(35.0f, fAspect, 1.0f, 500.0f);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(0.0f, 0.0f, -250.0f); }

//键盘控制

void SpecialKeys(int key,int x,int y){ if(key==GLUT_KEY_UP)

xRot+=5.0f;

if(key==GLUT_KEY_DOWN)

xRot-=5.0f;

if(key==GLUT_KEY_RIGHT)

yRot+=5.0f;

if(key==GLUT_KEY_LEFT)

yRot-=5.0f; glutPostRedisplay();

} //画正方体

void DrawCube(void){ glPushMatrix();

glBegin(GL_QUADS); glBindTexture(GL_TEXTURE_2D, textrueObject[0]);

glColor3ub(255,255,255); glVertex3f(25.0f,25.0f,25.0f);

glColor3ub( 255,255,0); glVertex3f(25.0f,-25.0f,25.0f);

glColor3ub(255,0,0); glVertex3f(-25.0f,-25.0f,25.0f);

glColor3ub(255,0,255); glVertex3f(-25.0f,25.0f,25.0f);

glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(25.0f,25.0f,-25.0f);

glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(25.0f,-25.0f,-25.0f);

glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-25.0f,-25.0f,-25.0f);

glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-25.0f,25.0f,-25.0f);

glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(25.0f,25.0f,-25.0f);

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

glVertex3f(25.0f,25.0f,25.0f);

glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(-25.0f,25.0f,25.0f);

glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-25.0f,25.0f,-25.0f);

glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(25.0f,-25.0f,-25.0f);

glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(25.0f,-25.0f,25.0f);

glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-25.0f,-25.0f,25.0f);

glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-25.0f,-25.0f,-25.0f);

glColor3f(1.0f, 1.0f, 1.0f); glVertex3f(25.0f,25.0f,25.0f);

glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(25.0f,25.0f,-25.0f);

glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(25.0f,-25.0f,-25.0f);

glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(25.0f,-25.0f,25.0f);

glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(-25.0f,25.0f,25.0f);

glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-25.0f,25.0f,-25.0f);

glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-25.0f,-25.0f,-25.0f);

glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-25.0f,-25.0f,25.0f);

glEnd();

glPopMatrix();

}

//画底面

void DrawGround(void){

GLfloat fExtent=100.0f;

GLfloat fStep=10.0f;

GLfloat y=-10.0f;

GLint iLine;

glPushMatrix();

glBegin(GL_LINES);

for(iLine=-fExtent;iLine<=fExtent;i Line+=fStep){

glVertex3f(iLine,y,fExtent);

glVertex3f(iLine,y,-fExtent);

glVertex3f(fExtent,y,iLine);

glVertex3f(-fExtent,y,iLine); }

glEnd();

glBegin(GL_QUADS);

glColor3f(1.0f,1.0f,.0f); glVertex3f(-100.0f,-10.0f,-100.0f); glVertex3f(100.0f,-10.0f,-100.0f); glVertex3f(100.0f,100.0f,-100.0f);

glVertex3f(-100.0f,100.0f,-100.0f); glEnd();

glPopMatrix();

}

//画四棱锥

void DrawTriangle(void){ glPushMatrix();

glBegin(GL_TRIANGLES);

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

glVertex3f(0.0f,25.0f,0.0f); glVertex3f(-25.0f,-25.0f,25.0f); glVertex3f(25.0f,-25.0f,25.0f);

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

glVertex3f(0.0f,25.0f,0.0f); glVertex3f(25.0f,-25.0f,25.0f); glVertex3f(25.0f,-25.0f,-25.0f);

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

glVertex3f(0.0f,25.0f,0.0f); glVertex3f(25.0f,-25.0f,-25.0f); glVertex3f(-25.0f,-25.0f,-25.0f);

glColor3f(1.0f,1.0f,.0f);

glVertex3f(0.0f,25.0f,0.0f); glVertex3f(-25.0f,-25.0f,-25.0f); glVertex3f(-25.0f,-25.0f,25.0f);

glEnd();

glBegin(GL_QUADS); glVertex3f(25.0f,-25.0f,25.0f); glVertex3f(25.0f,-25.0f,-25.0f);

glVertex3f(-25.0f,-25.0f,-25.0f);

glColor3f(1.0f,1.0f,0.0f); glVertex3f(-25.0f,-25.0f,25.0f);

glEnd();

glPopMatrix();

}

void TimerFunction(int value){

// yRot1+=5.0f;

xRot1+=5.0f; glutPostRedisplay(); glutTimerFunc(100,TimerFunction, 1);

}

void Menu(int value){

switch(value)

{

case 1:

iShape=1;break;

case 2:

iShape=2;break;

case 3:

iShape=3;break;

case 4:

iModel=1;break;

case 5:

iModel=2;break;

}

glutPostRedisplay();

}

int main(int argc,char* argv[])

{

int nMenu;

//初始化窗口

glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOU BLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(800,600); glutCreateWindow("光照");

//创建右键选择菜单

nMenu=glutCreateMenu(Menu);

glutAddMenuEntry("球体",1); glutAddMenuEntry("立方体",2); glutAddMenuEntry("圆锥体",3); glutAddMenuEntry("单色",4); glutAddMenuEntry("平滑",5); glutAttachMenu(GLUT_RIGHT_B UTTON);

glutReshapeFunc(ChangeSize);

glutSpecialFunc(SpecialKeys); glutTimerFunc(100,TimerFunction, 1);

glutDisplayFunc(RenderScene); SetupRC();

glutMainLoop();

return 0;

}

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

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

实验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); //开启灯光

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/0011171328.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/0011171328.html,/u/1774643737)。 基于SOLIDWORKS-ADAMS的机构动力学仿真对一个实际的机构做动力学仿真,是我们在机械设计实践中经常会遇到的的问题。一般我们会首先用某款三维软件(如SOLIDWORKS,SOLIDEDGE,PRO/E,UG,CATIA等)对所有零件进行建模,然后把零件组装成为装配体,接着把模型导入到机构动力学软件如ADAMS中进行动力学中仿真。 然而,从三维软件的装配模型导入到ADAMS中时,由于装配体中的零件很多,如果直接导入,会在ADAMS中出现许多零件,而其中许多零件之间并不存在相对运动,为了在ADAMS 中进行正确的仿真,就需要首先对没有相对运动的一系列零件之间建立固定副。对于简单的

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”最好。

实验七 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);

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会自行计算顶点之间的其它点的法线向量。并且,法线向量一旦被指定,除非再指定新的法线向量,否则以后指定的所有顶点都将以这一向量作为自

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通道窗口:

提取3D游戏模型的方法

提取3D游戏模型的方法 网络游戏工具【GameAssassin】是一个针对网络游戏和3D游戏的辅助工具,具有设置3D游戏的线框显示模式,截获3D游戏的模型贴图数据等功能,针对于网络游戏,此软件能够接获游戏所发出并且接受的网络消息,并且能够向服务器直接发送外部的自定义数据。 如果想截游戏模型,首先要到GA的官方下载相关软件和插件。 只需下载GA和导入MAX用的插件就可以。 首先是激活功能,这是必须做的一步,然后尽先一下简单的设置(如图) 再将游戏在任务栏上的完整名称输入到“自定义截取”中。然后在进入游戏。 切记是先运行GA再运行游戏,如果无法确认游戏的名称 可以在运行GA之前先运行游戏,记住游戏在任务栏上的名称 如果名称太长,显示不完整,可以查看任务管理器,确认后退出游戏。 在顺利进入游戏以后,我们会在屏幕的左上角看到“GA”两个彩色字母,这就说明在本游戏中GA运行成功,如果没有显示,就说明没有成功,就无法进行截取(如果不显示的话,就试着Alt+Tab切到GA主截面,选中游戏名称,点击“截取”,如果还不显示,可能就是操作步骤出现了错误)。如果没什么问题,就按下热键Alt+F7截取模型。 【建议在模型比较少的界面下截取,例如选人截面】

按下热键后,我们切到GA的主目录观察文件夹“魔兽世界”中是否已经生成OBJ模型文件,如果什么都没有,就再切回来,再按两遍热键。如果还没有OBJ文件,或是出现“非法操作”的话,那么退出GA,从新截取游戏。

如果没问题了,那么我们就进入模型观察器3D View中,将主人公的模型碎片从新组合,选择你认为是主人公身体一部分的模型,将其添加到组合物体中去。(如果在选取模型碎片文件时提示模型打开失败的话,那么建议你换个显卡。) 拼合好模型后,如果没问题的话,就将组合好的模型保存为列表文件

OpenGL中的光照模型

OpenGL中的光照模型 一、OpenGL的光照模型 在OpenGL的简单光照模型中反射光可以分成三个分量,环境反射光(Ambient Light)、漫反射光(Diffuse Light)和镜面反射光(Specular Light): a、环境光Ambient,是由光源发出经环境多次散射而无法确定其入射方向的光,即似乎来自所有方向。当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。特征:入射方向和出射方向均为任意方向。 b、漫射光Diffuse,来自特定方向,它垂直于物体时比倾斜时更明亮。一旦它照射到物体上,则在各个方向上均匀地发散出去,效果为无论视点在哪里它都一样亮。特征:入射方向唯一、出射方向为任意方向。 c、镜面光Specular,来自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。特征:入射方向和出射方向均唯一。 二、创建光源 定义光源特性的函数:glLight*(light , pname, param) 其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7;第二个参数pname指定光源特性,这个参数的辅助信息见表1所示;最 GL_LIGHT0,其他几个光源的GL_DIFFUSE和GL_SPECULAR缺省值为 (0.0,0.0,0.0,1.0)。 三、启用光源和明暗处理 如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源、材质等复杂计算。要启用光照或关闭光照,调用函数:glEnable(GL_LIGHTING) 或glDisable(GL_LIGHTING)。 启用光照后必须调用函数glEnable(GL_LIGHT0) ,使所定义的光源有效。其它光

SU 导入3D的流程PDF.pdf

书山有路 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、Singel 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”Material 用层的颜色作为材质输出,是以层颜色进行管 理的材质,需要在建模起始阶段就规划好的材质管理方式,物体(或面)将以所在 的层的颜色为自身的材质。因为SketchUP里组件和层是参插的,在组件具有复合 材质时好像不易管理。 7、Generate Cameras 产生相机,基本上每一个页面会产生一个相机,这个不 用勾选。 1

OpenGL光照

计算机图形学实验指导(三) – OpenGL光照 1.光照简介 采用光照要做的工作包括:创建光源,激活光照以及光源,以及定义物体的材质。创建光源是要定义光源的特征,物体的材质则与光源一起决定到达人眼的光的颜色。若光源颜色为(LR,LG,LB),材质颜色为(MR,MG,MB),则到达人眼的颜色为(LR*MR, LG*MG, LB*MB)。 2.简单光照模型 一般来说,反射光可以分成三个分量,即环境反射、漫反射和镜面反射。环境反射分量假定入射光均匀地从周围环境入射至景物表面并等量地向各个方向反射出去,通常物体表面还会受到从周围环境来的反射光(如来自地面、天空、墙壁等的反射光)的照射,这些光常统称为环境光(Ambient Light);漫反射分量表示特定光源在景物表面的反射光中那些向空间各方向均匀反射出去的光,这些光常称为漫射光(Diffuse Light);镜面反射光为朝一定方向的反射光,如一个点光源照射一个金属球时会在球面上形成一块特别亮的区域,呈现所谓“高光(Highlight)”,它是光源在金属球面上产生的镜面反射光(Specular Light)。对于较光滑物体,其镜面反射光的高光区域小而亮;相反,粗糙表面的镜面反射光呈发散状态,其高光区域大而不亮。 3.OpenGL光源 光源有许多特性,如颜色、位置、方向等。选择不同的特性值,则对应的光源作用在物体上的效果也不一样,下面的函数定义了OpenGL的光源。 void glLightfv(GLenum light , GLenum pname, TYPE param) 其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7。第二个参数pname指定光源特性,这个参数的具体信息见下表所示。最后一个参数设置相应的光源特性值。 pname 参数名说明 GL_AMBIENT RGBA模式下环境光 GL_DIFFUSE RGBA模式下漫反射光 GL_SPECULAR RGBA模式下镜面光 GL_POSITION 光源位置齐次坐标(x,y,z,w) GL_SPOT_DIRECTION 点光源聚光方向矢量(x,y,z) GL_SPOT_EXPONENT 点光源聚光指数 GL_SPOT_CUTOFF 点光源聚光截止角 例如:下面定义了一个位置在(1,1,1),没有环境光,镜面反射光和漫反射光都为白光的光源GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat light_ambient [] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat light_diffuse [] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT , light_ambient ); glLightfv(GL_LIGHT0, GL_DIFFUSE , light_diffuse );

2020年整理SU 导入3D的流程.doc

学海无涯 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、Singel 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”Material 用层的颜色作为材质输出,是以层颜色进行管 理的材质,需要在建模起始阶段就规划好的材质管理方式,物体(或面)将以所在 的层的颜色为自身的材质。因为SketchUP里组件和层是参插的,在组件具有复合 材质时好像不易管理。 7、Generate Cameras 产生相机,基本上每一个页面会产生一个相机,这个不 用勾选。

Opengl实验报告及源代码实验六 颜色与光照

南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩: 一、实验名称 实验六颜色与光照 二、实验内容 1.指定几何模型的绘制颜色,使用平滑着色模式用多种不同的颜色绘制多边形; 2.通过定义光源、材质和光照模型属性渲染物体的光照效果; 3.创建一个3D虚拟场景,利用定向光、点光源和聚光灯等不同光源实现3D场景的光 照效果。 三、实验目的 1.了解RGBA颜色的实现原理,掌握利用Flat和Smooth着色模式来绘制不同颜色的物 体的方法; 2.掌握OpenGL光照模型,理解光源、材质和光照模型如何综合影响物体的光照效果。 3.掌握定向光、点光源和聚光灯的不同属性及三种光源光照效果的计算方法。 四、实验步骤 1.建立立方体几何模型。定义立方体顶点的位置坐标和纹理坐标,设置不同立方体在 世界坐标系中的位置: // Set up vertex data (and buffer(s)) and attribute pointers GLfloat vertices[] = { // Positions // Normals // Texture Coords -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,

Unity3d模型导入技巧

Unity3d模型导入技巧 Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入untiy似乎也不能解决 1、x轴向偏转 3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的时候,你会发现y轴参照方向永远朝上,而x和z轴则以模型本身的局部坐标为准,这样当模型沿x轴旋转270度之后,z轴正好与y轴重合,这样你试图用程序控制方向的时候就会发现旋转y和旋转z效果相同,这显然不是你期望的结果。解决这个问题的方法是,将.max文件导出为.3ds文件再导入untiy,而不是官方说的导成.fbx 2、材质问题 模型在3dmax里赋予材质之后,不管通过何种方式导入到unity中,都是没有材质的,好在untiy自动生成了这些材质的材质球,我们需要做的是将贴图再重新设置一遍,如果你的材质还有其他效果,比如lightmap,则需要选择正确的shader之后再设置贴图。 另外一个是多重材质,多重材质暂时还不知道如何在unity中显示,所以在制作模型的之后,应该先确定哪些部件应该合在一起,而哪些需要独立,比如,对于一架直升飞机来说,身体和螺旋桨就可以分为两个部件,而不应该把螺旋桨与发动机合并成一个部件,这样程序就无法旋转螺旋桨了。 3、缩放因子问题 模型导入到untiy中,如果你之前在3dmax中没有关心过“单位”问题,则它在场景里的大小一定会出呼你的意料。 unity中的1单位是fbx文件中的1单位的100倍 所以,如果我们想unity中使用1单位=1米的话,那在max和maya中制作的时候,单位就设置成1厘米 如果我们想unity中1单位=100M,那单位就设置为1M 如果我们想unity中1单位=1厘米的话,那单位就设置为0.1毫米,或者在单位为1厘米的情况下把比例因子改为1 在max中,单设置应该像这样 1Unit = 1厘米,这样在unity中1格就等3dmax中的1M了 针对经常出现的问题,将需要注意的点罗列如下: 1、物体的头要朝下

相关文档
最新文档