2013-12-21 34 views
-2
#include <Windows.h> 
#include "glut.h" 
#include "GLAUX.H" 
#include <stdio.h> 
GLuint texID; 
void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glClearColor(0,0,0,0); 
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LESS); 
    glMatrixMode(GL_TEXTURE); 
    glLoadIdentity(); 
    gluLookAt(10,10,10,0,0,0,0,0,1); 

    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D,texID); 
    glColor3f(0.9f,0.9f,0.9f); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.f,0.f); 
    glVertex3f(-100.0f, 0.0f, -100.0f); 
    glTexCoord2f(0.f,1.f); 
    glVertex3f(-100.0f,0.0f,100.0f); 
    glTexCoord2f(1.f,1.f); 
    glVertex3f(100.0f,0.0f,100.0f); 
    glTexCoord2f(1.f,0.f); 
    glVertex3f(100.0f, 0.0f, -100.0f); 
    glEnd(); 

    glutSwapBuffers(); 
} 

void InitTexture() 
{ 
    glGenTextures(1,&texID); 

    AUX_RGBImageRec * image = auxDIBImageLoad("earth.bmp"); 
    if(!image) 
     puts("image open err\n"); 

    glBindTexture(GL_TEXTURE_2D, texID); 
    // glTexImage2D(GL_TEXTURE_2D, 0, 3, image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE, 
    //  image->data); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->sizeX, image->sizeY, GL_RGB, GL_UNSIGNED_BYTE,image->data); 
    delete image->data; 
    delete image; 
    image = NULL; 
} 
void reshape (int w, int h) { 
    float ratio = w/(float)h; 
    glViewport(0,0,w,h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45,ratio,10,1000); 
} 
int main(int argc, char** argv) 
{ 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH); 
    glutInitWindowSize(500,500); 

    glutCreateWindow("3D FORTRESS"); 
    InitTexture(); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glutDisplayFunc(display); 
    glutIdleFunc (display); 
    glutReshapeFunc (reshape); 


    glutMainLoop(); 
    return 0; 
} 

我試圖做一個簡單的紋理映射..爲什麼紋理貼圖不起作用?

,但它並不在所有的工作。它只是顯示黑屏。雖然它讀取BMP文件以及...錯這個代碼

回答

2

幾件事情:

  • glClearColorglClear後沒有(通過顯示功能,直到下一次)有任何影響。
  • 您正在切換到紋理矩陣glMatrixMode(GL_TEXTURE);,但隨後將視圖矩陣加載到其中。如果您剛開始使用OpenGL,則紋理矩陣不是您應該使用的;這應該是GL_MODELVIEW
  • 0123,的第一個參數必須是GLU_TEXTURE_2D
  • 您沒有檢查gluBuild2DMipmaps的返回值。
  • 您不檢查任何OpenGL錯誤。使用glGetError()查明任何問題的根源。

一般來說,像這樣的問題,請先通過評論功能來縮小範圍。在這裏,我首先繪製一個沒有任何紋理的彩色四邊形,然後將紋理添加到它。