/************************************************************************/
/* 在OpenGL中,视点变换和模型变换被当做一种变换来看待。改变视点的位置和改变模型的位置是一个相对的过程,
例如将物体从(0.0, 0.0, 0.0)移至(0.0, 0.0, -1.0)相当于将相机从(0.0, 0.0, 0.0)移至(0.0, 0.0, 1.0)。
视点变换、模型变换将被合并,形成模型视点矩阵。
可以使用函数glMatrixMode(GL_MODELVIEW)来指定当前矩阵模式为模型视点变换。
****************在代码中,视点变换在模型变换之前指定,但投影变换和视口变换可以在绘图之前的任意时候指定。**********************
*/
/************************************************************************/
#include <windows.h>
#include <gl/gl.h>
#include <gl/glaux.h>
#include <gl/glu.h>
#pragma comment(lib, "openGL32.lib ")
#pragma comment(lib, "glu32.lib ")
#pragma comment(lib, "glaux.lib ")
GLvoid MyInit(GLvoid);
GLvoid CALLBACK MyReshape(GLsizei w,GLsizei h);
GLvoid CALLBACK display();
GLvoid MyInit(GLvoid)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_FLAT);
}
/************************************************************************/
/* 显示立方体的回调函数 */
/************************************************************************/
GLvoid CALLBACK display()
{
glColor3f(0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();//重置矩阵
glTranslatef(0.0,0.0,-5.0);//设置合适视点
glScalef(1.0,2.0,1.0);//y轴放大为原来两倍大小
auxWireCube(1.0);//半径为1的立方体
glFlush();
}
/************************************************************************/
/* 在窗口大小改变时的回调函数 */
/************************************************************************/
GLvoid CALLBACK MyReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);//设置合适视口
glMatrixMode(GL_PROJECTION);//将当前矩阵设置为投影矩阵
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0);//投影方式为透视投影
glMatrixMode(GL_MODELVIEW);//恢复为模型模式
}
void main()
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("test");
MyInit();
auxReshapeFunc(MyReshape);
auxMainLoop(display);
}