博文

四至六课的教程请大家到论坛浏览,最近不会再更新(2006-11-14 23:15:00)

摘要:本来我想把这些教程都放到自己的BLOG里面的,但是考虑到教程有很多不完善的地方,很可能会被修改,如果保存多份的话,可能引起不一致的问题。另一方面,论坛交流起来也显得方便一些。 就我个人的因素来看,我去论坛的时间还算多,来BLOG的时间却非常少,所以以后的教程就放在论坛了。论坛的地址是www.programfan.com/club,选择“C/C++语言讨论区”,我一般会把最新的课程置顶的。 向只在BLOG看到这个教程,而没有看到论坛上新教程的朋友们说声对不起。 目前课程更新到第六课,但现在已经有一个月没有再更新。就我个人的愿望来看,我非常想马上写出新的教程来更新,但这段时间对我这个大四的学生来说显得太宝贵,我还有很多其它比较重要的事情要处理。所以,下一次更新很可能就是在寒假里了。对此我很抱歉,但我也没办法。 当然,除了等待,大家也可以有别的选择。比如可以找找其他的教程,或者可以试着买一本书来看看。我只是个业余爱好者,但别人也有专业的。仔细寻找的话,或许会有大的收获。......

阅读全文(3927) | 评论:2

[原创]OpenGL入门学习(三)(2006-08-01 23:14:00)

摘要:原帖地址:http://www.programfan.com/club/showbbs.asp?id=184769 好了,现在开始放出第三课的内容。

先回顾一下我们都学习了些什么:

第一课,编写第一个OpenGL程序
第二课,绘制几何图形
第三课,绘制几何图形的一些细节问题  ——→  本次课程的内容

在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处。例如:点太小,难以看清楚;直线也太细,不舒服;或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成。
这些问题将在本课中被解决。

下面就点、直线、多边形分别讨论。

========================================== 1、关于点
点的大小默认为1个像素,但也可以改变之。改变的命令为glPointSize,其函数原型如下:
void glPointSize(GLfloat size);
size必须大于0.0f,默认值为1.0f,单位为“像素”。
请自行编写程序并观察效果。

2、关于直线
(1)直线可以指定宽度:
void glLineWidth(GLfloat width);
其用法跟glPointSize类似。
(2)画虚线。
首先,使用glEnable(GL_LINE_STIPPLE);来启动虚线模式(使用glDisable(GL_LINE_STIPPLE)可以关闭之)。
然后,使用glLineStipple来设置虚线的样式。
void glLineStipple(GLint factor, GLushort pattern);
pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。
以下是一些例子:

声明:该图片来自www.opengl.org,该图片是《OpenGL编程指南》一书的附图......

阅读全文(6672) | 评论:4

[原创]OpenGL入门学习(二)(2006-07-31 16:39:00)

摘要:原帖地址:http://www.programfan.com/club/showbbs.asp?id=184525 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念。

一、点、直线和多边形
我们知道数学(具体的说,是几何学)中有点、直线和多边形的概念,但这些概念在计算机中会有所不同。
数学上的点,只有位置,没有大小。但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点。另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点。一般情况下,OpenGL中的点将被画成单个的像素(像素的概念,请自己搜索之~),虽然它可能足够小,但并不会是无穷小。同一像素上,OpenGL可以绘制许多坐标只有稍微不同的点,但该像素的具体颜色将取决于OpenGL的实现。当然,过度的注意细节就是钻牛角尖,我们大可不必花费过多的精力去研究“多个点如何画到同一像素上”。
同样的,数学上的直线没有宽度,但OpenGL的直线则是有宽度的。同时,OpenGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为,OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。
多边形是由多条线段首尾相连而形成的闭合区域。OpenGL规定,一个多边形必须是一个“凸多边形”(其定义为:多边形内任意两点所确定的线段都在多边形内,由此也可以推导出,凸多边形不能是空心的)。多边形可以由其边的端点(这里可称为顶点)来确定。(注意:如果使用的多边形不是凸多边形,则最后输出的效果是未定义的——OpenGL为了效率,放宽了检查,这可能导致显示错误。要避免这个错误,尽量使用三角形,因为三角形都是凸多边形)

可以想象,通过点、直线和多边形,就可以组合成各种几何图形。甚至于,你可以把一段弧看成是很多短的直线段相连,这些直线段足够短,以至于其长度小于一个像素的宽度。这样一来弧和圆也可以表示出来了。通过位于不同平面的相连的小多边形,我们还可以组成一个“曲面”。

==========================================   二、在OpenGL中指定顶点
由以上的讨论可以知道,“点”是一切的基础。
如何指定一个点呢?OpenGL提供了一系......

阅读全文(7793) | 评论:5

[原创]OpenGL入门学习(一)(2006-07-30 21:20:00)

摘要:原帖地址:http://www.programfan.com/club/showbbs.asp?id=184355   说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧?
但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。

本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。

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

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

==========================================   学习OpenGL前的准备工作
第一步,选择一个编译环境
现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我......

阅读全文(8672) | 评论:10