VC6新建一个openGL类型项目;
出现一些选项,默认后生成一个项目;
VC6自带GL支持;
需要添加附加包含路径;
而后构建工程;运行如下;
是一个旋转的立方体;
生成的代码不是MFC的,也不是纯win32的,是对win32进行了一定的封装;
GL初始化之后,绘制的主要代码如下;
一共六组 Begin...End,每组绘制一个面;
glBegin(GL_POLYGON);
............
glEnd();
生成的代码实现动画旋转是,
void CMainWnd::Tick(BOOL &bRedrawScene)
{
m_fAngle+= 1; // Add some rotation to the cube
}
m_fAngle每次加1实现,改为m_fAngle+= 0之后,旋转即停止;先把旋转停了;
下面学习一下OpenGL视口;
void glViewport();
void glViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);
glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。
DrawScene()代码如下;
void CMainWnd::DrawScene()
{
// TODO: Replace the following sample code with your code to draw the scene.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear buffers
glLoadIdentity(); // Load identity matrix
// Add a light source
GLfloat glfLight[] = {-4.0f, 4.0f, 4.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, glfLight);
// Position and rotate the camera
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(30.0f, 1.0f, 0.0f, 0.0f);
glRotatef(m_fAngle, 0.0f, 1.0f, 0.0f);
// Draw a cube
static GLfloat r = .7f;
glViewport(0, 0, 800, 800);
GLCube(-r, -r, -r, r, r, r);
glViewport(400, 0, 800, 800);
GLCube(-r, -r, -r, r, r, r);
glFlush();
}
原来的DrawScene()中只调用一次GLCube;增加视口函数,并在每个视口调用GLCube;
之后运行如下;