2011-08-17 69 views
-2

我想學習OpenGL,我想開始紋理,但我卡住了。我創建了一個有兩個房間和一個走廊的關卡,所以我需要不同部分的紋理(即地板的紋理,牆壁的紋理等等),但在看完教程後,我仍然卡住了,我需要把它放在我的代碼中?OpenGL的紋理水平

#include <windows.h> 
#include <gl\gl.h> 
#include <gl\glut.h> 
#include <gl\glu.h> 

void init(void); 
void display(void); 
void keyboard(unsigned char, int, int); 
void resize(int, int); 

int is_depth; /* depth testing flag */ 

int main (int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInitWindowSize(600, 600); 
    glutInitWindowPosition(40, 40); 
    glutCreateWindow("The Cube World"); 
    init(); 
    glutDisplayFunc(display); 
    glutKeyboardFunc(keyboard); 

    /* This time we're going to keep the aspect ratio 
    constant by trapping the window resizes. */ 
    glutReshapeFunc(resize); 

    glutMainLoop(); 
    return 0; 
} 

void init(void) 
{ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glEnable(GL_DEPTH_TEST); 
    is_depth = 1; 
    glMatrixMode(GL_MODELVIEW); 
} 

void display(void) 
{ 
    if (is_depth) 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    else 
     glClear(GL_COLOR_BUFFER_BIT); 

    glBegin(GL_QUADS); 

    //floor 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 0.0, 25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 0.0, 25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 0.0, -25.0); 

    //left wall 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 00.0, 25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 25.0, 25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 25.0, -25.0); 

    //right wall 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(50.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(50.0, 00.0, 25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 25.0, 25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 25.0, -25.0); 

    //roof 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 25.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 25.0, 25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 25.0, 25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 25.0, -25.0); 

    //right panel 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(10.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(10.0, 15.0, -25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 15.0, -25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 0.0, -25.0); 

    //left panel 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-10.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-10.0, 15.0, -25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 15.0, -25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 0.0, -25.0); 

    //top panel 
    glColor3f(0.2f, 0.2f, 0.2f); 
    //bottom right 
    glVertex3f(50.0, 15.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    //top right 
    glVertex3f(50.0, 25.0, -25.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    //top left 
    glVertex3f(-50.0, 25.0, -25.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    //bottom left 
    glVertex3f(-50.0, 15.0, -25.0); 

    // corridor floor 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-10.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-10.0, 0.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(10.0, 0.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(10.0, 0.0, -25.0); 

    // corridor left wall 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-10.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-10.0, 00.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-10.0, 15.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-10.0, 15.0, -25.0); 

    // corridor right wall 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(10.0, 0.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(10.0, 00.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(10.0, 15.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(10.0, 15.0, -25.0); 

    //corridor roof 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-10.0, 15.0, -25.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-10.0, 15.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(10.0, 15.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(10.0, 15.0, -25.0); 

    //right panel room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(10.0, 0.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(10.0, 15.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 15.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 0.0, -275.0); 

    //left panel room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-10.0, 0.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-10.0, 15.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 15.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 0.0, -275.0); 

    //top panel room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(50.0, 15.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(50.0, 25.0, -275.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 25.0, -275.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 15.0, -275.0); 

    //right wall room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(50.0, 0.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(50.0, 00.0, -325.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 25.0, -325.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 25.0, -275.0); 

    //left wall room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 0.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 00.0, -325.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 25.0, -325.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 25.0, -275.0); 

    //roof room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 25.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 25.0, -325.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 25.0, -325.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 25.0, -275.0); 

    //back wall room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(50.0, 0.0, -325.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(50.0, 25.0, -325.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(-50.0, 25.0, -325.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(-50.0, 0.0, -325.0); 

    //floor room 2 
    glColor3f(0.2f, 0.2f, 0.2f); 
    glVertex3f(-50.0, 0.0, -275.0); 
    glColor3f(0.4f, 0.4f, 0.4f); 
    glVertex3f(-50.0, 0.0, -325.0); 
    glColor3f(0.6f, 0.6f, 0.6f); 
    glVertex3f(50.0, 0.0, -325.0); 
    glColor3f(0.8f, 0.8f, 0.8f); 
    glVertex3f(50.0, 0.0, -275.0); 

    glEnd(); 
    glutSwapBuffers(); 
} 

void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) 
    { 
     case 'a': 
     case 'A': 
      glTranslatef(5.0, 0.0, 0.0); 
      break; 
     case 'd': 
     case 'D': 
      glTranslatef(-5.0, 0.0, 0.0); 
      break; 
     case 'w': 
     case 'W': 
      glTranslatef(0.0, 0.0, 5.0); 
      break; 
     case 's': 
     case 'S': 
      glTranslatef(0.0, 0.0, -5.0); 
      break; 
     case 't': 
     case 'T': 
      if (is_depth) 
      { 
       is_depth = 0; 
       glDisable(GL_DEPTH_TEST); 
      } 
      else 
      { 
       is_depth = 1; 
       glEnable(GL_DEPTH_TEST); 
      } 
    } 
    display(); 
} 

void resize(int width, int height) 
{ 
    if (height == 0) 
     height = 1; 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

    /* Note we divide our width by our height to get the aspect ratio. */ 
    gluPerspective(45.0, width/height, 1.0, 400.0); 

    /* Set initial position */ 
    glTranslatef(0.0, -5.0, -150.0); 

    glMatrixMode(GL_MODELVIEW); 
} 
+1

我建議你去實際閱讀教程。這個問題太可怕了。 – pmr

回答

0

您似乎沒有任何紋理加載代碼。我建議你回到NeHe並閱讀本教程http://nehe.gamedev.net/tutorial/texture_mapping/12038/

感覺你已經遠遠超過了自己,你應該按順序閱讀大部分(如果不是全部)教程。如果你想製作第一人稱射擊遊戲,我還建議從模型文件中加載關卡(在NeHe上也有關於此的文章)