[原]OpenGL基础教程(二)多边形绘制
上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行。
为什么要使用索引方式,总体来说提高性能。如何提高:使用顶点数组的好处是避免大量的函数调用。即避免每画一个顶点就调用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[] = {,,};
void init()
{
glEnableClientState(GL_VERTEX_ARRAY);//激活顶点数组
glVertexPointer(,GL_FLOAT,,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<)
{
h=;
}
glViewport(,,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-,,-,,-,);
} int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc, (char**) argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(,);
glutInitWindowSize(,);
glutCreateWindow("Hello OpenGL");
glutDisplayFunc(renderScene);
glutReshapeFunc(Reshape);
init();
glutMainLoop();//enters the GLUT event processing loop.
return ;
}
效果如下:

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

下一篇介绍多边形贴纹理
[原]OpenGL基础教程(二)多边形绘制的更多相关文章
- [原]OpenGL基础教程(一)多边形绘制
1.opengl开发环境搭建 参考http://brothergrup.iteye.com/blog/1602471 2.为三角形填充颜色: 填充颜色函数为glColor(3/4)*(r,g,b) ...
- [原]OpenGL基础教程(四)VBO+纹理绘制四边形
工程下载地址:http://pan.baidu.com/s/1ntr7NHv 提取码:yf1h 一.本文牵扯知识点梳理: (1)VBO (2)纹理 (3)libpng(加载png) (4)shader ...
- [原]OpenGL基础教程(五)缓冲区数据更新方式
1.glBufferSubData 适用于相同数据类型 void SetPositionY(float y){ vector<Vector3<float>>::itera ...
- WebGL入门教程(二)-webgl绘制三角形
前面已经介绍过了webgl,WebGL入门教程(一)-初识webgl(http://www.cnblogs.com/bsman/p/6128447.html),也知道了如何绘制一个点,接下来就用web ...
- OpenGL编程(二)绘制矩形
上次只是创建了一个简单的窗口,把背景颜色修改为蓝色(默认是黑色),并没有向窗口添加任何图形.这次在上次代码的基础上往窗口中添加一个矩形,设置矩形的颜色,大小等. 1.添加矩形 在(参考上次代码)ren ...
- OpenGL入门程序二:绘制简单的圆
学习 绘制一个圆: ; const float Pi = 3.1415926536f; const float R = 0.5f; //绘制一个圆 void DrawCircle() { //绘制一个 ...
- MySQL8.0数据库基础教程(二)-理解"关系"
1 SQL 的哲学 形如 Linux 哲学一切都是文件,在 SQL 领域也有这样一条至理名言 一切都是关系 2 关系数据库 所谓关系数据库(Relational database)是创建在关系模型基础 ...
- Java基础教程——二维数组
二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...
- numpy基础教程--二维数组的转置
使用numpy库可以快速将一个二维数组进行转置,方法有三种 1.使用numpy包里面的transpose()可以快速将一个二维数组转置 2.使用.T属性快速转置 3.使用swapaxes(1, 0)方 ...
随机推荐
- SQL语句 in和inner join各有什么优点
比如A1表 100W行 A2表50W行select a.* from A1 a where a.column1 in (select b.column1 from A2 b where b.colum ...
- openSUSE 13.1 Milestone 4 发布
openSUSE 13.1 发布第四个里程碑版本,下载地址: openSUSE-Factory-KDE-Live-Build0652-x86_64.iso (949MB, MD5, torrent) ...
- ibatis + log4net 配置注意事项
一 在web.config或app.config中配置 <configuration> <configSections> <sectionGroup name=" ...
- jquery 判断手势滑动方向(上下左右)
$('body').on('click', '.placeholder img', function(e) { //touchstart在你之前发生,不管些什么,都先执行下面的 }); $('body ...
- node.js在windows环境下的安装
node.js官网 https://nodejs.org/en/ Download
- U盘启动笔记本无法安装Win7问题和解决
用“大白菜”工具制作启动U盘,从U盘启动后进入Win PE环境安装Win7,提示“安装win7系统安装程序无法创建新的系统分区,也无法定位现有系统分区”.经以下各种努力后仍无法正常安装: 在BIOS里 ...
- Activiti 删除key值相同的所有不同版本的流程定义
package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...
- PHP 7問世,2億網站效能翻倍有望
經過10年的漫長等待,PHP 7終於正式問世了.這個影響全球8成網站的開發語言,一舉從5.0版,跳過了功敗垂成的6.0版,一舉進入了7.0時代. 20年前初夏,1995年6月8日,一位愛解決問題的C語 ...
- Redis & Python/Django 简单用户登陆
一.Redis key相关操作: 1.del key [key..] 删除一个或多个key,如果不存在则忽略 2.keys pattern keys模式匹配,符合glob风格通配符,glob风格的通配 ...
- A Xamarin.Forms Infinite Scrolling ListView
from:http://www.codenutz.com/lac09-xamarin-forms-infinite-scrolling-listview/ The last few months ha ...