OpenGL编程-1

GLUT

OpenGL实用工具库(OpenGL Utility Toolkit Library, GLUT)
提供所有窗口系统的共同功能
打开窗口
从鼠标和键盘获取输入
弹出菜单
事件驱动
代码可以在平台间移植,但是GLUT缺乏在特定平台上优秀工具包所具有的功能
滚动条

OpenGL #defines

绝大多数常数采用#define在头文件gl.h, glu.h和glut.h中定义
注意#include <glut.h>会自动包含其它两个头文件
如:
glBegin(GL_POLYGON);
glClear(GL_COLOR_BUFFER_BIT);
在头文件中也定义了OpenGL数据类型: GLfloat, Gldouble,….

OpenGL的函数

基本几何形状

线段
多边形

main.c

   \#include <gl glut.h="">
   int main(int argc, char** argv)   
   {
 glutInit(&argc,argv);  //初始化
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);        //设定窗口的显示模式   
 glutInitWindowSize(500,500);    	//指定窗口的大小
 glutInitWindowPosition(0,0);         //指定窗口的位置
 glutCreateWindow("simple");      //创建窗口
 glutDisplayFunc(mydisplay);     //指定窗口的显示内容函数

init(); 

glutMainLoop();         //运行框架
 }

*属性
*变换
视图Viewing
建模Modeling
*控制(GLUT)
*输入(GLUT)
*查询Query

OpenGL函数名称的格式

glVertex3f(x,y,z) glVertex3fv(p)

gl表示属于GL库 3指参数个数 f指参数的类型 P为指向float的指针
'注意每部分的大小写'

面向对象方面的缺陷

OpenGL不是面向对象的,因此逻辑上的一个函数却对应着多个OpenGL函数:
glVertex3f
glVertex2i
glVertex3dv
内在存贮模式是相同的
在C++中很容易创建重载函数,但效率却成为主要问题

事件循环

注意在程序中定义了一个显示回调函数(display callback): mydisplay

·每个GLUT程序都必须有一个显示回调函数
·只要OpenGL确定显示内容要被刷新时,显示回调函数就会被调用。例如,当窗口被打开的时候
·main函数以程序进入事件循环后为结束
·The main function ends with the program entering an event loop

GLUT functions函数

·glutInit使得应用程序可获取命令行参数并初始化系统
·glutInitDisplayMode设置窗口的属性
RGB颜色
单缓冲区
·属性按照逻辑组合在一起
·glutWindowSize 以像素为单位定义窗口的尺寸
·glutWindowPosition 定义窗口左上角在显示器上的位置
·glutCreateWindow创建窗口,标题来自于参数值
·glutDisplayFunc定义显示回调函数
·glutMainLoop进入无穷的事件循环

init.c

void init()
{
glClearColor (0.0, 0.0, 0.0, 1.0);   //指定窗口背景色

glColor3f(1.0, 1.0, 1.0);    //刷新窗口的缓冲区 矩阵填充以白色

glMatrixMode (GL_PROJECTION);     //设定投影参数
glLoadIdentity ();    
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);    //视景体
}

定义多边形的限制条件

OpenGL只能显示满足下述条件的多边形

简单多边形:边除顶点外不相交
凸多边形:对于多边形中任意两点,连接这两点的线段完全在多边形内
平面多边形:所有顶点在同一平面上

用户自己确保上述条件满足
三角形满足上述所有限制条件

Attributes属性

属性是OpenGL中状态的一部分,确定对象的外观

·颜色(点、线、多边形)
·点的大小
·线段的宽度与实虚模式
·多边形
前后面
填充模式:颜色或模式
显示为实心多边形或者只显示边界

RGB color

·颜色的每个分量在帧缓冲区中是分开存贮的
·在缓冲区中通常每个分量占用8位字节
·注意在函数glColor3f中颜色值的变化范围是从0.0(无)到1.0(全部), 而在glColor3ub中颜色值的变化范围是从0到255

Indexed Color索引颜色

由一组RGB值构成一张表,“颜色”是表中项的索引
需要更少的内存
索引通常只有8位
现在重要性下降

内存价格下降
需要更多的颜色

Color and State状态

由glColor*设置的颜色成为状态的一部分,后续构造过程将使用该颜色,直至它被修改为止
颜色与其它属性不是对象的一部分,但是在渲染对象时要把这些属性赋给对象
可以按下述过程创建具有不同颜色的顶点
glColor
glVertex
glColor
glVertex

Smooth Color颜色的光滑过渡

默认状态是光滑过渡

OpenGL根据多边形顶点颜色插值出内部颜色
glShadeModel(GL_SMOOTH)
GL_SMOOTH: 采用光滑着色,独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到。即有过渡色效果

另外一种状态是平坦过渡

第一个顶点的颜色确定填充颜色
glShadeModel(GL_FLAT)
GL_FLAT:采用恒定着色,使用图元中某个顶点的颜色来渲染整个图元。

posted @ 2021-09-08 18:41  专心Coding的程侠  阅读(88)  评论(0编辑  收藏  举报