发信人: rhine (有雨无风), 信区: BorlandDev
标 题: OpenGL在C++Builder中的应用(5)
发信站: 哈工大紫丁香 (Sun Aug 27 06:41:29 2000), 转信
发信人: jinchao (Sonic), 信区: BCB
发信站: BBS 水木清华站 (Fri Jul 30 09:05:59 1999) WWW-POST
(五) 基本图元的用法
上节介绍的十种基本图元的用法与Vc++中的相同,大家看一看相关资料即可明白,
这里只给出一个例子,这个程序生成一系列点,线和三角形,程序以第一个程序为基础,
只改变DrawWithOpenGL()函数如下
void TForm1::DrawWithOpenGL()
{
HDC hDC;
hDC = wglGetCurrentDC();
int i;
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
randomize(); // 使用随机数,记得include进<stdlib.h>
//产生一系列点
glEnable(GL_POINT_SMOOTH);
//使用点的保真绘制,不妨去掉这行看看会发生什么
for(i=1;i<100;i++)
{
glPointSize((float)i/10.0f); //定义点的直径大小,以象素为单位
glBegin(GL_POINTS);
glColor3f((float)random(255)/255.0,
(float)random(255)/255.0,
(float)random(255)/255.0);
glVertex3f((float)random(255)/64,(float)random(255)/64,0);
glEnd();
}
glFlush();
SwapBuffers(hDC); Sleep(2000);
//暂停2000 ms,记得include进<WinBase.h>
//产生三条直线
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_STIPPLE);
glLineWidth(2.0f); //定义线宽,以象素为单位
glBegin(GL_LINES);
glColor3f(0.0f,1.0f,1.0f);
glVertex2f(1.0f,1.2f);
glVertex2f(3.0f,1.2f);
glColor3f(0.0f,0.0f,1.0f);
glVertex2f(1.0f,2.0f);
glColor3f(1.0f,1.0f,1.0f);
glVertex2f(3.0f,2.0f);
glEnd();
glLineStipple(1,0x00ff);
//定义线类型,0x00ff为模板,1为放大因子取值为[1,255]
glBegin(GL_LINES);
glVertex2f(1.0f,2.8f);
glVertex2f(3.0f,2.8f);
glEnd();
glFlush();
SwapBuffers(hDC);Sleep(2000);
//产生 一系列三角形
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
for(i=1;i<=30;i++)
{
glColor3f((float)random(255)/255.0,
(float)random(255)/255.0,
(float)random(255)/255.0);
glVertex3f((float)random(255)/64,
(float)random(255)/64,0);
}
glEnd();
glFlush();
SwapBuffers(hDC);
}
记得当初学这部分内容时,程序总是得不到正确结果,后来才发现一条重要的结论,
在glBegin()和lEnd()之间只能调用以下OpenGL函数,而且glBegin()和glEnd()必须成对
使用,否则会得到不可预期错误。
glVertex() 定义顶点坐标
glColor() 定义当前颜色
glIndex() 设置当前颜色索引
glNormal() 定义法向矢量
glEvalCoord() 生成坐标
glCallList() 调用显示列表
glTexCoord() 定义纹理坐标
glEdgeFlag() 控制边缘的绘制
glMaterial() 设置材质属性
写到这里OpenGL编程基本概念就介绍完了,大家对OpenGL大概有了一个基本认识,编
一些简单的程序去唬人大概没问题,从下一节开始,我开始介绍一些较深入的东西。
--
念天地之悠悠,
独沧然而泪下,
知我者谓我心忧,
不知我者谓我何求......
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: rhine.bbs@smth.org]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.671毫秒