码迷,mamicode.com
首页 > 其他好文 > 详细

4. glViewport 和 gluOrtho2D

时间:2020-05-07 01:11:17      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:line   调用   pre   png   取图   char   begin   main   图片   

定义视口大小:glViewport (GLint x, GLint y, GLsizei width, GLsizei height) ,默认是(0,0,窗口的宽度,窗口的高度), (x, y)是视口左下角在窗口里位置的坐标, (0, 0)是窗口左下角,w、h是视口的宽和高。截图就在这一部分进行显示.

截取图像大小:gluOrtho2D(x_mix, x_max, y_mix, y_max), 用来指定屏幕区域对应的模型坐标范围,我们自己所绘制的图形的坐标必须在这个范围内,不然不能看到自己绘制的图形。在没调用gluOthor2d函数之前,坐标范围是 X:-1 - 1,Y:-1 - 1;调用了这个函数之后坐标范围是 X:x_mix - x_max,Y: y_mix - y_max

#include <gl/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);
    //画分割线,分成四个视见区
    glViewport(0, 0, 400, 400);
    glBegin(GL_LINES);
    glVertex2f(-1.0, 0);
    glVertex2f(1.0, 0);
    glVertex2f(0.0, -1.0);
    glVertex2f(0.0, 1.0);
    glEnd();

    //定义在左下角的区域
    glColor3f(0.0, 1.0, 0.0);
    glViewport(0, 0, 200, 200);
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
    glEnd();

    //定义在右上角的区域
    glColor3f(0.0, 0.0, 1.0);
    glViewport(200, 200, 200, 200);//注意,后面这两个参数是高度和宽度,而不是坐标
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
    glEnd();

    //定义在左上角的区域
    glColor3f(1.0, 0.0, 0.0);
    glViewport(0, 200, 200, 200);//注意,后面这两个参数是高度和宽度,而不是坐标
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
    glEnd();

    //定义在右下角
    glColor3f(1.0, 1.0, 1.0);
    glViewport(200, 0, 200, 200);//注意,后面这两个参数是高度和宽度,而不是坐标
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

void init()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glColor3f(1.0, 1.0, 1.0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //定义剪裁面
    gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}

int main(int argc, char** argv)
{
    glutInit(&argc, (char**)argv);
    glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("openGL");
    glutDisplayFunc(display);
    init();

    glutMainLoop();//enters the GLUT event processing loop.  
    return 0;
}

显示效果入下

技术图片

 

4. glViewport 和 gluOrtho2D

标签:line   调用   pre   png   取图   char   begin   main   图片   

原文地址:https://www.cnblogs.com/flyinggod/p/12839976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!