linux opengl 编程指南,OpenGL编程指南之多视口

实现二:

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 );

}

0418729d22cf64cd3ca26d350de289c7.png0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值