课本例子:

彩色立方体

#include<gl/glut.h>
#include<math.h>
#include<stdlib.h>//窗口大小
int width = 600;
int height = 600;//a point data type
typedef GLfloat point4[4];
typedef GLfloat color4[4];/*
point4 vertices[8] = {{-1.0, -1.0, -1.0, 1.0}, {1.0, -1.0, -1.0, 1.0}, {1.0, 1.0, -1.0, 1.0}, {-1.0, 1.0, -1.0, 1.0},{-1.0, -1.0, 1.0, 1.0},  {1.0, -1.0, 1.0, 1.0},  {1.0, 1.0, 1.0, 1.0},  {-1.0, 1.0, 1.0, 1.0}};*//*point4 vertices[8] = {{-1.0, -1.0, 1.0, 1.0}, {-1.0, 1.0, 1.0, 1.0}, {1.0, 1.0, 1.0, 1.0}, {1.0, -1.0, 1.0, 1.0},{-1.0, -1.0, -1.0, 1.0},  {-1.0, 1.0, -1.0, 1.0},  {1.0, 1.0, -1.0, 1.0},  {1.0, -1.0, -1.0, 1.0}};*/
//0.5
point4 vertices[8] = {{-0.5, -0.5, 0.5, 1.0}, {-0.5, 0.5, 0.5, 1.0}, {0.5, 0.5, 0.5, 1.0}, {0.5, -0.5, 0.5, 1.0},{-0.5, -0.5, -0.5, 1.0},  {-0.5, 0.5, -0.5, 1.0},  {0.5, 0.5, -0.5, 1.0},  {0.5, -0.5, -0.5, 1.0}};color4 colors[8] = {{1.0, 0.0, 0.0, 1.0}, {1.0, 0.0, 0.0, 1.0}, {1.0, 1.0, 0.0, 1.0}, {0.0, 1.0, 0.0, 1.0},{0.0, 0.0, 1.0, 1.0}, {1.0, 0.0, 1.0, 1.0}, {0.0, 1.0, 1.0, 1.0}, {1.0, 1.0, 1.0, 1.0}};color4 quad_color[36];
point4 points[36];int i = 0;void quad(int a, int b, int c, int d)
{for (int j=0; j<4; j++) {quad_color[i][j] = colors[a][j];points[i][j] = vertices[a][j];}glVertex4fv(points[i]);i++;for (int j=0; j<4; j++) {quad_color[i][j] = colors[b][j];points[i][j] = vertices[b][j];}glVertex4fv(points[i]);i++;for (int j=0; j<4; j++) {quad_color[i][j] = colors[c][j];points[i][j] = vertices[c][j];}glVertex4fv(points[i]);i++;for (int j=0; j<4; j++) {quad_color[i][j] = colors[a][j];points[i][j] = vertices[a][j];}glVertex4fv(points[i]);i++;for (int j=0; j<4; j++) {quad_color[i][j] = colors[c][j];points[i][j] = vertices[c][j];}glVertex4fv(points[i]);i++;for (int j=0; j<4; j++) {quad_color[i][j] = colors[d][j];points[i][j] = vertices[d][j];}glVertex4fv(points[i]);i++;
}void colorcube()
{quad(0, 3, 2, 1);quad(2, 3, 7, 6);quad(3, 0, 4, 7);quad(1, 2, 6, 5);quad(4, 5, 6, 7);quad(5, 4, 0, 1);
}void renderScene(void)
{glClearColor(1.0, 1.0, 1.0, 0.0);//注意事项:要在glClear之前设置color!glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 清除屏幕及深度缓存glViewport(0,0,(GLsizei)width,(GLsizei)height);glMatrixMode(GL_PROJECTION);//投影矩阵glLoadIdentity();gluPerspective(45, width/height, 1, 1000);glMatrixMode(GL_MODELVIEW);//模型矩阵glLoadIdentity();gluLookAt(0, 0, 3, 0, 0, 0, 0, 1, 0);glRotatef(30, 1, 0, 0);//绕x轴旋转glEnable(GL_DEPTH_TEST);glEnableClientState(GL_VERTEX_ARRAY);colorcube();glVertexPointer(4, GL_FLOAT, 0, points);glEnableClientState(GL_COLOR_ARRAY);//启用颜色数组glColorPointer(4, GL_FLOAT, 0, quad_color);glDrawArrays(GL_TRIANGLES, 0, 36);glutSwapBuffers();//当窗口模式为双缓存时,此函数的功能就是把后台缓存的内容交换到前台显示。当然,只有单缓存时,使用它的功能跟用glFlush()一样。而使用双缓存是为了把完整图画一次性显示在窗口上,或者是为了实现动画。
}void myReshape(int w, int h)
{if (h == 0) h = 1;glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);//投影矩阵glLoadIdentity();gluPerspective(45, width/height, 1, 1000);
}int main(int argc, char *argv[])
{glutInit(&argc, argv);//初始化GLUTglutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//设置图形显示模式。GLUT_DEPTH:使用深度缓存;GLUT_DOUBLE:使用双缓存;glutInitWindowPosition(100, 100);//设置窗口显示位置glutInitWindowSize(600,600);//设置窗口大小glutCreateWindow("Colored Cube");//创建带标题的窗口glutDisplayFunc(renderScene);//为当前窗口设置显示回调函数glutMainLoop();//进入GLUT事件处理循环return 0;
}

