直接画

#include <windows.h>
#include <GL/glut.h>
#include <stdio.h>
#include <string>
#include <iostream> // 绘制立方体 // 将立方体的八个顶点保存到一个数组里面 static const float vertex_list[][3] =
{
-0.5f, -0.5f, -0.5f,//0
0.5f, -0.5f, -0.5f,//1
-0.5f, 0.5f, -0.5f,//2
0.5f, 0.5f, -0.5f,//3 -0.5f, -0.5f, 0.5f,//4
0.5f, -0.5f, 0.5f,//5
-0.5f, 0.5f, 0.5f,//6
0.5f, 0.5f, 0.5f,//7
}; // 将要使用的顶点的序号保存到一个数组里面 static const GLint index_list[][3] =
{
0,5,1,
0,4,5,
0,3,1,
0,3,2,
0,6,2,
0,6,4,
5,6,4,
5,6,7,
5,3,1,
5,3,7,
3,6,2,
3,6,7, }; // 绘制立方体 void DrawCube(void)
{
int i, j; glBegin(GL_TRIANGLES);
for (i = 0; i<12; ++i) // 12 三角形 {
for (j = 0; j<3; ++j) // 每个三角形3顶点 {
glVertex3fv(vertex_list[index_list[i][j]]);
}
}
glEnd();
} 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(); /*glTranslatef(-0.2, 0, 0);*/ // 平移 //glScalef(2, 1, 1); // 缩放 times++;
if (times > 100)
{
times = 0;
} if (times % 100 == 0)
{
rotate += 2;
} glRotatef(rotate, 1, 0, 0);
glRotatef(rotate, 0, 1, 0); glColor3f(0, 0, 1); DrawCube(); 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");
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene);
glutMainLoop();
}

GL_TRIANGLE_STRIP方法

#include <windows.h>
#include <GL/glut.h>
#include <stdio.h>
#include <string>
#include <iostream> // 绘制立方体 // 将立方体的八个顶点保存到一个数组里面 static const float vertex_list[][3] =
{
-0.5f, -0.5f, -0.5f,//0
0.5f, -0.5f, -0.5f,//1
-0.5f, 0.5f, -0.5f,//2
0.5f, 0.5f, -0.5f,//3 -0.5f, -0.5f, 0.5f,//4
0.5f, -0.5f, 0.5f,//5
-0.5f, 0.5f, 0.5f,//6
0.5f, 0.5f, 0.5f,//7
}; void display(void){ glBegin(GL_TRIANGLE_STRIP);
glVertex3fv(vertex_list[0]);
glVertex3fv(vertex_list[1]);
glVertex3fv(vertex_list[2]);
glVertex3fv(vertex_list[3]);
glVertex3fv(vertex_list[6]);
glVertex3fv(vertex_list[7]);
glVertex3fv(vertex_list[4]);
glVertex3fv(vertex_list[5]);
glVertex3fv(vertex_list[0]);
glVertex3fv(vertex_list[1]);
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glVertex3fv(vertex_list[0]);
glVertex3fv(vertex_list[2]);
glVertex3fv(vertex_list[4]);
glVertex3fv(vertex_list[6]);
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glVertex3fv(vertex_list[1]);
glVertex3fv(vertex_list[3]);
glVertex3fv(vertex_list[5]);
glVertex3fv(vertex_list[7]);
glEnd();
}
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(); /*glTranslatef(-0.2, 0, 0);*/ // 平移 //glScalef(2, 1, 1); // 缩放 if (times > 100)
{
times = 0;
} if (times % 100 == 0)
{
rotate += 0.3;
} glRotatef(rotate, 0, 1, 0);
glRotatef(rotate, 0, 1, 1); /*gluLookAt(0.0, 0.99, 0.10, 0.0, .0, 0.0, 0.0, 1.0, 0.0);*/ glColor3f(0, 0, 1); display(); 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");
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene);
glutMainLoop();
}

