OpenGL:使用顶点数组法绘制正六面体
在今天的opengl的课程以及实验中,我们学习了如何使用顶点数组的方法来绘制图形,但相信还有很多同学对它的实际使用方法不太了解,我们就用我们今天实验课上的实例来简单讲解一下
题目及要求
绘制一个正六面体,正面以填充方式绘制,背面以轮廓线的形式绘制,坐标自拟
思路解析
首先,我们需要定义一个数组,用来存放所有的顶点,为了方便理解,我们可以画一个草图:

这样,我们就可以写出顶点坐标数组:
//存放所有顶点坐标的数组
float vertex_list[][] =
{
{,,},
{,,},
{,,},
{,,}, {,,},
{,,},
{,,},
{,,}
};
接下来,我们需要一个顶点坐标的索引数组,索引数组用来表示的是顶点被绘制的顺序,每个点的编号代表的是顶点坐标数组中该点对应的下标。
例如,点(0,0,0)用数组表示为 vertex_list[0],则(0,0,0)为0号点,则上述数组中所有点的编号为:

我们将顶点编号完毕之后,我们就可以来定义点的绘制顺序了。
我们用0123的顺序绘制第一个面,4567的顺序绘制第二个面,2761的顺序绘制第二个面,3450的顺序绘制第四个面。
写成数组形式如下:
//存放数组索引的数组,可以近似地理解为顶点被绘制的顺序
int index_list[] =
{
,,,,
,,,,
,,,,
,,,
};
这样一来,四个侧面都绘制完毕,由于上下两个面直接由四个侧面拼接而成了,所以没有必要非要绘制。
顶点数组和索引数组都被定义完毕,接下来我们可以进行正式的代码书写了。
完整代码及其结果
#include<gl/glut.h>
//存放所有顶点坐标的数组
float vertex_list[][] =
{
{,,},
{,,},
{,,},
{,,}, {,,},
{,,},
{,,},
{,,}
}; //存放数组索引的数组,可以近似地理解为顶点被绘制的顺序
int index_list[] =
{
,,,,
,,,,
,,,,
,,,
}; void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glOrtho(-, , -, , -, ); //设置屏幕的显示范围
glPolygonMode(GL_FRONT, GL_FILL); //设置正面为填充类型
glPolygonMode(GL_BACK, GL_LINE); //设置背面为轮廓线类型
glFrontFace(GL_CCW); //将逆时针设置为正面
glRotatef(, -, , ); //将图形旋转一下以便看得更直观 glEnableClientState(GL_VERTEX_ARRAY); //启用顶点数组
glVertexPointer(, GL_FLOAT, , vertex_list); //指定顶点数组
//按照索引数组中指出的数组依次调用glVertex函数,16表示的是调用的次数
glDrawElements(GL_QUADS, , GL_UNSIGNED_INT, index_list); glFlush();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(, );
glutInitWindowSize(, );
glutCreateWindow("正六面体");
glutDisplayFunc(display);
glutMainLoop();
return ;
}

OpenGL:使用顶点数组法绘制正六面体的更多相关文章
- OpenGL顶点数组
概述 作为在立即模式(glBegin()与glEnd()之间)下指定单个顶点数据的替代,你可以保存顶点数据在一组列表中,包括顶点位置.法线.纹理坐标与颜色信息.并且你可以通过索引数组解引用数组元素绘制 ...
- WebGL2系列之顶点数组对象
使用了顶点缓冲技术后,绘制效率有了较大的提升.但是还有一点不尽如人意,那就是顶点的位置坐标.法向量.纹理坐标等不同方面的数据每次使用时需要单独指定,重复了一些不必要的工作.WebGL2提供了一种专门用 ...
- [转]OpenGL通过VBO实现顶点数组绘制顶点
#include "stdlib.h" #include <OpenGL/glext.h> #include <GLUT/GLUT.h> #define B ...
- OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别
OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...
- openGL 提升渲染性能 之 顶点数组 VBO IBO VAO
使用openGL图形库绘制,都需要通过openGL接口向图像显卡提交顶点数据,显卡根据提交的数据绘制出相应的图形. openGL绘制方式有:直接模式,显示列表,顶点数组,顶点索引. 直接模式:最简单, ...
- OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
顶点数组函数可以在一个数组里包含大量的与顶点相关的数据,并且可以减少函数的调用.使用顶点数组需要先启用顶点数组功能,使用glEnableClientState函数启用顶点数组,参数可以是GL_VERT ...
- 3D Computer Grapihcs Using OpenGL - 19 Vertex Array Object(顶点数组对象)
大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上.因此直到教程已经进行了一大半,作者才引入VAO这个概念.在我看 ...
- opengl es中不同的绘制方式
opengl es中不同的绘制方式 转载请保留出处:http://xiaxveliang.blog.163.com/blog/static/297080342013467344263/ 1. GL_P ...
- OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序第二 ...
随机推荐
- 用户不再sudoers文件中
1.修改/etc/sudoers文件权限 # chmod 777 /etc/sudoers 2.编辑/etc/sudoers文件,添加要提升权限的用户: 在文件中找到root ALL=(ALL) AL ...
- 等我干IT发财了,就和你离婚。。。。。
01 “等我干IT发财了,就和你离婚” 他淡淡地说 听完后,她心里暖暖的, 她想,没有比这更天长地久. 海枯石烂的承诺了. ——2018年度最佳微小说奖 02 “等我干IT发财了,我就买房和你结婚.” ...
- 使用ramdisk内存分区给常用软件加速
::参考内存盘软件https://download.csdn.net/download/zly6tz/9717137cls @echo off ::内存虚拟盘符-内存盘大小自己查看源目录大小 ::下面 ...
- SDN2017 第二次作业
阅读文章<软件定义网络(SDN)研究进展>,并根据所阅读的文章,书写一篇博客,回答以下问题(至少3个): 1.为什么需要SDN?SDN特点? 2.SDN的基本思想? 3.ONF全称是什么, ...
- Lombok快速上手(安装、使用与注解参数)
目录 Lombok插件安装与使用说明 常见参数 lombok的依赖于安装 依赖管理 IDEA插件的安装 @Data小例子 扩展@ToString 构造器注解扩展 @Log及其他日志注解 资料链接 Lo ...
- iptables设置规则
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8080 -j ACCEPT 添加到最后一条iptables -I INPUT -p tcp --dpor ...
- pyspider爬取数据导入mysql--1.安装驱动
接上篇,刚装好的pyspider,我们打算大显身手,抓一批数据到mysql中. 然而,出师未捷,提示我们:ImportError: No module named MySQLdb 这是因为还没有安装M ...
- Ubuntu18.04安装Teamviewer
首先,打开TeamViewer的下载页面,下载Debian/Ubuntu的Deb安装包. 这里有64位和32位安装包选项.可以在Terminal(终端)中输入uname -a 查看自己系统版本是64位 ...
- HDU 3861 The King’s Problem(tarjan缩点+最小路径覆盖:sig-最大二分匹配数,经典题)
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 4-51单片机ESP8266学习-AT指令(测试TCP服务器--使用串口调试助手--不连接路由器)
上一篇连接 http://www.cnblogs.com/yangfengwu/p/8757513.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXN ...