实现二:
void renderGL2()
{
//视口一 左下角
glEnable(GL_SCISSOR_TEST);
glScissor(0,0,window_width/2-1,window_height/2-1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
glViewport(0,0,window_width/2-1,window_height/2-1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)window_width/(GLfloat)window_height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//绘制部分
glTranslatef(0.0f ,0.0f ,-5.0f );
glRotatef(rtri,0.0f ,1.0f ,0.0f );
//绘制一个三角锥
glBegin( GL_TRIANGLE_STRIP );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f(-1.0, -1.0, 1.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f(-1.0, -1.0, 1.0 );
glEnd();
//视口二 左上角
glEnable(GL_SCISSOR_TEST);
glScissor(0,window_height/2+1,window_width/2-1,window_height/2-1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
glViewport(0,window_height/2+1, window_width/2-1, window_height/2-1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)window_width/(GLfloat)window_height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//绘制部分
glColor3f(1.0f,0.0f,1.0f);
glTranslatef(0.0f,0.0f,-9.0f);
glRotatef(rtri,1.0,1.0,0.0);
glBegin(GL_TRIANGLES); // 绘制三角形
glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glEnd(); // 三角形绘制结束
//视口三 右下角
glEnable(GL_SCISSOR_TEST);
glScissor(window_width/2+1, 0, window_width/2-1, window_height/2-1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
glViewport(window_width/2+1,0,window_width/2-1, window_height/2-1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)window_width/(GLfloat)window_height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//绘制部分
glTranslatef(0.0f,0.0f,-2.0f);
glRotatef(-45.0f,1.0f,0.0f,0.0f);
glRotatef(rtri,0.0f,0.0f,1.0f);
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.5f, 0.5f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-0.5f, 0.5f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-0.5f, -1.0f, 0.0f);
glColor3f(0.0f,0.0f,0.0f); glVertex3f( 0.5f, -1.0f, 0.0f);
glEnd();
//视口四 右上角
glEnable(GL_SCISSOR_TEST);
glScissor(window_width/2+1, window_height/2+1, window_width/2-1, window_height/2-1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
glViewport(window_width/2+1, window_height/2+1, window_width/2-1, window_height/2-1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)window_width/(GLfloat)window_height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//绘制部分
glColor3f(0.0f,0.0f,0.0f);
glTranslatef(0.0f,0.0f,-4.0f);
glRotatef(-rtri/2,1.0f,0.0f,0.0f);
glRotatef(-rtri/2,0.0f,1.0f,0.0f);
glRotatef(-rquad/2,0.0f,0.0f,1.0f);
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.5f, 0.5f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-0.3f, 0.5f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-0.5f, -1.0f, 0.0f);
glColor3f(0.0f,0.0f,0.0f); glVertex3f( 0.5f, -1.0f, 0.0f);
glEnd();
rtri+=0.2f; // 旋转变量
rquad-=0.15f; // 旋转变量
SDL_GL_SwapBuffers( );
}
void initGL( int width, int height )
{
float ratio = (float) width / (float) height;
// Our shading model--Gouraud (smooth).
glShadeModel( GL_SMOOTH );
// Set the clear color.
glClearColor( 0, 0, 0, 0 );
// Setup our viewport.
glViewport( 0, 0, width, height );
//Change to the projection matrix and set our viewing volume.
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60.0, ratio, 1.0, 100.0 );
}