OpenGL立方体的更多相关文章

  1. OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图

    读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...

  2. 46.Qt 使用OpenGL绘制立方体

    main.cpp #include <QApplication> #include <iostream> #include "vowelcube.h" in ...

  3. Bullet物理引擎在OpenGL中的应用

    Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ...

  4. 几个opengl立方体绘制案例

    VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...

  5. 【OpenGL】---认识CubeTexture

    一.OpenGL Cube Texture 立方体纹理 立方体纹理是一种特殊的纹理技术,他用6幅二维贴图构成一个以原点为中心的纹理立方体.对于每个片段,纹理坐标(s,t,r)被当做三维向量看待,每个纹 ...

  6. VLC命令参数(转载)

    转载自: http://blog.csdn.net/bytxl/article/details/6613449 http://www.cnblogs.com/MikeZhang/archive/201 ...

  7. VLC命令行参数详解

    VLC命令行参数详解 2012-11-29 14:00 6859人阅读 评论(0) 收藏 举报 Usage: vlc [options] [stream] ...You can specify mul ...

  8. opengl典型例程立方体投影与地图绘制

    立方体投影 http://www.cnblogs.com/opengl/p/3790450.html 地图绘制 http://www.cnblogs.com/opengl/p/3790354.html

  9. OpenGL的几何变换2之内观察立方体

    我想实现的一个场景是:一个立方体,相机的坐标在立方体的中心点,相机不变,立方体旋转,可以站在立方体中心点查看立方体内部. 实际上就是立方体图像,这是在全景图片当作比较简单的方式,画面不会变形和扭曲,但 ...

随机推荐

  1. 阶段3 1.Mybatis_03.自定义Mybatis框架_4.自定义mybatis的编码-解析XML的工具类介绍

    导入xml操作的类和用到的相关包 创建util包,然后把提供好的XMLConfigBuilder.java文件复制3过来 复制过来,里面用到了很多dom4j的东西 打开pom.xml 输入depend ...

  2. C—LINQ小结

    LINQ代表语言集成查询(Language-Integrated Query),它包括用于从数据源检索信息的一组功能.数据检索是许多程序的重要组成功能. 简介:System.Linq; var num ...

  3. Selenium学习之==>Switch与SelectApi接口详解

    Switch 我们在UI自动化测试时,总会出现新建一个tab页面.弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了.需要用到Se ...

  4. Java 项目管理工具 - Maven

    类似于 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 来管理依赖关系. 实际上,Maven 负责管理 Java 项目开发过程中的几乎所有的东西: 版本控制:Ma ...

  5. 爬取LeetCode题目——如何发送GraphQL Query获取数据

    前言   GraphQL 是一种用于 API 的查询语言,是由 Facebook 开源的一种用于提供数据查询服务的抽象框架.在服务端 API 开发中,很多时候定义一个接口返回的数据相对固定,因此要获得 ...

  6. Spark-Core RDD行动算子

    1.reduce(func) 通过func函数聚集RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据. scala> val rdd1 = sc.parallelize(1 to 100) ...

  7. 循环结构 :for

    循环结构 :for 循环四要素: 1.初始化条件 2.循环条件 3.循环体 4.迭代条件 格式: for(初始化条件;循环条件;迭代条件){ 循环体; } 执行顺序 :1 -> 2 -> ...

  8. 【JZOJ 3918】蛋糕

    题面: 正文: 根据数据\(4\leq R,C\leq 75\)我们大概可以先枚举切横的刀再二分答案. 更具体的: 假设我们已经枚举到这样横切: 再假设我们已经二分到最小的巧克力是\(7\) 康康第一 ...

  9. Gym 101986D Making Perimeter of the Convex Hull Shortest(凸包+极角排序)

    首先肯定是构造一个完整的凸包包括所有的点,那么要使得刚好有两个点在外面,满足这个条件的只有三种情况. 1.两个在凸包上但是不连续的两个点. 2.两个在凸包上但是连续的两个点. 3.一个在凸包上,还有一 ...

  10. while与格式化的练习

    练习 判断下列逻辑语句的结果,一定要自己先分析 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 2)n ...