zoukankan      html  css  js  c++  java
  • 计算机图形学和OpenGL(一)OpenGL初步

          计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。(来自百度百科)

    OpenGL是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。

    OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。(来自百度百科)

    今天开始就学习计算机图形学和OpenGL,首先配置开发环境。

    OpenGL核心库系统本身都已经包含,但是除了OpenGL核心库之外我们还需要GLUT这个实用工具包。

    下载地址:http://download.csdn.net/detail/yue19870813/7883421。

    下载完成后解压出来会有5个文件,包括:glut.h, glut.dll, glut32.dll, glut.lib, glut32.lib。

    将dll文件copy到C:WindowsSysWOW64目录下(如果为32位系统则在:C:WindowsSystem32);

    将lib文件copy到C:Program Files (x86)Windows Kits8.1Libwinv6.3um下对应的版本,我的是64位;

    最后将.h文件copy到C:Program Files (x86)Windows Kits8.1Includeumgl目录下,到此为止GLUT配置完成。

    一、基本的OpenGL语法

    OpenGL基本库中函数名都要以gl为前缀,每个单词第一个字母大写,例如:glBegin,glClear,glCopyPixels等。

    OpenGL中常量是GL为前缀,每个单词大写,之间使用下划线分割。

    OpenGL中也有基本的数据类型,例如:GLbyte、GLshort、GLint、GLfloat、GLdouble、GLboolean。

    二、程序中包含的头文件

    在windows系统中我们要在程序中引入OpenGL的核心库和windows.h。因此我们的头文件应该为:

    #include <windows.h>
    #include <GLGL.h>
    #include <GLGLU.h>
    但是我们使用的是GLUT来处理窗口操作,所以就不需要引入GL.h和GLU.h了,只需要引入glut.h就可以了。此外我们还要引入c++中常用的头文件,最终引入的内容应该为:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>
    #include <string>  
    
    #include <windows.h>
    #include <GLglut.h>
    三、使用GLUT对窗口进行管理。

    使用OpenGL实用库的第一步是初始化GLUT,初始化函数是:

    glutInit(&argc, argv);
    下面的函数可以给显示的窗口一个标题:

    glutCreateWindow("Test OpenGL Program");
    接着是我们主要要做的事情,就是在窗口显示内容,使用下面命令可以将在lineSegment(我们自定义的绘图方法,后面将会给出)中绘制的图形赋给显示窗口:

    glutDisplayFunc(lineSegment);
    在所有绘制完成的最后,我们要调用下列语句将图形内容激活,该函数必须是程序中的最后一个。

    glutMainLoop();
    glutMainLoop()会使程序进入一个无穷循环之中,相当于我们的主循环。

    四、完整的OpenGL程序。

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>
    #include <string>  
    
    #include <windows.h>
    #include <GLglut.h>
    
    
    using namespace std;
    
    void init(void)
    {
    	//设置显示窗口的背景为白色。参数顺序为:红、绿、蓝、透明度。
    	glClearColor(1.0, 1.0, 1.0, 0.0);
    	//设置投影类型:正投影
    	glMatrixMode(GL_PROJECTION);
    	//观察参数:x坐标值从0到200,y是从0到150
    	gluOrtho2D(0.0, 200.0, 0.0, 150.0);
    }
    
    //绘制线段的函数
    void lineSegment(void)
    {
    	//将窗口颜色的设置显示到窗口上,参数是颜色缓存的位值
    	glClear(GL_COLOR_BUFFER_BIT);
    	//设置显示内容颜色
    	glColor3f(1.0, 0.0, 0.0);
    	//绘制内容
    	glBegin(GL_LINES);
    		glVertex2i(180, 15);
    		glVertex2i(10, 145);
    	glEnd();
    
    	glFlush();
    
    }
    
    int _tmain(int argc, char **argv)
    {
    	glutInit(&argc, argv);
    	//设置窗口的缓存和颜色模型
    	//下面指定的是:窗口使用单个缓存并且使用RGB颜色模型来设定颜色值。
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    	//设置窗口左上角的位置
    	glutInitWindowPosition(50, 100);
    	//设置窗口的宽高
    	glutInitWindowSize(800, 600);
    	glutCreateWindow("Test OpenGL Program");
    
    	init();
    	glutDisplayFunc(lineSegment);
    	glutMainLoop();
    	return 0;
    } 
    这样一个线段就被绘制出来了:



    参考内容:《计算机图形学(第三版)》 电子工业出版社

    转载请标明出处:http://blog.csdn.net/letthinking/article/details/39154401




  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/SunnyYue/p/3970263.html
Copyright © 2011-2022 走看看