您的位置:首页 > 其它

状态管理和绘制几何体(一)

2015-08-24 11:22 274 查看
状态管理和绘制几何体

绘图工具箱

清除窗口:在计算机中,保存图片的内存通常被计算机所绘制的前一幅图像所填充,因此在绘制新场景前,一般需要把它清楚为某背景颜色。像素颜色存储在名为位平面的图形硬件中采用两种存储方式:可以把像素颜色RGBA直接存储在位平面,也可以存储为一个颜色索引值,用它来饮用颜色查找表中的一个颜色项。

glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);


第一句把清楚颜色设置为黑色,第二句把整个窗口清除为当前清除颜色。

指定颜色

伪代码

set_current_color(red);
draw_object(A);
draw_object(B);
set_current_color(green);
set_current_color(blue);
draw_object(c);


红色绘制AB 蓝色绘制C 第四句代码无用

设置颜色 可以使用glColor3f()函数 函数接受三个参数 0-1之间浮点数,分别用来表示红绿蓝成分。0标示不使用这种成分 1标示最大限度使用。

强制完成绘图操作

OpenGL提供了glFlush()函数,强制客户机发送网络数据包,即使这个包并没有填满。这个函数并不等待绘图完成,只是强制绘图命令开始执行。因此保证以前所有的命令都在有限的时间内执行,即使在此之后并没有任何渲染命令需要执行。

坐标系统工具箱

无论是刚打开窗口还是以后移动窗口或者改变窗口大小的时候,窗口系统都会发送一个事件作为通知。如果使用的是GLUT,会自动产生通知,并且在glutReshapeFunc()种注册的那个函数被调用

另外 必须注册一个回调函数 完成下列这些任务

1. 重新建立一个矩形区域,把它作为新的渲染画布

2. 定义一个用于绘制物体的坐标系统

void reshape(int w,int h)
{
    glViewport(0,0,(GLsizei)w,(GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,(GLdouble) w,0.0,(GLdouble) h);
}


GLUT内核将向这个函数传递两个参数 标示经过改变之后窗口的高和宽。glViewport函数调整用于绘图的像素矩阵,使他占据整个新窗口。接下来的三行代码调整用于绘图的坐标系统,使左下角为(0,0),右上角为(w,h)。

2.2描述点直线和多边形

点:点可以用一组称为顶点的浮点数表示。所有的内部计算都是建立在把顶点看成是三维数据基础之上完成的。用户可以把顶点指定为二维形式z=0。

直线:表示一段线段。

多边形:线段构成的单闭合环,线段由端点位置的定点决定的。

指定顶点

在OpenGL中,所有的几何体最终都描述为一组有序的顶点 用glVertex()函数指定顶点。

该函数位于glBegin()和glEnd()之间才有效。

OpenGL几何图元

把一组顶点放在glBegin()和glEnd()之间,传递给glBegin()的参数决定了这些顶点所构建的几何图元的类型

glBegin()和glEnd()之间的使用Opengl函数是有限制的,一些特定函数可以在期间调用。包含其它编程语言不受限制

#include "stdafx.h"
const GLfloat PI = 3.1415926f;
void myDisplay()
{
    glBegin(GL_POLYGON);
    for(GLint i=0; i<100; i++)
    {
        GLfloat angle = 2*PI*i/100;
        glVertex2f(cos(angle),sin(angle));
    }
    glEnd();
    glFlush();

}
int _tmain(int argc, _TCHAR* argv[])
{

    glutInit(&argc,(char**)argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(250,250);
    glutCreateWindow("绘制一个圆");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}


这段代码使用循环多次计算圆的每个顶点,不是最有效的绘制圆的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: