OpenGL基础(二) 顶点数组

1.普通的绘制顶点的方式

1)逐个定点指定

例如 glBegin(GL_POLYGON)

{

glVertex3f(0.25, 0.25, 0.0);

glVertex3f.........

}

2)利用二维数组建一个顶点的向量数组

void drawVertex()
{
    GLfloat vertexList[4][3] = { {-1.0,-1.0,0.0},{1.0,-1.0,0.0},{1.0,1.0,0.0},{-1.0,1.0,0.0} };
    glBegin(GL_POLYGON);
    for (int i = 0; i < 4; i++)
        glVertex3f(vertexList[i][0], vertexList[i][1], vertexList[i][2]);
    glEnd();
}

顶点绘制语句放在display函数里

2.顶点数组

分步解析

1)建立数据:工作量比较大)

2)启用数组:几个语句

3)往OpenGL的顶点数组对象里存数(保存在客户端存储器):

需要注意参数设置,包括数据量大小,每隔几个读一个数据,以及数据来源的数组指针

4)取用数据到服务器进行绘图

有三种模式,语句调用

代码示例:

 1 void drawVertex()
 2 {//定义数据
 3     static GLfloat vertices[] = 
 4     {-1.0,-1.0,0.0,
 5         0.0,-0.5,0.0,
 6         0.5,-1.0,0.0,
 7         1.0,0.0,0.0,
 8         1.0,1.0,0.0,
 9         0.0,1.0,0.0,
10         -0.5,0.0,0.0,
11         -1.0,1.0,0.0,
12     };
13 //启用数组 并指定数组类型
14     glEnableClientState(GL_VERTEX_ARRAY);
15 //传数据给顶点数组
16     glVertexPointer(3, GL_FLOAT, 0, vertices);
17 //使用顶点数组绘图
18     glDrawArrays(GL_POLYGON, 0, 8);
19 }

把这个函数写到display里

 

 

 

附:一个简单(未加变换、光照)OpenGL程序的所需的基本代码模板

// Basic line.

#include "stdafx.h"
#include<gl/glut.h>
#include<stdlib.h>
#include<stdio.h>
#include<iostream>

void init(void)//这个函数在程序开始被调用一次
{
    glClearColor(1.0, 1.0, 1.0,0.0);//设置清屏色
    glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, -2.0);//设置视见体还是什么的
}

void display(void)//每次重新绘制屏幕的时候都要调用一次
{
    glClear(GL_COLOR_BUFFER_BIT);//清楚颜色缓存
    glColor3f(0.0, 0.0, 1.0);//当前颜料的颜色

    //在这里写绘制函数

    glutSwapBuffers();//动画显示
    //glFlush();//静态显示 赶紧显示
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);//glut库与控制台初始化函数
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);//显示模式 单双缓存 颜色模式 深度
    //glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(500, 200);//窗口的位置??窗口左上角距离屏幕左上角?
    glutInitWindowSize(500, 500);
    glutCreateWindow(" eeo ");//窗口名字
    init();//调用自定义的初始化函数
    glutDisplayFunc(display);//注册显示回调函数
    glutMainLoop();//进入事件循环
    return 0;
}
Basic Code of a OpenGL Program

 

posted @ 2017-07-05 14:58  皓琪  Views(731)  Comments(0)    收藏  举报