欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenGL基础(一):点

程序员文章站 2022-07-04 12:03:17
...

一个简单的例子

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

#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();                               //显示所有并进入等待状态
}

运行结果

OpenGL基础(一):点

点(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);