OpenGL的学习(二)

本节目的:绘制简单图形

(一)OpenGL中点是一切的基础,所以先来看一下如何画一个点。

   如何画一个点呢?OpenGL提供了一系列函数,都是以glVertex开头的,后面跟1-2个字母,例如:

glVertex2d

glVertex2f

glVertex3f

glVertex3fv

数字表示参数的个数,2表示两个参数 , 3表示3各参数…… 字母表示参数的类型。熟悉其他语言的都应该能猜得到。

s表示16位整数,(OpenGL中讲个这类型定义为GLshort)

i表示32位整数(OpenGL中将这个类型定义为GLint 和 GLsizei)

f表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf)

d表示64位浮点数(OpenGL中将这个类型定义为GLdouble 和 GLclampd)

v表示传递的几个参数将使用指针方式。

(二)开始绘图

图本质是有点构成的,OpenGL如何知道这些点是用来构成什么的?直线?曲线?面?所以 为了解决这一问题,OpenGL要求:指定定点的命令必须包含在glBegin之后,glEnd之前(否则指定的定点将被忽略)并由glBegin指定如何使用这些点。

例:

glBegin(GL_POINTS);
    glVertex2f(0.0f,0.0f);
    glVertex2f(0.5f,0.0f);
glEnd();
执行完以上代码以后,这两个点将会被画出来,如果将GL_POINTS改为GL_LINES,泽这两个点被认为是这条直线的端点,OpenGL将会画出一条直线。

glBegin支持的方式除了 GL_POINTS和GL_LINES ,还有GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN

大致效果如图所示:


模式:

void myDisplay(void)
{
       glClear(GL_COLOR_BUFFER_BIT);
       glBegin(/*在这里填所希望的模式*/);
           /*在这里使用glVertex函数*/;
           /*指定你所希望的定点位置*/;
       glEnd();
       glFlush();
}

第一个例子:画一个圆

/*****************************************************************************************

正四边形、正五边形、正六边形、……知道正n边形,当n越大的时候,这个图形就越接近圆,当n大到一定程度的时候,人们肉眼就无法把它和真正的圆分清了,这是我们就成功画了一个圆形

(注:画圆的方法很多,这里使用的是较简单,但效率较低的一种)。

试着修改下面程序中 const int n 的数值, 观察当 n = 3 , 4 ,5 ,6 ……20 , 40 ,50 ……等不同数值时输出变化,将GL_POLYGON改为GL_LINE_LOOP、GL_POINTS等其它方式,观察输出结果的变化,

*****************************************************************************************/

#include<math.h>
const int n = 20 ;
const GLfloat R = 0.5f ;
const GLfloat Pi = 3.1415926536f;

void myDisplay(void)
{
       int i ;
       glClear(GL_COLOR_BUFFER_BIT);
       glBegin(GL_POLYGON);
       for( i = 0 ; i < n ; i++ )
            glVertex2f( R*cos(2*Pi/n*i) ,R*sin(2*Pi/n*i) );
       glEnd();
       glFlush():
}

第二个例子:画一个五角星

(暂缺)

第三个例子:画一个正弦函数图像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值