OpenGL的简单研究-开端

Posted 慢慢走

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL的简单研究-开端相关的知识,希望对你有一定的参考价值。

一直想要学习的但是没有学习的东西,大学一直在等待这个时间,终于可以闲下来研究一下这个部分的内容了。

计算机图形学,让计算机处理各种图像的东西,里面也存在很多算法和数学知识,很值得研究的一个领域,之前一直混迹在各种Web和服务器之中,终于可以学一些感觉很酷的东西。其实Web服务器也很酷。

 

我准备的运行环境还是比较简单的,是Win10操作系统,VS2015的开发环境。因为这种方式配置简单一些,之前试过使用GCC作为编译器和CFree作为开发环境,一直不成功,于是就用开了VC开发。

环境配置的过程是在网上百度的,内容没有什么技术含量,那么久开始看第一个代码吧。

一般都是从Hello World开始的,但是OpenGL还是从画一个方框开始吧:

 1 #include <GL/glut.h>
 2 void myDisplay() {
 3     glClearColor(0.0, 0.0, 0.0, 0.0);
 4     glClear(GL_COLOR_BUFFER_BIT);
 5 
 6     glColor3f(1.0f, 1.0f, 1.0f);
 7     glRectf(-0.5, -0.5, 0.5, 0.5f);
 8 
 9     glBegin(GL_TRIANGLES);
10     glColor3f(1.0f, 0.0f, 0.0f);
11     glColor3f(0.0f, 1.0f, 0.0f);
12     glColor3f(0.0f, 0.0f, 1.0f);
13     glEnd();
14 
15     glPointSize(3);
16     glBegin(GL_POINT);
17     glColor3f(1.0f, 0.0f, 0.0f);
18     glColor3f(0.0f, 1.0f, 0.0f);
19     glColor3f(0.0f, 0.0f, 1.0f);
20     glEnd();
21 
22     glFlush();
23 }
24 
25 int main(int argc,char* argv[]) {
26     glutInit(&argc, argv);
27     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
28     glutInitWindowPosition(100, 100);
29     glutInitWindowSize(400,400);
30     glutCreateWindow("hello world");
31     glutDisplayFunc(&myDisplay);
32     glutMainLoop();
33     return 0;
34 }

这个程序的作用是画一个白色的方框,下面分析一下这个代码:

在对于OpenGL中会有下面几个操作,比较基础和固定:

 1 int main(int argc,char* argv[]) {
 2     //对GLUT进行初始化,函数必须在其他GLUT使用之前调用一次,固定格式。
 3     glutInit(&argc, argv);
 4     //设置显示方式,RGB为RGB颜色,还有INDEX索引颜色,SINGLE单缓冲,DOUBLE双缓冲
 5     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
 6     //在屏幕出现的位置
 7     glutInitWindowPosition(100, 100);
 8     //窗口的大小
 9     glutInitWindowSize(400,400);
10     //创建窗口,标题为“helloworld”,而且这个窗口创建之后不会立即显示在屏幕上,必须调用了glutMainLoop()才会显示在屏幕上
11     glutCreateWindow("hello world");
12     //设置一个函数,画图是调用这个函数
13     glutDisplayFunc(&myDisplay);
14     glutMainLoop();
15     return 0;
16 }
 1 //画图的函数
 2 void myDisplay() {
 3     //清空颜色为黑色,就是不显示图像的地方为黑色
 4     glClearColor(0.0, 0.0, 0.0, 0.0);
 5     //设置背景为清空颜色
 6     glClear(GL_COLOR_BUFFER_BIT);
 7     
 8     glColor3f(1.0f, 1.0f, 1.0f);
 9 
10     //画图,画一个矩形
11     glRectf(-0.5, -0.5, 0.5, 0.5f);
12 
13     
14 
15     /*
16     glBegin(GL_TRIANGLES);
17     glColor3f(1.0f, 0.0f, 0.0f);
18     glColor3f(0.0f, 1.0f, 0.0f);
19     glColor3f(0.0f, 0.0f, 1.0f);
20     glEnd();
21 
22     glPointSize(3);
23     glBegin(GL_POINT);
24     glColor3f(1.0f, 0.0f, 0.0f);
25     glColor3f(0.0f, 1.0f, 0.0f);
26     glColor3f(0.0f, 0.0f, 1.0f);
27     glEnd();
28 
29     */
30 
31 
32     //保证前面的命令立即执行
33     glFlush();
34 }

 

以上是关于OpenGL的简单研究-开端的主要内容,如果未能解决你的问题,请参考以下文章

纹理中的 OpenGL 片段着色器

OpenGL着色器没有将变量从顶点传递到片段着色器

OpenGL核心技术之抗锯齿

在 OpenGL 中渲染透明块

OpenGL片段着色器不照亮场景

带有顶点/片段着色器的光。使用不同的变量。 (openGL)