一个简单的例子
该示例程序在屏幕上绘制了三个点,背景色黑色,点的颜色为偏黄色。以下点线面与多边形的介绍,都是在该程序的基础上实现。
#include <GL/glut.h> #include <stdlib.h> #include <math.h> #include <stdio.h> void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); //窗口颜色(红 绿 蓝, 透明度:[0.0~1.0]A) gluOrtho2D(0.0, 200.0, 0.0, 150.0);//使用正投影将世界坐标系二位矩形区域的内容映射到屏幕上,区域的x坐标值从0.0到200.0,y坐标值从0.0到150.0 if (!glIsEnabled(GL_POINT_SMOOTH)) glEnable(GL_POINT_SMOOTH); } void Render(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPointSize(10.0); glColor3f(0.7f, 1.0f, 0.3f);//设置颜色 glBegin(GL_POINTS); glVertex3f(100.0f, 100.0f, 0.0f); glVertex3f(40.0f, 40.0f, 0.0f); glVertex3f(10.0f, 10.0f, 0.0f); glEnd(); glFlush(); //执行所有的OpenGL程序 } int main(int argc, char *argv[]) { glutInit(&argc, argv); //初始化GULT glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置显示模式 glutInitWindowPosition(50, 100); //设置左上角窗口显示位置 glutInitWindowSize(400, 300); //设置窗口显示的宽与高 glutCreateWindow("An Example OpenGL Program!"); //创建一个窗口 init(); //执行初始化程序 glutDisplayFunc(Render); //把图形显示在窗口 glutMainLoop(); //显示所有并进入等待状态 }
运行结果
点(GL_POINTS)
点的坐标位于glBegin(GL_POINTS)和glEnd()之间,glPointSize(10.0)设置了点的大小。
对点平滑处理,可以通过GL_POINT_SMOOTH得到,这样绘制出的是圆形的点。
if (!glIsEnabled(GL_POINT_SMOOTH)) glEnable(GL_POINT_SMOOTH);
当前点的大小可以通过GL_POINT_SIZE得到,测试结果为1.000。
GLfloat size; glGetFloatv(GL_POINT_SIZE, &size);
点的大小范围可以通过GL_POINT_SIZE_RANGE得到,测试得到的结果是[1,189.875]。
GLfloat size[2]; glGetFloatv(GL_POINT_SIZE_RANGE, size);
点的颗粒度可以通过GL_POINT_SIZE_GRANULARITY得到,测试结果是0.125。
GLfloat granularity; glGetFloatv(GL_POINT_SIZE_GRANULARITY, &granularity);
在透视投影下,距离视点近的点较大,距离视点远的点较小。衰减系数为:1/(a + b*d + c*d^2),其中d为距离,a,b,c是需要设置的参数,分别表示常数,线性和二次衰减系数。
GLfloat att[3] = { 0, 0, 0.1}; glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, att);