opengl学习笔记二之绘制一个矩形

来源:互联网 发布:知乎论坛网 编辑:程序博客网 时间:2024/04/30 19:27


////  main.cpp//  HelloWorld////  Created by zhouxu on 14-7-15.//  Copyright (c) 2014年 zhouxu. All rights reserved.//#include <iostream>#include <GLUT/glut.h>void SetupRC(void){    glClearColor(1.0f, 1.0f, 0, 1.0f);}void RenderScene(void){    glClear(GL_COLOR_BUFFER_BIT);    glColor3f(1.0f, 0.0f, 1.0f);    glRectf(100.0f, 150.0f, 150.0f, 100.0f);    glFlush();}void ChangeSize(GLsizei w,GLsizei h){    if(h == 0)    {        h = 1;    }        //设置屏幕上的绘图区域    glViewport(0, 0, w, h);        //设置剪裁区域    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    if(w<=h)    {        glOrtho(0, 250.0f, 0, 250.0f*h/w, 1.0f, -1.0f);    }else{        glOrtho(0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0f, -1.0f);    }    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}int main(int argc, char * argv[]){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);    glutCreateWindow("HelloWorld");    glutDisplayFunc(RenderScene);    glutReshapeFunc(ChangeSize);    SetupRC();    glutMainLoop();    return 0;}


需要理解的几个概念:
glOrtho(left, right, bottom, top, near, far)
正交投影变换,与glFrustum(透视投影相对立),构造一个视景体,视景体内的空间才会被映射成2d平面并且被绘制,该函数相当于在3D笛卡尔坐标系内圈定了一个区域,当并没有指定这个区域映射到屏幕上的范围。PS:交给了glViewPort

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);





0 0
原创粉丝点击