回 帖 发 新 帖 刷新版面

主题:[原创]OpenGL入门学习——写给想用计算机画图的朋友

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧?
但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。

[color=0000FF]本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。[/color]

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。
[color=FF0000]1、与C语言紧密结合[/color]。
OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,[color=0000FF]使用OpenGL作图甚至比TC更加简单[/color]。
[color=FF0000]2、强大的可移植性[/color]。
微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。
[color=FF0000]3、高性能的图形渲染[/color]。
OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。
总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。
OpenGL官方网站(英文)
[color=0000FF]http://www.opengl.org[/color]

下面我将对Windows下的OpenGL编程进行简单介绍。

=====================未完,请勿跟帖=====================

回复列表 (共70个回复)

31 楼

MARK

32 楼

开始转行向OPENGL了,师弟UP

33 楼

eastcowboy换区吧  我先去VC区混几年再回来

34 楼

太好了!!!!!!!!!!

35 楼

我遇到问题了(我在BCB中File—〉New—〉Other—〉Console Wizard—〉Console Application,然后又添加了一个C文件,把下面代码COPY到里面,命名,运行)
我在BCB中设置的OpenGL,可是在运行时出错了:
(下面是eastcowboy给出的第一个例子)
#include <gl/glut.h>
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("第一个OpenGL程序");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}


可是运行时消息提示:

[C++ Error] Unit1.cpp(5): E2209 Unable to open include file 'gl/glut.h'
[C++ Error] Unit1.cpp(9): E2268 Call to undefined function 'glClear'
[C++ Error] Unit1.cpp(9): E2451 Undefined symbol 'GL_COLOR_BUFFER_BIT'
[C++ Error] Unit1.cpp(10): E2268 Call to undefined function 'glRectf'
[C++ Error] Unit1.cpp(11): E2268 Call to undefined function 'glFlush'
[C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'glutInit'
[C++ Error] Unit1.cpp(17): E2268 Call to undefined function 'glutInitDisplayMode'
[C++ Error] Unit1.cpp(17): E2451 Undefined symbol 'GLUT_RGB'
[C++ Error] Unit1.cpp(17): E2451 Undefined symbol 'GLUT_SINGLE'
[C++ Error] Unit1.cpp(18): E2268 Call to undefined function 'glutInitWindowPosition'
[C++ Error] Unit1.cpp(19): E2268 Call to undefined function 'glutInitWindowSize'
[C++ Error] Unit1.cpp(20): E2268 Call to undefined function 'glutCreateWindow'
[C++ Error] Unit1.cpp(21): E2268 Call to undefined function 'glutDisplayFunc'
[C++ Error] Unit1.cpp(22): E2268 Call to undefined function 'glutMainLoop'


而我在设置BCB的时候,把glut.h文件确实正确地放在了E:\Program Files\Borland\include\gl下面;还有glut32.lib和glut.lib放在了E:\Program Files\Borland\lib下面;glut.dll和glut32.dll放在了C:\WINDOWS\system32下面,

36 楼

是不是在BCB 6中需要设置一下include文件的路径阿……,可是没有找到那个设置的选项?

37 楼

[b]glBegin()参数值            解释[/b]
CL_POINTS                一系列独立的点     
CL_LINES                 每两点相连成为险段
CL_POLYGON               简单、凸多边形的边界
CL_TRIANGLES             三点相连为一个三角形
CL_QUADS                 四点相连为一个四边形
CL_LINE_STRIP            顶点相连为一折线
CL_LINE_LOOP             顶点相连为一折线,并将最后一点与第一点相连
CL_TRIANGLE_STRIP        相连的三角形带
CL_TRIANGLE_FAN          相连的三角形扇形
CL_QUAD_STRIP            相连的四边形带

38 楼

我还没使用过BCB,所以无法给出具体的解决方案。不过我想到一个办法:
在工程中添加一个名为glut.h的文件,然后把原来的glut.h内容复制过去。在代码中把
#include <GL/glut.h>
换成:
#include "glut.h"

试试看行不行?(另:那个E:\Program Files\Borland\include\gl文件夹是本来存在的,还是你自己创建的?里面是否有gl.h和glu.h两个文件?)

如果不行的话,这里有一份BCB下面使用的OpenGL框架源代码:
http://nehe.gamedev.net/data/lessons/bcb6/lesson01_bcb6.zip
里面是用WindowsAPI编写的,没有使用glut工具包。读起来就没有使用了glut那样方便了。代码是NeHe网站原创,作者是Christian Kindahl。

39 楼

谢谢了!

40 楼

楼猪讲的很详细哦

我来回复

您尚未登录,请登录后再回复。点此登录或注册