资源描述:
《OpenGL编程轻松入门之像素操作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、OpenGL编程轻松入门之像素操作2006-05-2308:35作者:黄燕出处:天极开发责任编辑:方舟本节讲解像素操作。 例14:本例在窗口绘制一个三角形,然后利用glCopyPixel函数拷贝了五次该图形,并将这五个三角形放置在窗口的不同位置。#include#include/*设置背景色*/voidmyInit(void){ glClearColor(1.0,1.0,1.0,1.0);}/*绘制彩色三角形*/voidtriangle(void){ glBegin(GL_TRIANGLE
2、S); glColor3f(1.0,1.0,0.0); glVertex2f(10.0,10.0); glColor3f(0.0,0.3,1.0); glVertex2f(20.0,30.0); glColor3f(1.0,0.0,0.0); glVertex2f(30.0,10.0); glEnd();}voidmyDisplay(){ inti; glClear(GL_COLOR_BUFFER_BIT
3、GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(10.0,100.0,0.
4、0); triangle(); glPopMatrix(); glPushMatrix(); for(i=0;i<5;i++) { glRasterPos2i(20+i*30,10+i*5);//为像素操作指定光栅位置 glCopyPixels(50,200,500,500,GL_COLOR);//在缓存中拷贝像素 } glPopMatrix(); glFlush();}voidmyReshape(intw,inth){ glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL
5、_PROJECTION); glLoadIdentity(); if(w<=h) gluOrtho2D(0.0,150,0.0,150.0*(GLfloat)h/(GLfloat)w); else gluOrtho2D(0.0,150*(GLfloat)w/(GLfloat)h,0.0,150.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}intmain(intargc,char**argv){ glutInit(&argc,argv); glutInitDisplayMod
6、e(GLUT_SINGLE
7、GLUT_RGB
8、GLUT_DEPTH); glutInitWindowSize(500,400); glutInitWindowPosition(100,100); glutCreateWindow("copy"); myInit(); glutReshapeFunc(myReshape); glutDisplayFunc(myDisplay); glutMainLoop(); return0;} ·glRasterPos在像素操作中指定光栅位置。同样后面的数字表示坐标维数,2表示坐标为x、y,3表示
9、、,y、z。数字后面的字母表示参数类型。最后带V表示参数为指针。 ·voidglCopyPixels(GLintx,Glinty,GLsizeiwidth,GLsizeiheight,GLenumtype)函数将像素拷贝到缓存中。 x,y指定被拷贝像素的右下角坐标。 width,heigth指定被拷贝像素矩形区域的大小。 type指定拷贝数值的类型。值为颜色、深度或膜板值。本例中为颜色。 例15:此例在窗口左下角写单词FILE。#include#include/*字母F*/GLub
10、ytef_rasters[12]={0xc0,0xc0,0xc0,0xc0,0xc0,0xfc,0xfc,0xc0,0xc0,0xc0,0xff,0xff};/*字母I*/GLubytei_rasters[12]={0xff,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0xff};/*字母L*/GLubytel_rasters[12]={0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};/*字母E*/GLu
11、bytee_rasters[12]={0xff,0xff,0xc0,0xc0,0xc0,0xff,0xff,0xc0,0xc0,0xc0,0xff,0xff};voidmyInit(void){ glPixelStorei(GL_UN