背景:
帮同学整东西,学了学一点openal
现在写点东西整理一下,不然以后忘完了都找不到。
文章目录
- 环境以及环境配置
- 代码
- 创建窗口:
- 初始化窗口
- 绘制函数
- 总代码:
环境以及环境配置
代码
创建窗口:
#include <GL/glut.h>
//按照环境配置教程里面的话就应该
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GL_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("画图");//创建窗口,设置窗口名称
glutMainLoop();
//glutMainLoop()这个函数用于保持窗口存在,不然窗口就会一闪而过
return 0;
}
初始化窗口
其中心意思也就是写一个函数来初始化窗口吧。
//窗口属性,每次刷新基于这个属性
void Reshape(int w, int h) {
glMatrixMode(GL_PROJECTION);//设置投影方式,有用的,目前来说不必深究
glClearColor(255, 255, 255, 0);
glLoadIdentity();
gluOrtho2D(0, w, 0, h); // 设置裁剪窗口大小
}
gluOrtho2D(0, w, 0, h);
这样布局以后坐标分布如下:
绘制函数
glutDisplayFunc(drawlines);
这个函数里面的参数drawline是一个绘制事件之类的
具体你得写一个函数。
不过我们可以看看具体实现绘制的函数
void drawlines() {
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(3);//设置点的大小
glBegin(GL_POINTS);//这里设置模式,目前是画点模式
glColor3f(0,0,0);//里面是rgb值,设置颜色用的
glVertex2i(20, 20);
glVertex2i(50, 20);
glEnd();
glutSwapBuffers();
}
此时的主函数代码:
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GL_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("画图");//创建窗口,设置窗口名称
Reshape(800, 600);//初始化
glutDisplayFunc(drawlines);//绘制
glutMainLoop();
return 0;
}
从上面的代码可以看出drawlines必须放在glutDisplayFunc()里面才可以执行好
结果:
同理,画线的话drawlines函数内的代码则可以如下:
void drawlines() {
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(3);//设置点的大小
glBegin(GL_LINES);//这里设置模式,目前是画点模式
glColor3f(0,0,0);//里面是rgb值,设置颜色用的
glVertex2i(20, 20);
glVertex2f(500, 420);
glEnd();
glutSwapBuffers();
}
结果:
总代码:
#include <GL/glut.h>
//按照环境配置教程里面的话就应该
//窗口属性,每次刷新基于这个属性
void Reshape(int w, int h) {
glMatrixMode(GL_PROJECTION);//设置投影方式,有用的,目前来说不必深究
glClearColor(255, 255, 255, 0);
glLoadIdentity();
gluOrtho2D(0, w, 0, h); // 设置裁剪窗口大小
}
void drawlines() {
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(3);//设置点的大小
glBegin(GL_LINES);//这里设置模式,目前是画点模式
glColor3f(0,0,0);//里面是rgb值,设置颜色用的
glVertex2i(20, 20);
glVertex2f(500, 420);
glEnd();
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GL_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("画图");//创建窗口,设置窗口名称
Reshape(800, 600);//初始化
glutDisplayFunc(drawlines);//绘制
glutMainLoop();
return 0;
}