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
原创粉丝点击