原文链接 http://wenku.baidu.com/view/c9031821af45b307e8719769.html###
怎样开始学习OpenGL
什么是OpenGL:
OpenGL(“Open Graphics Library”)是图形硬件的软件接口。OpenGL包括大约250个不同的函数,程序员可以使用这些函数设定要绘制的物体和操作,来制作交互的三维应用程序。
OpenGL是专业图形处理,科学计算等高端应用领域的标准图形库。它的主要竞争对手是微软的Direct3D。OpenGL曾长期处于技术上的领先地位,但近年来Direct3D也迎头赶上。目前这两种图形API在性能上可说是旗鼓相当。不过OpenGL支持众多的操作系统,而Direct3D只在Windows平台上可用。因此OpenGL仍然广受瞩目。
有哪些游戏采用了OpenGL渲染?
多了去了,魔兽3啊,cs啊,doom啊,quake啊,等等等等等等......
怎样开始学习OpenGL:
你可以在OpenGL的官方网站http://www.OpenGL.org的Documentation中下载到官方教程和例子程序:
The OpenGL Programming Guide,这就是著名的red book(“红皮书”)
如果你英语不好,那么推荐你阅读:
《OpenGL超级宝典》是一本相当不错的中文教程。可以在http://www.vrforum.cn/forumdisplay.php?fid=29找到它的例子代码
《OpenGL编程权威指南》他是red book的中文译本,它的例子也就是red book的例子。
*Nate Robin的例子对你理解OpenGL很有帮助。http://www.gamedev.net/reference/articles/article839.asp
*The OpenGL Reference Manual(blue book)并不是一本入门教材,而是一本函数参考手册,可以从http://www.OpenGL.org的Documentation中下载下来,在实际学习中查询用
*NeHe的例子也是大家所喜爱的初学者例子。http://nehe.gamedev.net,在http://www.chinagamedev.net还有一部分的中文译文
***nehe的简单窗口例子(第二课)几乎含盖世界上的所有语言,如果想用自己喜欢的独特语言,可以参考http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=02最下方的联接,并结合C++的例子学习(大多数教材都是基于C++的,不过幸好我们真正关注的是OpenGL本身)
***Nehe这一课关注于窗口的建立,并以下语言的移植版本,按字母排序(我就不删除这些厄余信息了,这实在太多了>_< !)
怎样安装GLUT库:
OpenGL的例子大都需要用到OpenGL应用工具包:GLUT库,下面讲讲怎样安装它
Visual C++ 6.0 HOWTO:
1。下载GLUT库:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
2。将压缩包内的glut.h放到...\\Microsoft Visual Studio\\VC98\\Include\\GL目录下
将glut32.lib放到...\\Microsoft Visual Studio\\VC98\\Lib目录下
将glut32.dll放到X:\\windows\\systom32目录下(win98用户放到X:\\windows\\systom目录下)
3。建立一个控制台工程Win32 Console Application,加入hello.c并运行:
#include <GL/glut.h>
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);/* clear all pixels */
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);/* draw white polygon with corners at(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)*/
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush ();/* start processing buffered OpenGL routines */
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);/* select clearing color */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);/* initialize viewing values */
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/*Declare initial display mode(single buffer and RGBA).*/
glutInitWindowSize (250, 250); /*Declare initial window size.*/
glutInitWindowPosition (100, 100);/*Declare initial window position.*/
glutCreateWindow (\"hello\");/*Open window with \"hello\"in its title bar.*/
init ();/*Call initialization routines.*/
glutDisplayFunc(display); /*Register callback function to display graphics.*/
glutMainLoop();/*Enter main loop and process events.*/
return 0; /* ANSI C requires main to return int. */
}
Dev CPP HOWTO:
1。下载GLUT库:http://www.cs.uofs.edu/~mpc3/cmps370/glut-MingW-DEV-C++.zip
2。将压缩包内的glut.h放到...\\Dev-Cpp\\include\\GL目录下
将libglut.a和glut32.def放到...\\Dev-Cpp\\lib目录下
将glut32.dll放到X:\\windows\\systom32目录下(win98用户放到X:\\windows\\systom目录下)
3。建立一个控制台工程Console Application,修改工程属性project options中的参数parameter中的连接器linker,加入库或者对象addlibrary or object中加入:
.../Dev-Cpp/lib/libglu32.a
.../Dev-Cpp/lib/libglut32.a
.../Dev-Cpp/lib/libopengl32.a
或直接键入-lopengl32 -lglu32 -lglut32
4。加入hello.c并运行:
#include <GL/glut.h>
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);/* clear all pixels */
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);/* draw white polygon with corners at(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)*/
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush ();/* start processing buffered OpenGL routines */
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);/* select clearing color */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);/* initialize viewing values */
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/*Declare initial display mode(single buffer and RGBA).*/
glutInitWindowSize (250, 250); /*Declare initial window size.*/
glutInitWindowPosition (100, 100);/*Declare initial window position.*/
glutCreateWindow (\"hello\");/*Open window with \"hello\"in its title bar.*/
init ();/*Call initialization routines.*/
glutDisplayFunc(display); /*Register callback function to display graphics.*/
glutMainLoop();/*Enter main loop and process events.*/
return 0; /* ANSI C requires main to return int. */
}
for JAVA HOWTO:
如果你是JAVA程序员,我向你推荐JOGL,JOGL项目是目前流行的OpenGL的JAVA绑定,它的官方主页是https://jogl.dev.java.net
当前的JOGL支持OpenGL 1.5,和绝大多数的扩展,当然如果你是OpenGL高手,你会知道,只要本地环境支持,我们一样可以调用JOGL没有提供的OpenGL扩展函数。(详细请看JGOL source code和JNI)
好吧,假定你有一个JAVA的编译环境,你的JAVA SDK版本在1.42以上,(你可以下载到netbeans,Eclipse,它们都是free的IDE)
安装步骤:
1。在https://jogl.dev.java.net的Precompiled binaries and documentation的Release Builds 2004的1.1b07 - November 19目录
下载jogl.jar和jogl-natives-win32.jar(不是windows用户的话,下载jogl-natives-myos.jar)
2。将jogl.jar安装到CLASSPATH
3。运行下面程序,得到java.library.path
public class try {
public static void main(String[] args)
{
System.out.println(System.getProperty(\"java.library.path\"));
}
}
4。
在WINDOWS上,解压缩jogl-natives-win32.jar,将jogl.dll和joglcg.dll放到任意的java.library.path目录中
在linux上,是两个。SO文件,将其放到任意的java.library.path目录中,有可能你需要ROOT权限,这取决于你的JRE是不是在你的目录下,或许你也可以在自己的根目录中部署JRE,再部署这两个。SO文件,DIY yourself !
5。运行看下面的程序,它能跑就说明安装好了
public class zaishishi {
public static void main(String[] args)
{
System.loadLibrary(\"jogl\" );
}
}
6。运行我们的例子hello.java
import net.java.games.jogl.*;
import java.awt.*;
import java.awt.event.*;
public class hello
{
public static void main( String[] args )
{
try
{
Frame Frame = new Frame(\"hello\"); /*Open window with \"hello\"in its title bar.*/
Frame.setSize(250,250); /*Declare initial window size.*/
GLCapabilities glCaps = new GLCapabilities();
GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas( glCaps );
canvas.addGLEventListener(new Renderer());
Frame.add( canvas );
final Animator animator = new Animator( canvas);
Frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
animator.stop();
System.exit(0);
}
});
Frame.show();
animator.start();
}
catch( Exception e )
{
e.printStackTrace();
}
}
}
class Renderer implements GLEventListener
{
private GL gl;
private GLDrawable glDrawable;
public void init(GLDrawable drawable)
{
this.gl = drawable.getGL();
this.glDrawable = drawable;
drawable.setGL( new DebugGL(drawable.getGL() ));
gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);/* select clearing color */
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);/* initialize viewing values */
}
public void display(GLDrawable drawable)
{
gl.glClear(GL.GL_COLOR_BUFFER_BIT);/* clear all pixels */
gl.glLoadIdentity();
gl.glColor3f(1.0f, 1.0f, 1.0f );
gl.glBegin( GL.GL_POLYGON); /* draw white polygon with corners at(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)*/
gl.glVertex3f (0.25f, 0.25f, 0.0f);
gl.glVertex3f (0.75f, 0.25f, 0.0f);
gl.glVertex3f (0.75f, 0.75f, 0.0f);
gl.glVertex3f (0.25f, 0.75f, 0.0f);
gl.glEnd();
gl.glFlush();/* start processing buffered OpenGL routines */
}
public void reshape(GLDrawable drawable, int x, int y, int width, int height)
{
}
public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged)
{
}
}
-------------------------------------------------
前面的那篇文章的配置好像少了点什么,没有成功,所以我有转载了下面这篇。
原文链接 http://webdancer.is-programmer.com/posts/25228.html
opengl配置
SC写了使用mingw时的opengl配置。由于我是使用VS,记录一下Windows7 下VS2010的opengl配置。由于图形学刚开始学,了解的不多。
1.安装Glut。GLUT是OpenGL应用工具包的缩写,英文全称为OpenGL Utility Toolkit,是一个和窗口系统无关的软件包,可以给我们的学习带来方便。当然,也可以选择不安装。
下载:http://www.opengl.org/resources/libraries/glut/glut37.zip
文件介绍:
glut.h -你需要在你的源代码中包含这个文件. 通常情况下, 这个文件应该放在你系统的包含目录下的 GL 文件夹中。
glut32.lib (微软版本) 和glut.lib (SGI windows版本) - 这个文件必须被连接到你的程序中, 确保它放在 LIB 目录中。
glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据你所使用的OpenGL选择一个, 如果你正在使用微软公司的版本, 那么你必须选择 glut32.dll. 你应该把DLL放置在你的系统文件夹中。
在我的机子里,具体为:
glut.h ---> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl
glut.dll,glut32.dll ---> C:\Windows\SysWOW64 (windows7 64位操作系统)
---> C:\Windows\System32 (windows7 32位操作系统)
glut.lib,glut32.lib ---> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
2.建立project。
注意:项目选择Win32控制台项目,文件的后缀为c。
试一下:
#include <gl\glut.h>
#include <math.h>
void dda(int x1,int y1,int x2,int y2){
int k,i;
float x,y,dx,dy;
k=abs(x2-x1);
if(abs(y2-y1)>k)
k=abs(y2-y1);
dx=(float)(x2-x1)/k;
dy=(float)(y2-y1)/k;
x=(float)(x1);
y=(float)(y1);
for(i=0;i<k;i++){
//gl_point(int(x+0.5),int(y+0.5));
glBegin(GL_POINTS);
glVertex2i((int)(x+0.5),(int)(y+0.5));
glEnd();
x+=dx;
y+=dy;
}
}
void printline(void){
glClearColor (1.0,1.0,1.0,0.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0,200.0,0.0,150.0);
dda(15,15,300,300);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(printline);
glutMainLoop();
return 0;
}
-----------------------------------------
后来我又试了一下,第一个转载里的代码没有成功原来是因为从网页拷贝代码时有不和谐的空白字符。猫了个咪的。