5.27试用OpenGL程序绘制实线、虚线和点划线include "stdafx.h" //stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的//程序能在32位的操作系统环境下运行includevoid Init(){ glClearColor(0.0,0.0,0.0,1.0);}void display(){ // glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //绘制实线glColor3f(1.0,0.0,0.0);/*注意:glColor系列函数,在参数类型不同时,表示“最大”颜色的值也不同采用f和d做后缀的函数,以1.0表示最大的使用采用b做后缀的函数,以127表示最大的使用采用ub做后缀的函数,以255表示最大的使用采用s做后缀的函数,以32767表示最大的使用采用us做后缀的函数,以65535表示最大的使用/ glLineWidth(5); glBegin(GL_LINES); glVertex2f(0,200); glVertex2f(300,200); glEnd(); //绘制虚线 glColor3f(1.0,0.0,1.0);//紫色 glLineWidth(5); glEnable(GL_LINE_STIPPLE);//打开画线模式 glLineStipple(4,0x00FF); glBegin(GL_LINES); glVertex2f(0,250); glVertex2f(300,250); glEnd(); glDisable(GL_LINE_STIPPLE); //绘制点划线 glColor3f(1.0,1.0,0.0);//黄色 glLineWidth(5); glEnable(GL_LINE_STIPPLE); glLineStipple(2,0xFF0A); glBegin(GL_LINES); glVertex2f(0,300); glVertex2f(300,300); glEnd(); glDisable(GL_LINE_STIPPLE); glFlush();}void changesize(GLsizei w,GLsizei h){ glViewport(100, 100, w, h); //设置视区尺寸 if(h==0) h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (0.0f, 500.0f, 0.0f, 500.0f*h/w, 1.0, -1.0); //gluOrtho2D(0.0f, 500.0f, 0.0f, 500.0f*h/w); else glOrtho (0.0f, 500.0f*w/h, 0.0f, 500.0f, 1.0, -1.0);}int main(int argc, char* argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100,100); glutInitWindowSize(600,600); glutCreateWindow("绘制不同的直线"); glutDisplayFunc(display); glutReshapeFunc(changesize); Init(); glutMainLoop(); return 0;}5.28试用OpenGL实现黑白相间的棋盘图案填充多边形。
include "stdafx.h"#includevoid display(){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); GLubyte chess[]={//定义128字节大小的数组 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF }; //未填充的多边形/* glBegin(GL_POLYGON); glVertex2f(100,100); glVertex2f(200,100); glVertex2f(200,400); glVertex2f(100,400); glEnd();*/ //填充的多边形 glEnable(GL_POLYGON_STIPPLE);//启用多边形填充模式 glPolygonStipple(chess);//指定chess数组定义的位图为填充模板 glBegin(GL_POLYGON); glVertex2f(200,100); glVertex2f(500,100); glVertex2f(500,500); glVertex2f(200,500); glEnd(); glDisable(GL_POLYGON_STIPPLE); glFlush();}void changesize(int w,int h){ glViewport(0,0,w,h); if(h==0)h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(0,600,0,600*h/w,1,-1); else glOrtho(0,600*w/h,0,600,1,-1);}int main(int argc, char* argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("填充多边形"); glutDisplayFunc(display); glutReshapeFunc(changesize); glutMainLoop(); return 0;}5.29利用OpenGL,分别用点和折线模式实现正弦和余弦曲线的绘制。
include "stdafx.h"#include#include#includefloat k=0.05;int mode=1;void display(){ glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //画出坐标轴 glColor3f(1.0,1.0,1.0); glBegin(GL_LINES);//OpenGL默认坐标值只能从-1到1 glVertex2f(-1,0); glVertex2f(1,0); glVertex2f(0,1); glVertex2f(0,-1); glEnd(); if(mode==1) //画线 { cout<<"现在是线模式,要想转换到点模式请按下p键!"<#include/*void output(int x, int y, char *string){ int len, i; glRasterPos2f(x, y);//字符显示的位置 len = (int) strlen(string); for (i = 0; i < len; i++) { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, string[i]);//字符的字体、大小和内容 }}*/void display(){ glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //output(100,150,"OpenGL!"); //显示位图字符(指定使用固定宽度的字体) glColor3f(1.0,0,0.7); glRasterPos2f(100, 150);//字符显示的位置 glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'O'); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,112); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,101); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,110); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,71); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,76);//显示位图字符(24磅的Times-Roman字体) glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,79); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,112); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,101); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,110); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,71); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,76); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,33); //显示矢量字符(显示一种等距的Roman Simplex字体) glColor3f(1.0,0,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,'O'); glColor3f(0,1,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,112); glColor3f(1.0,1,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,101); glColor3f(1.0,0.5,0.5); glutStrokeCharacter(GLUT_STROKE_ROMAN,110); glColor3f(0.0,1,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,71); glColor3f(0.0,0,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,76); glColor3f(1,0.5,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,33); //显示矢量字符(显示一种单一间距的Roman Simplex字体) glColor3f(1.0,0,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,79); glColor3f(0,1,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,112); glColor3f(1.0,1,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,101); glColor3f(1.0,0.5,0.5); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,110); glColor3f(0.0,1,1); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,71); glColor3f(0.0,0,1); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,76); glFlush();}void changesize(int w,int h){ glViewport(0,200,w,h); if(h==0)h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); // gluOrtho2D(0,w,0,h); if(w<=h) glOrtho(-120,600,-120,600*h/w,1,-1); else glOrtho(-120,600*w/h,-120,600,1,-1);}int main(int argc, char* argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("显示字符"); glutDisplayFunc(display); glutReshapeFunc(changesize); glutMainLoop(); return 0;}。