主题:[原创]OpenGL入门学习——写给想用计算机画图的朋友
eastcowboy
[专家分:25370] 发布于 2006-07-30 14:09:00
说起编程作图,大概还有很多人想起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 楼
houfaqing [专家分:2610] 发布于 2006-09-02 12:50:00
MARK
32 楼
pangbai [专家分:360] 发布于 2006-09-15 10:46:00
开始转行向OPENGL了,师弟UP
33 楼
pangbai [专家分:360] 发布于 2006-09-15 10:55:00
eastcowboy换区吧 我先去VC区混几年再回来
34 楼
freeeerf [专家分:5440] 发布于 2006-10-24 13:37:00
太好了!!!!!!!!!!
35 楼
byoneself [专家分:0] 发布于 2006-11-10 19:40:00
我遇到问题了(我在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 楼
byoneself [专家分:0] 发布于 2006-11-10 19:56:00
是不是在BCB 6中需要设置一下include文件的路径阿……,可是没有找到那个设置的选项?
37 楼
byoneself [专家分:0] 发布于 2006-11-11 12:31:00
[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 楼
eastcowboy [专家分:25370] 发布于 2006-11-11 13:35:00
我还没使用过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 楼
13 [专家分:210] 发布于 2006-11-15 20:19:00
谢谢了!
40 楼
13 [专家分:210] 发布于 2006-11-15 20:20:00
楼猪讲的很详细哦
我来回复