发信人: 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毫秒