C++ OpenGL纹理级别

C++ OpenGL纹理级别,c++,opengl,C++,Opengl,我正在尝试学习OpenGL,我想开始制作纹理,但我被卡住了。我已经创建了一个包含两个房间和一个走廊的标高,所以我希望不同部分有不同的纹理(即,地板纹理、墙壁纹理等等),但是在看了教程之后,我仍然被卡住了,我需要在代码中把它放在哪里 #include <windows.h> #include <gl\gl.h> #include <gl\glut.h> #include <gl\glu.h> void init(void); void displa

我正在尝试学习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);
}
#包括
#包括
#包括
#包括
void init(void);
作废显示(作废);
无效键盘(无符号字符,int,int);
无效调整大小(int,int);
int是_深度;/*深度测试标志*/
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600600);
位置(40,40);
glutCreateWindow(“立方体世界”);
init();
glutDisplayFunc(显示器);
键盘Func(键盘);
/*这次我们要保持纵横比
通过捕捉窗口大小来调整常量*/
GLUTEFUNC(调整大小);
glutMainLoop();
返回0;
}
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glEnable(GLU深度试验);
深度等于1;
glMatrixMode(GLU模型视图);
}
作废显示(作废)
{
如果(是深度)
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
其他的
glClear(GLU颜色缓冲位);
glBegin(GL_QUADS);
//地板
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-50.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-50.0,0.0,25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,0.0,25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,0.0,-25.0);
//左墙
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-50.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-50.0,00.0,25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-50.0,25.0,25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(-50.0,25.0,-25.0);
//右墙
GL3F(0.2f,0.2f,0.2f);
glVertex3f(50.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(50.0,00.0,25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,25.0,25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,25.0,-25.0);
//屋顶
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-50.0,25.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-50.0,25.0,25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,25.0,25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,25.0,-25.0);
//右面板
GL3F(0.2f,0.2f,0.2f);
glVertex3f(10.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(10.0,15.0,-25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,15.0,-25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,0.0,-25.0);
//左面板
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-10.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-10.0,15.0,-25.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-50.0,15.0,-25.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(-50.0,0.0,-25.0);
//顶板
GL3F(0.2f,0.2f,0.2f);
//右下角
glVertex3f(50.0,15.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
//右上角
glVertex3f(50.0,25.0,-25.0);
GL3F(0.6f,0.6f,0.6f);
//左上角
glVertex3f(-50.0,25.0,-25.0);
GL3F(0.8f,0.8f,0.8f);
//左下角
glVertex3f(-50.0,15.0,-25.0);
//走廊楼层
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-10.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-10.0,0.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(10.0,0.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(10.0,0.0,-25.0);
//走廊左墙
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-10.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-10.0,00.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-10.0,15.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(-10.0,15.0,-25.0);
//走廊右墙
GL3F(0.2f,0.2f,0.2f);
glVertex3f(10.0,0.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(10.0,00.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(10.0,15.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(10.0,15.0,-25.0);
//走廊屋顶
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-10.0,15.0,-25.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-10.0,15.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(10.0,15.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(10.0,15.0,-25.0);
//右面板室2
GL3F(0.2f,0.2f,0.2f);
glVertex3f(10.0,0.0,-275.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(10.0,15.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,15.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,0.0,-275.0);
//左面板室2
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-10.0,0.0,-275.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-10.0,15.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-50.0,15.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(-50.0,0.0,-275.0);
//顶板室2
GL3F(0.2f,0.2f,0.2f);
glVertex3f(50.0,15.0,-275.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(50.0,25.0,-275.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-50.0,25.0,-275.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(-50.0,15.0,-275.0);
//右墙2号房间
GL3F(0.2f,0.2f,0.2f);
glVertex3f(50.0,0.0,-275.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(50.0,00.0,-325.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(50.0,25.0,-325.0);
GL3F(0.8f,0.8f,0.8f);
glVertex3f(50.0,25.0,-275.0);
//左墙2号房间
GL3F(0.2f,0.2f,0.2f);
glVertex3f(-50.0,0.0,-275.0);
GL3F(0.4f,0.4f,0.4f);
glVertex3f(-50.0,00.0,-325.0);
GL3F(0.6f,0.6f,0.6f);
glVertex3f(-50.0)