OpenGL基础(一):点

一个简单的例子

    该示例程序在屏幕上绘制了三个点,背景色黑色,点的颜色为偏黄色。以下点线面与多边形的介绍,都是在该程序的基础上实现。

#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);



猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/80673669