#include<windows.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<GL/glut.h>
#include<iostream>
using namespace std;
/**< 画三角形 >*/
void drawTran()
{
glBegin(GL_POLYGON);
glVertex2i(0,50);
glVertex2i(50,-25);
glVertex2i(-50,-25);
glEnd();
glFlush();
}
void init()
{
glClearColor(0.0,0.0,0.0,1.0);
//glMatrixMode(GL_PROJECTION);
//glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1.0,0.0,0.0);
}
void reShape(GLint w,GLint h)
{
//GLfloat bili=(GLfloat)w/(GLfloat)h;
glViewport(0,0,w,h);
//if(w>h)
//gluOrtho2D(-100*bili,100*bili,-100/bili,100/bili);
//else
//gluOrtho2D(-100*bili,100*bili,-100/bili,100/bili)
}
void display()
{
/**< 每个坐标的范围 >*/
//gluOrtho2D(-100,100,-100,100);
gluOrtho2D(-200,200,-200,200);/**< 相当于缩小图形>*/
//gluOrtho2D(-50,50,-50,50);/****< 相当于放大图形 >*/
/**< 第一个视口 >*/
glViewport(0,0,300,300);
glColor3f(0.0,1.0,0.0);
drawTran();/**绿色三角形*/
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINES);/**< 画坐标轴 >*/
glVertex2i(-60,0);
glVertex2i(60,0);
glVertex2i(0,-60);
glVertex2i(0,60);
glEnd();
glPointSize(5.0);
glBegin(GL_POINTS);/**标记第一个视口坐标轴的正x方向,正y方向*/
glColor3f(1.0,0.0,0.0);/**< x-->red >*/
glVertex2i(60,0);
glColor3f(0.0,0.0,1.0);/**< y-->blue >*/
glVertex2i(0,60);
glEnd();
glFlush();
/**< 第二个视口 >*/
glViewport(300,0,300,300);
glRotated(90.0,0.0,0.0,1.0);/**将坐标轴绕z轴旋转90*/
glColor3f(0.0,0.0,1.0);
drawTran();/**画一个蓝色三角形*/
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINES);/**< 画坐标轴 >*/
glVertex2i(-100,0);
glVertex2i(100,0);
glVertex2i(0,-100);
glVertex2i(0,100);
glEnd();
glPointSize(5.0);
glBegin(GL_POINTS);/**标记第二个视口坐标轴的正方向*/
glColor3f(1.0,0.0,0.0);/**< x轴正方向-->red >*/
glVertex2i(60,0);
glColor3f(0.0,0.0,1.0);/**< y轴正方向-->blue >*/
glVertex2i(0,60);
glEnd();
glFlush();
/**< 第三个视口 >*/
glViewport(0,300,300,300);
glRotated(90.0,0.0,0.0,1.0);/**将坐标轴绕z轴旋转90*/
glColor3f(0.0,1.0,0.0);
drawTran();
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINES);/**< 画坐标轴 >*/
glVertex2i(-100,0);
glVertex2i(100,0);
glVertex2i(0,-100);
glVertex2i(0,100);
glEnd();
glPointSize(5.0);
glBegin(GL_POINTS);/**标记第三个视口坐标轴的正方向*/
glColor3f(1.0,0.0,0.0);/**< x轴正方向-->red >*/
glVertex2i(60,0);
glColor3f(0.0,0.0,1.0);/**< y轴正方向-->blue >*/
glVertex2i(0,60);
glEnd();
glFlush();
/**< 视口四 >*/
glViewport(300,300,300,300);
glPushMatrix();/**< 不让最后一个坐标轴变化 >*-------------------push()*/
glRotated(90.0,0.0,0.0,1.0);/**将坐标轴绕z轴旋转90*/
glColor3f(1.0,1.0,0.0);
drawTran();
glPopMatrix();/**-------------------------------------------------pop()*/
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINES);/**< 画坐标轴 >*/
glVertex2i(-100,0);
glVertex2i(100,0);
glVertex2i(0,-100);
glVertex2i(0,100);
glEnd();
glPointSize(5.0);
glBegin(GL_POINTS);/**标记第四个视口坐标轴的正方向*/
glColor3f(1.0,0.0,0.0);/**< x轴正方向-->red >*/
glVertex2i(60,0);
glColor3f(0.0,0.0,1.0);/**< y轴正方向-->blue >*/
glVertex2i(0,60);
glEnd();
glFlush();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitWindowPosition(10,10);
glutInitWindowSize(600,600);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("glViewPort() Test");
init();
glutDisplayFunc(display);
glutReshapeFunc(reShape);
glutMainLoop();
return 0;
}