怎样开始学习OpenGL

怎样开始学习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)
  {
  }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值