OpenGL学习总结(2)

在OpenGL中,当我们需要绘制点、直线和多边形时,我们需要用“点”来填充像素,从而将图像显示出来。因此,“点 ”是一切的基础,在OpenGL中,提供了一系列的函数来指定点,这些函数的共同点如下:

都以glVertex为开头,后面跟一个数字和1-2个字母。例如:
glVertex2d
glVertex2f
glVertex3f
glVertex3fv
等等。
数字表示参数的个数,2表示有两个参数,3表示三个,4表示四个(我知道有点罗嗦~)。
字母表示参数的类型,s表示16位整数(OpenGL中将这个类型定义为GLshort),
                   i表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei),
                   f表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf),
d表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。
                   v表示传递的几个参数将使用指针的方式,见下面的例子。
这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能是等效的:
(一)glVertex2i(1, 3);
(二)glVertex2f(1.0f, 3.0f);
(三)glVertex3f(1.0f, 3.0f, 0.0f);
(四)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);
(五)GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};
      glVertex3fv(VertexArr3);

我们可以用glVertex*来表示这一系列函数。

我们在设置好若干个点之后,这些点将按照什么标准来连接在一起呢?

为了解决这一问题,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等。

关于哥哥宏的具体含义可以参考如下:宏定义含义

下面我们将举例画一个圆形:

/*
正四边形,正五边形,正六边形,……,直到正n边形,当n越大时,这个图形就越接近圆
当n大到一定程度后,人眼将无法把它跟真正的圆相区别
这时我们已经成功的画出了一个“圆”
(注:画圆的方法很多,这里使用的是比较简单,但效率较低的一种)
试修改下面的const int n的值,观察当n=3,4,5,8,10,15,20,30,50等不同数值时输出的变化情况
将GL_POLYGON改为GL_LINE_LOOP、GL_POINTS等其它方式,观察输出的变化情况
*/

 

include <GL/glut.h>

#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();}

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; 

} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值