OpenGL笔记(一)
真是各种入门。。作为一只INTP的悲哀。。
参考书:openGL编程指南
1.OpenGL是。。
图形硬件的软件接口。许多的函数,用于指定物体和操作,创建交互式的三维应用程序。
程序员需要根据一些为数不多的集合图元创建所需的模型。。
OpenGL 工具库(GLU)提供了建模功能:二次曲面,NURBS曲线和表面。。
【百度结果:NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真、生动的造型。NURBS是非均匀有理B样条曲线(Non-Uniform Rational B-Splines)的缩写,NURBS由Versprille在其博士学位论文中提出,1991年,国际标准化组织(ISO)颁布的工业产品数据交换标准STEP中,把NURBS作为定义工业产品几何形状的唯一数学方法。1992年,国际标准化组织又将NURBS纳入到规定独立于设备的交互图形编程接口的国际标准PHIGS(程序员层次交互图形系统)中,作为PHIGS Plus的扩充部分。目前,Bezier、有理Bezier、均匀B样条和非均匀B样条都被统一到NURBS中。NURBS曲线和NURBS曲面在传统的制图领域是不存在的,是为使用计算机进行3D建模而专门建立的。在3D建模的内部空间用曲线和曲面来表现轮廓和外形。它们是用数学表达式构建的,NURBS数学表达式是一种复合体。】
2.安装
(1)为了使用OpenGL,必须采用三个库及相关文件。(转载自http://www.cnblogs.com/helloj2ee/archive/2013/03/05/2944800.html)
OpenGL核心库——它提供OpenGL的基本函数。每个函数都以GL开头;
OpenGL实用库(GL Utility Library),glu库——提供简单形状的实用函数等。每个函数都以glu开头。
OpenGl实用工具包库(Utility Toolkit),glut库——它主要用来打开窗口、开发和管理菜单,以及管理事件等,函数前缀使用glut
(2)windows的库,通常由3个文件组成,一个头文件(.h),一个库文件(.lib)和一个动态链接库文件(.dll)。
①安装了VS2010,也就安装了下面俩库:OpenGL头文件(.h)和lib文件。
OpenGL核心库:gl.h是OpenGL核心库的头文件,对应的导入库和动态库为opengl32.lib和opengl32.dll(默认在C:\Windows\System32)。
OpenGL实用库:glu.h是OpenGL功能函数库的头文件,对应glu32.lib和glu32.dll(默认在C:\Windows\System32),它同样是OpenGL库的一部分。
②OpenGl实用工具包库:glut库。
可以在www.opengl.org网站上获得,
链接,http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip。
解压复制到各个文件夹下就好。
压缩包里包含5个文件:glut.h glut.lib glut32.lib glut.dll glut32.dll
glut.h放到(C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl\)这个文件夹中.
glut.lib和glut32.lib放到静态函数库所在文件夹中。(安装目录\Microsoft Visual Studio 10.0\VC\lib\)
glut.dll和glut32.dll放到操作系统所在目录下面的system32文件夹内. (C:\Windows\system32),如果是64位操作系统,则需要放到syswow64目录下。
3.创建一个工程
(1)创建一个Win32 Console Application。
(2)链接OpenGL libraries。项目->属性->连接器->附加依赖库->添加"opengl32.lib;glut32.lib;glu32.lib"
代码拷贝到工程中去,编译运行。
// test_opengl.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<gl/glut.h>
//#include<gl/glu.h> //glut.h自动包含了glu.h 和 gl.h
//#include<gl/gl.h>
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glutSwapBuffers();
}
int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc, (char**) argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("Hello OpenGL");
glutDisplayFunc(renderScene);
glutMainLoop();//enters the GLUT event processing loop.
return 0;
}
运行结果: