How to begin learn opengl.docx

上传人:b****6 文档编号:7063269 上传时间:2023-01-16 格式:DOCX 页数:59 大小:67.68KB
下载 相关 举报
How to begin learn opengl.docx_第1页
第1页 / 共59页
How to begin learn opengl.docx_第2页
第2页 / 共59页
How to begin learn opengl.docx_第3页
第3页 / 共59页
How to begin learn opengl.docx_第4页
第4页 / 共59页
How to begin learn opengl.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

How to begin learn opengl.docx

《How to begin learn opengl.docx》由会员分享,可在线阅读,更多相关《How to begin learn opengl.docx(59页珍藏版)》请在冰豆网上搜索。

How to begin learn opengl.docx

Howtobeginlearnopengl

Howtobeginlearnopengl?

wingser 2004.12.6 wujiayi74@ 

什么是OpenGL:

OpenGL(“Open Graphics Library”)是图形硬件的软件接口。

OpenGL包括大约250个不同的函数,程序员可以使用这些函数设定要绘制的物体和操作,来制作交互的三维应用程序。

OpenGL是专业图形处理,科学计算等高端应用领域的标准图形库。

它的主要竞争对手是微软的Direct3D。

OpenGL曾长期处于技术上的领先地位,但近年来Direct3D也迎头赶上。

目前这两种图形API在性能上可说是旗鼓相当。

不过OpenGL支持众多的操作系统,而Direct3D只在Windows平台可用。

因此OpenGL仍然广受瞩目。

有哪些游戏采用了OpenGL渲染?

多了去了,魔兽3啊,cs啊,doom啊,quake啊,等等等等等等......

你可以在OpenGL的官方网站

The OpenGL Programming Guide,这就是著名的red book(“红皮书”)

如果你英语不好,那么推荐你阅读:

《OpenGL超级宝典》是一本相当不错的中文教程。

可以在

《OpenGL编程权威指南》他是red book的中文译本,它的例子也就是red book的例子。

*Nate Robin的例子对你理解OpenGL很有帮助。

*The OpenGL Reference Manual(blue book)并不是一本入门教材,而是一本函数参考手册,可以从http:

//www.OpenGL.org的Documentation中下载下来,在实际学习中查询用。

NeHe的例子也是大家所喜爱的初学者例子。

在http:

/还有一部分的中文译文。

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"_HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____;/*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.*/

   glutInitWindowPosition (100, 100);/*Declare initial window position.*/

   glutCreateWindow ("hello"_HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____;/*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绑定,它的官方主页是

当前的JOGL支持OpenGL 1.5,和绝大多数的扩展,当然如果你是OpenGL高手,你会知道,只要本地环境支持,我们一样可以调用JOGL没有提供的OpenGL扩展函数。

(详细请看JGOL source code和JNI)

好吧,假定你有一个JAVA的编译环境,你的JAVA SDK版本在1.42以上,(你可以下载到netbeans,Eclipse,它们都是free的IDE) 

安装步骤:

1。

在的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"_HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____);

}  

}

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" _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____;

    }

}

6。

运行我们的例子hello.java

import net.java.games.jogl.*; 

import java.awt.*; 

import java.awt.event.*;

public class hello 

    public static void main( String[] args _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____ 

    { 

        try 

        { 

            Frame Frame = new Frame("hello"_HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____; /*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 _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____; 

            canvas.addGLEventListener(new Renderer()); 

            Frame.add( canvas _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____; 

            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 _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____ 

        { 

            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() _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____); 

     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 _HYPERLINK"\t"_blank"__INCLUDEPICTURE"\*MERGEFORMATINET____; 

        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) 

    { 

    } 

}

loading...发信人:

_HYPERLINK"_zyxie_(David),信区:

VC标题:

OpenGL版本比较[zzfromcsdn]发信站:

南京大学小百合站(ThuJun923:

13:

382005)OpenGL版本比较1opengl的版本区别(在opengl官方文档中有详细说明)针对Opengl不同版本的升级是主要是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1