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(); //显示所有并进入等待状态
}
运行结果
点(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);
上一篇: OpenGL库基础1
下一篇: Hover与JavaScript结合案例