GameRes游资网

 找回密码
 立即注册
返回列表
查看: 163892|回复: 101

【for Beginners】怎样开始学习OpenGL

[复制链接]
发表于 2004-12-7 11:55:00 | 显示全部楼层 |阅读模式
游戏程序
平台类型:  
程序设计:  
编程语言:  
引擎/SDK: OpenGL 

怎样开始学习OpenGL
wingser 2004.12.6 wujiayi74@citiz.net

什么是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这一课关注于窗口的建立,并以下语言的移植版本,按字母排序(我就不删除这些厄余信息了,这实在太多了>_< !)

Visual C++ Code For This Lesson.
ASM Code For This Lesson. ( Conversion by Foolman )
Borland C++ Builder 6 Code For This Lesson. ( Conversion by Christian Kindahl )
BeOS Code For This Lesson. ( Conversion by Rene Manqueros )
C# Code For This Lesson. ( Conversion by Joachim Rohde )
VB.Net CsGL Code For This Lesson. ( Conversion by X )
Code Warrior 5.3 Code For This Lesson. ( Conversion by Scott Lupton )
Cygwin Code For This Lesson. ( Conversion by Stephan Ferraro )
D Language Code For This Lesson. ( Conversion by Familia Pineda Garcia )
Delphi Code For This Lesson. ( Conversion by Michal Tucek )
Dev C++ Code For This Lesson. ( Conversion by Dan )
Game GLUT Code For This Lesson. ( Conversion by Milikas Anastasios )
GLUT Code For This Lesson. ( Conversion by Andy Restad )
Irix Code For This Lesson. ( Conversion by Lakmal Gunasekara )
Java Code For This Lesson. ( Conversion by Jeff Kirby )
Java/SWT Code For This Lesson. ( Conversion by Victor Gonzalez )
Jedi-SDL Code For This Lesson. ( Conversion by Dominique Louis )
JoGL Code For This Lesson. ( Conversion by Kevin J. Duling )
LCC Win32 Code For This Lesson. ( Conversion by Robert Wishlaw )
Linux Code For This Lesson. ( Conversion by Richard Campbell )
Linux/GLX Code For This Lesson. ( Conversion by Mihael Vrbanec )
Linux/SDL Code For This Lesson. ( Conversion by Ti Leggett )
LWJGL Code For This Lesson. ( Conversion by Mark Bernard )
Mac OS Code For This Lesson. ( Conversion by Anthony Parker )
Mac OS X/Cocoa Code For This Lesson. ( Conversion by Bryan Blackburn )
MASM Code For This Lesson. ( Conversion by Nico (Scalp) )
Power Basic Code For This Lesson. ( Conversion by Angus Law )
Pelles C Code For This Lesson. ( Conversion by Pelle Orinius )
Perl Code For This Lesson. ( Conversion by Cora Hussey )
Python Code For This Lesson. ( Conversion by Travis Wells )
QT/C++ Code For This Lesson. ( Conversion by Popeanga Marian )
REALbasic Code For This Lesson. ( Conversion by Thomas J. Cunningham )
Ruby Code For This Lesson. ( Conversion by Ben Goodspeed )
Scheme Code For This Lesson. ( Conversion by Jon DuBois )
Solaris Code For This Lesson. ( Conversion by Lakmal Gunasekara )
Visual Basic Code For This Lesson. ( Conversion by Ross Dawson )
Visual Fortran Code For This Lesson. ( Conversion by Jean-Philippe Perois )
Visual Studio .NET Code For This Lesson. ( Conversion by Grant James )
 楼主| 发表于 2004-12-7 11:55:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

怎样安装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 &lt;GL/glut.h&gt;

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(&amp;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 (&quot;hello&quot;);/*Open window with &quot;hello&quot;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. */
}


 楼主| 发表于 2004-12-7 11:55:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

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 &lt;GL/glut.h&gt;

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(&amp;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 (&quot;hello&quot;);/*Open window with &quot;hello&quot;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. */
}

 楼主| 发表于 2004-12-7 11:56:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

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(&quot;java.library.path&quot;));
}  
}
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(&quot;jogl&quot; );
    }
}
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(&quot;hello&quot;); /*Open window with &quot;hello&quot;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)
    {
    }

}


 楼主| 发表于 2004-12-7 12:00:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

请求置顶:)
发表于 2004-12-8 10:05:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

鼓掌~~~
发表于 2004-12-8 11:02:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

看来有得学落
发表于 2004-12-16 22:29:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

VB呢 请问VB环境下如何学习啊?????????
 楼主| 发表于 2004-12-18 13:11:00 | 显示全部楼层

Re:【for Beginners】怎样开始学习OpenGL

我也只会这点了唉
自己找找呀,肯定有的
发表于 2004-12-23 10:01:00 | 显示全部楼层

Re: 【for Beginners】怎样开始学习OpenGL

顶 [em13] [em13]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|稿件投递|广告合作|关于本站|GameRes游资网 ( 闽ICP备05005107-1 )

GMT+8, 2018-10-23 14:59

快速回复 返回顶部 返回列表