图形学代码及截图Word文档下载推荐.docx

上传人:b****4 文档编号:8160710 上传时间:2023-05-10 格式:DOCX 页数:21 大小:62.06KB
下载 相关 举报
图形学代码及截图Word文档下载推荐.docx_第1页
第1页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第2页
第2页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第3页
第3页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第4页
第4页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第5页
第5页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第6页
第6页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第7页
第7页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第8页
第8页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第9页
第9页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第10页
第10页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第11页
第11页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第12页
第12页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第13页
第13页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第14页
第14页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第15页
第15页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第16页
第16页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第17页
第17页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第18页
第18页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第19页
第19页 / 共21页
图形学代码及截图Word文档下载推荐.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

图形学代码及截图Word文档下载推荐.docx

《图形学代码及截图Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图形学代码及截图Word文档下载推荐.docx(21页珍藏版)》请在冰点文库上搜索。

图形学代码及截图Word文档下载推荐.docx

if(state==GLUT_DOWN&

&

button==GLUT_LEFT_BUTTON)

{

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

if(angle<

360)

angle+=10;

else

angle-=360;

glRotatef(angle,1,1,2);

glutPostRedisplay();

}

voidkeyboard(unsignedcharkey,intx,inty)

if(key==27)

exit(-1);

voidinit()

glClearColor(0.0,0.0,0.0,0.0);

glColor3f(1.0,0.0,0.0);

voidreshape(intw,inth)

glViewport(0,0,w,h);

intmain(intargc,char**argv)

glutInit(&

argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(500,500);

glutInitWindowPosition(100,100);

glutCreateWindow("

OpenGL中的建模与变换"

);

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutKeyboardFunc(keyboard);

glutMouseFunc(mouseFunc);

glutMainLoop();

return0;

截图:

点击旋转:

体会:

主要是我们在进行变换的时候,要注意glMatrixMode的设置,在进行投影变换的时候要设置为GL_PROJECTION,而当图形变换的时候要设置为GL_MODELVIEW模式。

实验3:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(1.0,1.0,1.0);

glEnable(GL_LIGHT0);

glDisable(GL_LIGHT1);

glLoadIdentity();

glTranslatef(-0.5,0,0);

glutSolidSphere(0.3,20,22);

glDisable(GL_LIGHT0);

glEnable(GL_LIGHT1);

glTranslatef(0.5,0,0);

glutSwapBuffers();

GLfloatposition0[4]={-10,10,-10,1};

GLfloatambient0[4]={1,0,0,1};

glLightfv(GL_LIGHT0,GL_POSITION,position0);

glLightfv(GL_LIGHT0,GL_AMBIENT,ambient0);

GLfloatposition1[4]={10,10,-10,1};

GLfloatambient1[4]={0,1,0,1};

glLightfv(GL_LIGHT1,GL_POSITION,position1);

glLightfv(GL_LIGHT1,GL_AMBIENT,ambient1);

glEnable(GL_LIGHTING);

glEnable(GL_DEPTH_TEST);

OpenGL中的光照"

不知道为什么,右边的球体好像没有左边的光线效果,这点查询了很久还是不明白。

实验4:

iostream>

usingnamespacestd;

GLintselect=0;

voiddrawObjects(GLenummode)

if(mode==GL_SELECT)//绘制红色的小球

glPushName

(1);

if(select==1)//判断选中的是什么颜色的球,然后采用什么颜色红球还是白色的球

glColor3f(1,1,1);

else

glColor3f(1,0,0);

glPopName();

if(mode==GL_SELECT)//绘制绿色的小球

glPushName

(2);

if(select==2)//判断选中的是什么颜色的球,然后采用什么颜色绘制

glColor3f(0,1,0);

select=0;

//显示完后将select设置为0

drawObjects(GL_RENDER);

voiddraw(GLinthits,GLuintbuffer[])//这个是操作堆栈,判断点击的是什么颜色的球

unsignedinti,j;

GLuintname,*ptr;

if(hits==0)

cout<

<

"

未点击任何球体!

endl;

ptr=buffer;

for(i=0;

i<

hits;

i++)

{

name=*ptr;

ptr+=3;

if(*ptr==1)

{

cout<

红色球被点击!

select=1;

}

else

绿色球被点击"

select=2;

ptr++;

}

//点击完后设置球的颜色,重绘

#defineSIZE512

voidpickRects(intbutton,intstate,intx,inty)

GLuintselectBuf[SIZE];

GLinthits,viewport[4];

if(button==GLUT_LEFT_BUTTON&

state==GLUT_DOWN)

glGetIntegerv(GL_VIEWPORT,viewport);

glSelectBuffer(SIZE,selectBuf);

glRenderMode(GL_SELECT);

glInitNames();

glMatrixMode(GL_PROJECTION);

glPushMatrix();

gluPickMatrix((GLdouble)x,(GLdouble)(viewport[3]-y),3.0,3.0,viewport);

drawObjects(GL_SELECT);

//设置为选择模式

glPopMatrix();

glFlush();

//绘制结束

hits=glRenderMode(GL_RENDER);

draw(hits,selectBuf);

OpenGL中的拾取"

glutMouseFunc(pickRects);

初次显示

点击红球,然后点击绿球,或是点击黑色部分

命令行显示我们的操作

这个拾取过程我们控制select用来显示两个的球的显示颜色,特别注意显示完之后要将其select=0;

同时在对堆栈进行操作的时候要特别注意,不然就溢出啦。

实验5:

#defineImageWidth64

#defineImageHeight64

staticGLubyteImage[ImageHeight][ImageWidth][3];

staticGLuinttexName;

 

voidmakeImage()

inti,j,c;

for(i=0;

ImageWidth;

for(j=0;

j<

ImageHeight;

j++)

if(i%16<

8)

if(j%16<

{

c=225;

}

else

c=0;

Image[i][j][0]=(GLubyte)c;

Image[i][j][1]=(GLubyte)c;

Image[i][j][2]=(GLubyte)c;

glTranslated(-0.5,0,0);

glBegin(GL_QUADS);

//绘制四边形

//定义两个带纹理的平面:

//指定纹理坐标和几何坐标,每个纹理

//坐标与其后的几何坐标对应

glTexCoord2d(0,0);

glVertex2d(-0.4,-0.4);

glTexCoord2d(1,0);

glVertex2d(-0.4,0.4);

glTexCoord2d(1,1);

glVertex2d(0.4,0.4);

glTexCoord2d(0,1);

glVertex2d(0.4,-0.4);

glTranslated(0.5,0,0);

//相应ESC按键

//纹理映射

makeImage();

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glTexImage2D(GL_TEXTURE_2D,0,3,ImageWidth,ImageHeight,0,GL_RGB,GL_UNSIGNED_BYTE,Image);

//控制映射方式

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

//说明纹理颜色的作用方式,这里采用//粘贴(DECAL)方式,即以纹理颜

//色作为最后颜色

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);

//激活纹理,使其作用于其后绘制的纹理

glEnable(GL_TEXTURE_2D);

glShadeModel(GL_FLAT);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

OpenGL中的纹理映射"

纹理映射首先是要填充Image数组,产生我们需要的黑白格,然后就是纹理坐标与图形坐标的关系。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2