视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
怎样开始学习OpenGL
2025-09-24 06:36:28 责编:小OO
文档
怎样开始学习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

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

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.*/

  glutInitWindowPositi

on (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)

  {

  }

}下载本文

显示全文
专题