#include <windows.h> // windows系统要加这个。因为下面2个头文件的一些宏是在这个文件中定义的
#include <gl/Gl.h>
#include <gl/glut.h> //这两个头文件在OpenGL程序中几乎必加。
//<<<<<<<<<<<<<<<<<<<<<<< myInit >>>>>>>>>>>>>>>>>>>> 初始化
void myInit(void)
{
glClearColor(0.0,0.0,0.0,0.0); // 设置背景色:黑色。
glShadeModel(GL_FLAT); // 设置着色模式,可选GL_SMOOTH(默认)或GL_FLAT。采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。
}
//<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>> 绘制
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); // 将屏幕清除为背景色
glColor3f(1.0f, 0.0f, 0.0f); // 绘制颜色:红色
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0 ,1.0, 0.0); //设置eye,相机位置,和向上up向量,可调不同参数来观察会有什么变化
glScalef(1.0, 2.0, 1.0); //表示y坐标值扩大两倍,这样原本方的物体就变成长的了。
glutWireCube(1.0); //cube的边长
glFlush(); // send all output to display 把数据从缓冲区弄到屏幕上
}
//<<<<<<<<<<<<<<<<<<<<<<<< reshape >>>>>>>>>>>>>>>>> 视图变换
void myReshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h); //设置视口大小
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); //将当前矩阵与一个透视矩阵相乘,把当前矩阵转变成透视矩阵
glMatrixMode(GL_MODELVIEW);
}
//<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>
void main(int argc, char** argv)
{
glutInit(&argc, argv); // ***对GLUT进行初始化
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); // ***set display mode,单缓冲/双缓冲,颜色索引模式,深度等
glutInitWindowSize(480,480); // ***设置窗口大小
glutInitWindowPosition(100, 150); // ***设置窗口位置
glutCreateWindow("my cube attempt"); // ***创建窗口
myInit();
glutDisplayFunc(myDisplay); // 显示事件回调函数
glutReshapeFunc(myReshape); //当窗口改变时的回调函数
glutMainLoop(); // ***启动程序,检测事件并进行处理
}