opengl绘制纹理立方体
来源:互联网 发布:面纱3.0雾化器最佳数据 编辑:程序博客网 时间:2024/04/26 04:10
因为很简单就直接贴代码了,做个记录,刚学的不会的可以参考
#include <glut.h>#include <stdio.h>#include <stdlib.h>#include <SOIL.h>#include<opencv2\opencv.hpp> //可混合处理,加上尺寸调整函数using namespace cv;using namespace std;GLuint texture[6];GLfloat xRot, yRot, zRot;int LoadGLTextures(){ //加载纹理到openglint Status = 0;char *picFile[6] = { "TU/0.jpg","TU/1.jpg","TU/5.jpg", //注意先调整图片大小"TU/11.jpg","TU/777.jpg","TU/880.jpg" };for (int i = 0;i < 6;++i){texture[i] = SOIL_load_OGL_texture(picFile[i],SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y);if (texture[i] == 0)Status = 0;glBindTexture(GL_TEXTURE_2D, texture[i]);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);}return Status;}int init(){glEnable(GL_TEXTURE_2D);glCullFace(GL_BACK); //剔除背面glEnable(GL_CULL_FACE);if (!LoadGLTextures()) {return 0;}glShadeModel(GL_SMOOTH); //平滑着色glClearColor(1.0f, 1.0f, 0.0f, 1.0f);glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);return 1;}void cube() { //绘制glBindTexture(GL_TEXTURE_2D, texture[0]);glBegin(GL_QUADS);glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f);glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);glEnd();glBindTexture(GL_TEXTURE_2D, texture[1]);glBegin(GL_QUADS);glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f);glEnd();glBindTexture(GL_TEXTURE_2D, texture[2]);glBegin(GL_QUADS);glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 1.0f);glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);glEnd();glBindTexture(GL_TEXTURE_2D, texture[3]);glBegin(GL_QUADS);glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f);glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);glEnd();glBindTexture(GL_TEXTURE_2D, texture[4]);glBegin(GL_QUADS);glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f);glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f);glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);glEnd();glBindTexture(GL_TEXTURE_2D, texture[5]);glBegin(GL_QUADS);glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);glEnd();}void display(){ //动态显示glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f); //平移glRotatef(xRot, 1.0f, 0.0f, 0.0f); //旋转glRotatef(yRot, 0.0f, 1.0f, 0.0f);glRotatef(zRot, 0.0f, 0.0f, 1.0f);cube();xRot += 0.02f; //调节速度yRot += 0.02f;zRot += 0.02f;glutSwapBuffers();}void showCube() { //初始静止显示glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f); cube();glutSwapBuffers();}void showStop() { //结束后显示glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f);glRotatef(zRot, 0.0f, 0.0f, 1.0f);cube();glutSwapBuffers();}void reshape(int w, int h){if (h == 0) //至少一个像素h = 1;glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION); //投影模式glLoadIdentity(); gluPerspective(60.0f, (GLfloat)w / (GLfloat)h, 1, 100); //设置透视glMatrixMode(GL_MODELVIEW); //模型视图矩阵glLoadIdentity(); }void keyboard(unsigned char key, int x, int y){ //可用键盘控制旋转switch (key) {case 's': //开始旋转glutDisplayFunc(display);glutIdleFunc(display);break;case 'e': //结束旋转GLfloat mari[16];glGetFloatv(GL_MODELVIEW_MATRIX, mari);for (int i = 0; i < 16; i++) {cout << mari[i] << " ";if ((i + 1) % 4 == 0) {cout << endl;}}exit(0);break;}}void main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(200, 200);glutCreateWindow("Show");init();glutDisplayFunc(showCube);glutKeyboardFunc(keyboard);glutReshapeFunc(reshape);glClearColor(1.0f, 0.0f, 1.0f, 1.0f); glutMainLoop();}
由于录制软件问题所以截的图有点卡,实际很流畅
0 0
- opengl绘制纹理立方体
- WinCE OpenGL绘制立方体和纹理贴图
- android opengl es添加纹理,绘制立方体纹理,立方体使用不同纹理
- Android OpenGL ES绘制透明纹理立方体(未解决)
- opengl 绘制简单的带纹理贴图的立方体
- opengl绘制立方体
- OpenGL-绘制旋转立方体
- Android opengl 立方体 多纹理
- OpenGL--立方体多面纹理(java)
- OpenGL--立方体多面纹理(java)
- android opengl 绘制立方体【转】
- OpenGL绘制旋转立方体实例
- 使用opengl绘制一个立方体
- OpenGL绘制旋转立方体实例
- opengl 绘制线框立方体
- OpenGL绘制旋转立方体实例
- OpenGL ES 绘制颜色立方体
- 几个opengl立方体绘制案例
- 椭圆弧长度的计算是没那么容易的
- JSP页面的构成
- 格斗系统 - Universe Fighting Engine
- 数据库学习笔记---connect by的简单用法(转载)
- 隐藏Xcode8不需要的日志 subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_leve
- opengl绘制纹理立方体
- 初识内存泄露检测工具VisualLeakDetector
- 数学运算符
- Spring 学习第十天: IOC容器中Bean的生命周期
- Spring+SpringMVC+MyBatis整合开发实践(含源码(两个整合实例)、PPT)
- 线性表的定义与操作---链式表
- 框架引入twig模板引擎
- 关于MD5,SALT与SHA1的部分HASH算法解析
- linux 中chmod命令使用的详细解释