OpenGL立方体
直接画
#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立方体的更多相关文章
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...
- 46.Qt 使用OpenGL绘制立方体
main.cpp #include <QApplication> #include <iostream> #include "vowelcube.h" in ...
- Bullet物理引擎在OpenGL中的应用
Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ...
- 几个opengl立方体绘制案例
VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...
- 【OpenGL】---认识CubeTexture
一.OpenGL Cube Texture 立方体纹理 立方体纹理是一种特殊的纹理技术,他用6幅二维贴图构成一个以原点为中心的纹理立方体.对于每个片段,纹理坐标(s,t,r)被当做三维向量看待,每个纹 ...
- VLC命令参数(转载)
转载自: http://blog.csdn.net/bytxl/article/details/6613449 http://www.cnblogs.com/MikeZhang/archive/201 ...
- VLC命令行参数详解
VLC命令行参数详解 2012-11-29 14:00 6859人阅读 评论(0) 收藏 举报 Usage: vlc [options] [stream] ...You can specify mul ...
- opengl典型例程立方体投影与地图绘制
立方体投影 http://www.cnblogs.com/opengl/p/3790450.html 地图绘制 http://www.cnblogs.com/opengl/p/3790354.html
- OpenGL的几何变换2之内观察立方体
我想实现的一个场景是:一个立方体,相机的坐标在立方体的中心点,相机不变,立方体旋转,可以站在立方体中心点查看立方体内部. 实际上就是立方体图像,这是在全景图片当作比较简单的方式,画面不会变形和扭曲,但 ...
随机推荐
- 阶段3 1.Mybatis_03.自定义Mybatis框架_4.自定义mybatis的编码-解析XML的工具类介绍
导入xml操作的类和用到的相关包 创建util包,然后把提供好的XMLConfigBuilder.java文件复制3过来 复制过来,里面用到了很多dom4j的东西 打开pom.xml 输入depend ...
- C—LINQ小结
LINQ代表语言集成查询(Language-Integrated Query),它包括用于从数据源检索信息的一组功能.数据检索是许多程序的重要组成功能. 简介:System.Linq; var num ...
- Selenium学习之==>Switch与SelectApi接口详解
Switch 我们在UI自动化测试时,总会出现新建一个tab页面.弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了.需要用到Se ...
- Java 项目管理工具 - Maven
类似于 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 来管理依赖关系. 实际上,Maven 负责管理 Java 项目开发过程中的几乎所有的东西: 版本控制:Ma ...
- 爬取LeetCode题目——如何发送GraphQL Query获取数据
前言 GraphQL 是一种用于 API 的查询语言,是由 Facebook 开源的一种用于提供数据查询服务的抽象框架.在服务端 API 开发中,很多时候定义一个接口返回的数据相对固定,因此要获得 ...
- Spark-Core RDD行动算子
1.reduce(func) 通过func函数聚集RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据. scala> val rdd1 = sc.parallelize(1 to 100) ...
- 循环结构 :for
循环结构 :for 循环四要素: 1.初始化条件 2.循环条件 3.循环体 4.迭代条件 格式: for(初始化条件;循环条件;迭代条件){ 循环体; } 执行顺序 :1 -> 2 -> ...
- 【JZOJ 3918】蛋糕
题面: 正文: 根据数据\(4\leq R,C\leq 75\)我们大概可以先枚举切横的刀再二分答案. 更具体的: 假设我们已经枚举到这样横切: 再假设我们已经二分到最小的巧克力是\(7\) 康康第一 ...
- Gym 101986D Making Perimeter of the Convex Hull Shortest(凸包+极角排序)
首先肯定是构造一个完整的凸包包括所有的点,那么要使得刚好有两个点在外面,满足这个条件的只有三种情况. 1.两个在凸包上但是不连续的两个点. 2.两个在凸包上但是连续的两个点. 3.一个在凸包上,还有一 ...
- while与格式化的练习
练习 判断下列逻辑语句的结果,一定要自己先分析 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 2)n ...