上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行。

为什么要使用索引方式,总体来说提高性能。如何提高:使用顶点数组的好处是避免大量的函数调用。即避免每画一个顶点就调用1次glVertex*()。
另一个好处是避免多边形相邻顶点的冗余指定。例如正方体,分别描述6个正方形,会造成每个顶点被重复描述3次。

如果以上没有说服力,看看这个, gl.Begin(),gl.End()对是一种低效的方式,因此opengl es干脆不再支持他们了,同时高版本的opengl都在弃用gl.Begin(),gl.End()

先了解一些基本的API:

(1)glEnableClientState(枚举值),参数支持顶点,颜色等等。作用激活选择的数组,例如:glEnableClientState(GL_VERTEX_ARRAY)表示激活顶点数组

(2)glVertexPointer(size,type,stride,*pointer) size:每个顶点坐标的数量,type 每个坐标的数据类型,stride:连接顶点的之间的偏移值,pointer:顶点数据的指针;作用 :指定顶点数据的数组

与之同类的包括 顶点 法线 纹理等等。

(3)glDrawElements(model,count,type,indices) model:那种类型的图元(点 线 三角形等),count:数组的元素个数,type:数组中元素的数据类型,indices:存放索引的数组;作用:解引用数组元素的一个列表 我也没大明白啥意思,用熟了大概就理解了。

(4)glutReshapeFunc(func)  窗口大小发生改变时 会回调func

直接上代码:

#include "stdafx.h"
#include<gl/glut.h>
float vertices[] = {-50.0,-50.0,50.0,-50.0,-50.0,50.0,50.0,50.0};
GLuint indexs[] = {0,1,2};
void init()
{glEnableClientState(GL_VERTEX_ARRAY);//激活顶点数组glVertexPointer(2,GL_FLOAT,0,vertices);
}
void renderScene(void)
{  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glDrawElements(GL_TRIANGLES,sizeof(indexs),GL_UNSIGNED_INT,indexs);//以三角形方式绘制 sizeof(indexs)取得数组元素的个数glutSwapBuffers();
}  void Reshape(GLsizei w,GLsizei h)
{if(h<0){h=1;}glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-100,100,-100,100,-100,100);
}int _tmain(int argc, _TCHAR* argv[])
{  glutInit(&argc, (char**) argv);  glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);  glutInitWindowPosition(100,100);  glutInitWindowSize(320,320);  glutCreateWindow("Hello OpenGL");  glutDisplayFunc(renderScene); glutReshapeFunc(Reshape);init();glutMainLoop();//enters the GLUT event processing loop.  return 0;
}  

效果如下:

(5)白色太难看了吧 来给上点色(下面不会再贴全部代码,贴核心代码)

float colors[] = {1.0,0.0,0.0,
    1.0,0.0,0.0,
    1.0,0.0,0.0,
    1.0,0.0,0.0};//定义颜色数组

初始化函数里面激活颜色数组 并绑定颜色数组

glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3,GL_FLOAT,0,colors);

这不效果出来了:

(6)绘制四边形,非常easy,只需要改一下数组的索引 GLuint indexs[] = {0,1,2,2,3,1};

下一篇介绍多边形贴纹理

转载于:https://www.cnblogs.com/U-tansuo/p/opengl_Polygon_2.html

[原]OpenGL基础教程(二)多边形绘制相关推荐

  1. [原]OpenGL基础教程(一)多边形绘制

    1.opengl开发环境搭建 参考http://brothergrup.iteye.com/blog/1602471 2.为三角形填充颜色: 填充颜色函数为glColor(3/4)*(r,g,b)  ...

  2. Directx11基础教程二之Directx11初始化

    一,看本节教程前应该掌握: (1)掌握  D3D11基础教程一之D3D11框架 二,程序的结构如下: 具体在VS2015的代码: 三,程序的具体代码如下: 好的,下面D3D11的初始化我分为十二个步骤 ...

  3. ps原画基础教程 怎么自学原画

    日常生活中,美无处不在,无时不在,它陶冶我们的情操,净化我们的心灵.但这种美丽总是昙花一现,瞬间即逝,如何使这种美长存呢?记忆是短暂的,而画笔是你最好的工具,将它画下来.但有许多人不知怎么画,从哪画起 ...

  4. 【Python】全网最新最全Pyecharts可视化教程(二):绘制好看的交互式地图教程

    说到使用Python来进行地图的可视化那就一定少不了Pyecharts的身影,本文小编就对Pyecharts可实现的地图可视化进行一番探究,看看其出来的效果如何 1 Pyecharts-Map 首先要 ...

  5. python基础教程:Python绘制正余弦函数图像的方法

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 今天打算通过绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来 ...

  6. hadoop基础教程(二) MapReduce 单词统计

    1.这是hadoop基础系列教程,适合入门者学习. 2.MapReduce是一种分布式计算模型,解决海量数据问题,由两个阶段组成,map()和reduce().本文不讲解原理,下面实际操作利用MapR ...

  7. python怎么画余弦函数图像与性质_python基础教程:Python绘制正余弦函数图像的方法...

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 今天打算通过绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来 ...

  8. 麒麟子Javascript游戏编程零基础教程二:游戏程序员分工

    小伙子,能够走到这里,你已经不错了. 什么?你是妹子? 放心吧,入了这行,妹子也会被"汉化"的. 游戏程序员分工,以及对应的技能需求. 一.按大类划分 1.客户端程序员 负责处理客 ...

  9. java二维数组省略_Java基础教程——二维数组

    二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...

最新文章

  1. 部署kafka集群到服务器
  2. PHP之mb_internal_encoding使用
  3. swift学习笔记-UI篇之UIImageView
  4. codeforces 数论分析题
  5. 在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
  6. YBTOJ洛谷P1407:稳定婚姻(强连通分量)
  7. eclipse安装、使用hibernate插件方法
  8. 1分钟了解区块链的本质
  9. MongoDB 4.2 内核解析 - Change Stream
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_10_常用的函数式接口_Consumer接口中的默认方法andThen...
  11. 关于window10系统找不到Realtek高清晰音频管理器解决方法
  12. 学会二次创作后,网易云批量生产“好”音乐
  13. 2018的锅让2019来悲
  14. 一个IO控制很多个LED,这个技能你get到了吗
  15. Android开发——网络请求(一)网络请求的API、授权和方法
  16. 黑龙江民族职业学院数据备份集成
  17. 信息安全技术网络安全等级保护基本要求-结构变化
  18. 虚拟化技术:KVM介绍及试用
  19. ESD静电二极管|静电保护器件
  20. 【博文】:甲骨文收购AMD的缘由

热门文章

  1. 一文讲透鱼眼相机畸变矫正,及目标检测项目应用
  2. 博应用测评软件ofo小黄车和摩拜单车哪个更好骑
  3. 2010年F1大奖赛巴林揭幕战
  4. php 上标和下标,css如何显示文字的上标和下标
  5. 服务器a卡不能显示,“radeon设置暂时不可用,请连接amd显示卡后重试”怎么解决?...
  6. 网络检测,排错的顺序与方法
  7. 解决Windows10系统文件夹属性中没有【共享】选项办法
  8. PPT学习整理(三)合并形状
  9. java二重循环_java二重循环
  10. 【GO】23.Golang 测试库 testify