OpenGL 练习06 ColorCube相关推荐

  1. [置顶] 我的iOS作品

    我的iOS作品 罗朝辉 ( http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前言 做了好几年的 iOS 开发了,业余也零零散散地写了不少代码和博文教程.可惜一直 ...

  2. (zt)西蒙iphone-OpenGL ES

    转自:http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost& ...

  3. Visual Studio 2019 和 qt 5.15.1 下 opengl 的运用 - Lighting - 06 - MultipleLights

    学习learnopengl文章对应地址: https://learnopengl-cn.github.io/02%20Lighting/06%20Multiple%20lights/ VS.qt版本分 ...

  4. OpenGL ES 2 0 (iOS)[06 1]:基础纹理

    前言:如果你没有 OpenGL ES 2 的基础知识,请先移步 <OpenGL ES 2.0 (iOS) 笔记大纲> 学习一下基础的知识. 目录 一.软件运行效果演示 (一).最终效果 ( ...

  5. 教你实现GPUImage【OpenGL渲染原理】

    原文出处: 袁峥Seemygo(@袁峥Seemygo)    一.前言 本篇主要讲解GPUImage底层是如何渲染的,GPUImage底层使用的是OPENGL,操控GPU来实现屏幕展示 由于网上Ope ...

  6. OpenGL(glut)模拟太阳系:太阳,地球,月球,火星

    GitHub项目地址OpenGL(glut)模拟太阳系:太阳,地球,月球,火星 核心代码如下: // orgin.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并 ...

  7. [转]HDR渲染器的实现(基于OpenGL)

    http://dev.gameres.com/Program/Visual/3D/HDRTutorial/HDRTutorial.htm 作者:何咏(欢迎和大家交流,我的QQ:35574585,Ema ...

  8. OpenGL纹理上下颠倒翻转的三种解决办法(转)

    综述 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题.原因是因为OpenGL要求纹理坐标原点在图片最下面,如图: 而图片信息中的原点一般都在最上方,一行行记录下来的,就会导致整个图 ...

  9. 使用OpenGL Shader实现放大镜效果

    使用OpenGL Shader实现放大镜效果 2014年3月16日renjihe发表评论阅读评论 周末闲来无事,想玩玩OpenGL Shader,想想就实现一个放大镜效果的Shader吧. 着色器可以 ...

最新文章

  1. 全面梳理百度世界大会:量产L4乘用车和两款音箱 还有挖掘机技术
  2. python整数类型进制表示_Python二进制、八进制、十六进制数字的表示和转换
  3. [NOI2011]兔兔与蛋蛋游戏 二分图博弈
  4. 【摘录】MTK按键扫描原理及相关代码
  5. 万师傅使用云产品,上手简单、开箱即用、省去运维烦恼
  6. 我听后很高兴的C++
  7. 亚马逊 html格式转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...
  8. yctx mysql.sql_MySQL 安装指南
  9. 4个mos管驱动的全桥电路原理_逆变器工作原理
  10. SQLServer2005 中 XML类型方法中 XQuery中变量的参数化--匆忙整理
  11. mysql 分组后,统计记录条数
  12. openGL超级宝典第七版
  13. mysql 统计函数 双条件_使用COUNTIFS函数统计符合多个条件的单元格的方法
  14. js:苹果手机页面返回,数据不刷新问题
  15. hhkb mac设置_键盘界的Iphone,硬件圈中的贵妇,HHKB键盘介绍及在MAC下的优化设置...
  16. 网页整体布局基本模板
  17. Team Foundation 中的带编号的错误和事件消息
  18. Android 8.0 SurfaceFlinger
  19. Verilog HDL基础知识
  20. 2-SII--应用本包下文件写入和读取

热门文章

  1. vue-devtools-master
  2. 安卓学习笔记之骚扰拦截
  3. 用python生成二维码并将APK文件部署到IIS站点变成二维码下载
  4. 使用QT程序控制Linux开发板上的继电器(一)
  5. 【踩错】解决ajax异步更新后控件的click事件失效的方法
  6. Page8:对偶原理以及结构分解[Linear System Theory]
  7. Echarts进度条式的柱状图
  8. Vue 登录手机号、密码格式验证及验证码60s获取
  9. TLC2543驱动2
  10. 学Python划重点 五 (处理Excel、Word、PDF实例)