#include <cstdlib> #include <iostream> #define GLUT_DISABLE_ATEXIT_HACK #include <GL/openglut.h> #include <stdlib.h> #include <stdio.h> #include <string> #include <GL/gl.h> #include <stdio.h> #include <math.h> #include <IL/ilut.h> #include <stdlib.h> #include <math.h> #include <stdio.h> using namespace std; struct STextureData { unsigned int nWidth; unsigned int nHeight; unsigned char* pData; }; STextureData m_TextData; GLuint m_glId; void Bind() { if(!m_glId) { glGenTextures(1,&m_glId); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glBindTexture(GL_TEXTURE_2D,m_glId); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 4, m_TextData.nWidth, m_TextData.nHeight, GL_RGB, GL_UNSIGNED_BYTE, m_TextData.pData); glTexImage2D(GL_TEXTURE_2D, 0, 4, m_TextData.nWidth, m_TextData.nHeight, 0,GL_RGBA,GL_UNSIGNED_BYTE,m_TextData.pData); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); } glBindTexture(GL_TEXTURE_2D,m_glId); } void CreateMipmaps() { glGenTextures(1,&m_glId); glBindTexture(GL_TEXTURE_2D,m_glId); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } void SetColorKey(unsigned char Red,unsigned char Green,unsigned char Blue) { if (m_glId) { glDeleteTextures(1,&m_glId); m_glId = 0; } unsigned long Count = m_TextData.nWidth * m_TextData.nHeight * 4; for (unsigned long i = 0; i<Count; i+=4) { if ( (m_TextData.pData[i]==Red) && (m_TextData.pData[i+1]==Green) && (m_TextData.pData[i+2]==Blue) ) m_TextData.pData[i+3] = 0; else m_TextData.pData[i+3] = 255; } } void display(void) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.0, 1.0, 1.0); Bind(); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2f(-1,-1); glTexCoord2i(0, 1); glVertex2f(-1,1); glTexCoord2i(1, 1); glVertex2f(1,1); glTexCoord2i(1, 0); glVertex2f(1,-1); glEnd(); glFlush(); } void init(void) { ILuint picId; ilGenImages(1,&picId); ilBindImage(picId); string filename = "1.bmp"; ilLoadImage(filename.c_str()); m_TextData.nWidth = ilGetInteger(IL_IMAGE_WIDTH); m_TextData.nHeight = ilGetInteger(IL_IMAGE_HEIGHT); cout<<" "<<m_TextData.nWidth<<" "<<m_TextData.nHeight<<endl; unsigned int size = m_TextData.nWidth * m_TextData.nHeight * 4; m_TextData.pData = new unsigned char[size]; ilCopyPixels(0, 0, 0, m_TextData.nWidth, m_TextData.nHeight, 1, IL_RGBA, IL_UNSIGNED_BYTE, m_TextData.pData); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glShadeModel (GL_FLAT); } int main(int argc, char** argv) { ilInit(); glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutMainLoop(); return 0; } 只是不知为何 载入非2^。。的纹理就有问题啊? who knows. 。。。。