【openGL基础系列】之画一个正方体玩玩吧
【openGL基础系列】之画一个正方体玩玩吧
大家好,我是Lampard~~
欢迎来到openGL基础系列的博客
今天讲的是如何在openGL中画一个正方体
前言:大家都知道,一个正方体包括六个面 ,十二条线。所以我们创造一个正方体的时候既可以使用线的组合,也可以用面的组合来表示。为了让我们更加直观的看到这个正方体,我还在博客上参考了别人的算法,让整个正方体转起来。话不多说我们来看看代码和成品图吧:
1. 构建正方体的坐标
typedef GLint vertex3[3];
vertex3 pt[8] = {{0, 0, 0},{0, 1, 0},{1, 0, 0},{1, 1, 0},{0, 0, 1},{0, 1, 1},{1, 0, 1},{1, 1, 1}
};
2. 构建一个正方形
void quad(GLint n1, GLint n2, GLint n3, GLint n4){// 构建一个正方形glBegin(GL_QUADS);glVertex3iv(pt[n1]);glVertex3iv(pt[n2]);glVertex3iv(pt[n3]);glVertex3iv(pt[n4]);glEnd();
}
3. 构建一个正方体
void cube(void) {// 构建六个面quad(6, 2, 3, 7);quad(5, 1, 0, 4);quad(7, 3, 1, 5);quad(4, 0, 2, 6);quad(2, 0, 1, 3);quad(7, 5, 4, 6);
}
4. 让整个正方体旋转起来
static float rotate = 0;
static int times = 0;void renderScene(void)
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW); // 对模型视景进行操作glLoadIdentity(); // 将当前矩阵设置为单位矩阵glPushMatrix(); // 保存当前的位置times++;if (times > 100){times = 0;}if (times % 100 == 0){rotate += 0.3;}glRotatef(rotate, 0, 1, 0);glRotatef(rotate, 1, 0, 0);glColor3f(255, 255, 255);cube();glPopMatrix(); // 返回之前的位置glutSwapBuffers(); // 使用双缓冲模式存储
}void main(int argc, char **argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); // 使用双缓冲glutInitWindowPosition(100, 100);glutInitWindowSize(500, 500);glutCreateWindow("GLDemo");glutDisplayFunc(renderScene);glutIdleFunc(renderScene); // 不断的执行回调直至下一个窗口事件的发生glutMainLoop();
}
以上已经加上了我对代码的备注,对于旋转的算法我暂时也了解得不太清楚,我们就先知道他怎么用,之后再慢慢理解其原理。现在我们来看看我们的成品:
OK,本章内容到此结束,更多内容,敬请关注!!!
各位大佬记得点赞关注支持........
【openGL基础系列】之画一个正方体玩玩吧相关推荐
- 无聊画一个五角星玩玩
无聊,画一个五角星玩玩 code https://github.com/char0xface/five_pointed_star EXE 链接:https://pan.baidu.com/s ...
- OpenGL学习笔记(2) 画一个正方形
画一个正方形 其实,画正方形就是画两个三角形,用四个顶点以及使用索引来实现 完整代码在Square项目的Application.cpp里 先贴上窗口初始化代码 void BaseInit() {glf ...
- OpenGL基础13:第一个正方体
我们已经进入了3D世界了,想办法生成一个最简单的3D图形:正方体吧 一.生成一块箱子 接上一章的代码,其实如果前面12章都完全理解了,应该可以直接写出生成正方体的代码(不就是多5个面嘛) 为了简单化, ...
- Turtle系列之画一个简易的交通标志,安排安排【留作业】
导语 哈喽!我是木木子!中秋过完大家想我了没? 之前给大家说过的嘛--最近练车断断续续更新,今天告诉大家一个好消息驾照拿到手了! 哈哈哈哈 !对我来说是蛮高兴的事情滴,这就要说起交通标志了: 这大家熟 ...
- 【Python基础系列】每天一个小程序-01
文章目录 题目 参考代码 代码分析 题目 第0000题 将你的 QQ 头像(或者微博/信头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果. 参考代码 from PIL ...
- Jmeter基础系列4-创建一个HTTP请求实例
在前面的章节我们介绍了软件的图形化界面的认识,还有元件的简单介绍,现在我们就可以开启创建第一个Jmeter测试用例吧. 1.新建一个Test Plan,保存之后左侧的测试计划的名称就会变成新的. 2. ...
- 用excel 调用solidworks 2018 画一个正方体,长在excel sheet1的A1位置,宽在excel sheet1的B1位置,高在excel sheet1的C1位置,写出代码...
可以使用以下代码:Sub Create_Cube() Dim swApp As Object Dim swModel As Object Dim swDrawing As Object Dim swS ...
- OpenGL基础29:深度测试
前置:OpenGL基础11:空间 一.深度测试 在 OpenGL基础13:第一个正方体 这一章中,就开始用深度测试了 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一 ...
- OpenGL基础22:贴图
在 OpenGL基础13:第一个正方体 中给正方体加了箱子的纹理,但是在后面介绍光照的时候又把纹理属性给丢了,现在尝试在有纹理的基础之上增加光照 一.漫反射贴图 先把之前的纹理加回去 顶点着色器和主代 ...
- 怎样快速画出一个正方体_小学数学非常有效的“画图”解题法,快速解题的“金钥匙”...
小学阶段的数学主要培养的是孩子的逻辑思维能力,是从形象思维逐步过度到抽象思维的过程,如果在小学阶段没有将基础打牢,那么等孩子上初中后面对更复杂的学习内容,就会变得更吃力. 在小学数学中,"画 ...
最新文章
- Python中的运算符
- python转盘抽奖概率_转盘指定概率抽奖
- unity3d模拟树叶飘动_Unity3D独立游戏开发日记(一):动态生成树木
- 数据库设计笔记——关系型数据库基础知识(三)
- 第13步 用户模块前端(Admin)
- 操作系统时间片轮换_《操作系统_时间片轮转RR进程调度算法》
- Taro+react开发(87):图片引入
- access vba在新建查询前查看查询名是否存在
- Kafka 与Spark的集成
- linux sed打印功能,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- web前端 html+css+javascript网页设计实例 企业网站制作
- 想查看实时卫星影像?最近一周就不错了
- Openstack 简单梳理,(自用 慎点)
- 认知世界(1)--学与思
- 记录解决问题--Linux服务器连接超时
- 优选法中的黄金分割法
- 爱因斯坦的题目:在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶.....................
- 单选框,下拉框,复选框 的回显
- 计算机音乐凉凉6,凉凉(伴奏) MIDI File Download :: MidiShow
- python上网_西电免流量限制上网攻略!Python实现PPPOE攻击工具,秒杀拨号上网
热门文章
- 美国加拿大结婚证公证及使馆认证流程时间用于国内法院离婚
- 退欧令英国科技业措手不及,可能不再享受多项利好政策
- Hibernate - HQL对象检索详解
- The Witness - 美不胜收的解谜游戏
- 计算机二级excel设置宏,Excel2013中为宏指定快捷键的方法
- 继续教育计算机组成试卷,计算机继续教育考试模拟练习.doc
- 大二下-企业级信息系统设计与开发笔记18(Spring Boot整合Redis)
- 人工智能 2 级就来越塔来杀我,论文已被NeurIPS收录!
- 解决win10开启移动热点共享手机连上后无法上网的问题
- CAD创建以及自动加载脚本文件*scr