利用视口绘制在同一个窗口中绘制四个几何图形:
#include <windows.h>
#include <GL/glut.h>
#include <math.h>
void Viewport(int x,int y,int w,int h){
glViewport(x,y,w,h); //定义视口
glLoadIdentity(); //消除其他视口缓存
}
void Paint(){
//计算视区大小及位置
int w = glutGet(GLUT_WINDOW_WIDTH) / 2; //程序窗口宽度 / 2
int h = glutGet(GLUT_WINDOW_HEIGHT) / 2; //程序窗口高度 / 2
glClearColor(1,1,1,1); //白色背景
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓存
Viewport(0,0,w,h); //左下视口
glColor3f(0.8,0.8,0.3); //设置正方形颜色
glRectf(-0.8,-0.8,0.8,0.8); //定义正方形
Viewport(w,0,w,h); //右下视口
glColor3f(0.2,0.2,0.3); //球体颜色
glRotatef(-90,1,0,0); //调整两极方向
glutWireSphere(0.8,24,12);//线框球体
Viewport(0,h,w,h); //左上
glRotatef(30,1,1,0); //调整立体方向
glutWireCube(1); //线框立方体,边长为1
Viewport(w,h,w,h); //右上
glColor3f(0.8,0.5,0.8); //颜色
glutSolidTeapot(0.6); //定义犹他茶壶
glFlush(); //强制OPENGL命令序列在有限时间内完成执行
}
int main(int argc, char* argv[]){
glutInit(&argc, argv); //初始化
//设置程序窗口的显示模式(单缓存,RGBA颜色模式,默认值)
//glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100); //设置程序窗口在屏幕上的位置
glutInitWindowSize(300,300); //设置程序窗口的大小
glutCreateWindow("四个几何图形"); //设置窗口标题
glutDisplayFunc(Paint); //指定场景绘制循环函数,必须
glutMainLoop(); //开始循环执行OpenGL命令
}