我要发帖 回复

新手上路

1

主题

18

积分

0

专家分

:

私信
发表时间 : 2009-3-30 22:33:52 | 浏览 : 2004    评论 : 3
我把NeHe第六课的例子稍微改了一下,目的是实现正方体的六面贴上不同的图:1.bmp、2.bmp、3.bmp、4.bmp、5.bmp、6.bmp。但运行之后却只有一面是正确的贴图,另外五面都是白色……请大家帮我看看是哪儿出问题了,谢谢!
程序代码如下:

#include <windows.h>                // Windows????
#include <gl\glut.h>                // ??OpenGL???
#include <stdio.h>
#include <gl\glaux.h>

HGLRC           hRC=NULL;                                                        // ?????????
HDC             hDC=NULL;                                                        // OpenGL???????
HWND            hWnd=NULL;                                                        // ?????????
HINSTANCE       hInstance;                                                        // ???????
GLfloat xrot;
GLfloat yrot;
GLfloat zrot;
GLuint texture[6];

bool        keys[256];                                                                // ?????????
bool        active=TRUE;                                                                // ???????,???TRUE
bool        fullscreen=TRUE;                                                        // ??????,?????????

LRESULT        CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);                                // WndProc???

AUX_RGBImageRec *LoadBMP(char *Filename)
{
        FILE *File=NULL;
        if(!Filename)
        {
                return NULL;
        }
        File=fopen(Filename,"r");
        if(File)
        {
                fclose(File);
                return auxDIBImageLoad(Filename);
        }
        return NULL;
}

int LoadGLTextures()
{
        int Status=FALSE;
        AUX_RGBImageRec *TextureImage[6];
        memset(TextureImage,0,sizeof(void *)*6);

        char *pictures[]={
                "Data/1.bmp",
                "Data/2.bmp",
                "Data/3.bmp",
                "Data/4.bmp",
                "Data/5.bmp",
                "Data/6.bmp"
        };
        for(int i=0;i<6;i++)
        {
                if(TextureImage=LoadBMP(pictures))
                {
                        Status=TRUE;
                        glGenTextures(1,&texture);
                        glBindTexture(GL_TEXTURE_2D,texture);
                        glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage->sizeX,TextureImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage->data);
                        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
                        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
                }
                if(TextureImage)
                {
                        if(TextureImage->data)
                        {
                                free(TextureImage->data);
                        }
                        free(TextureImage);
                }
                return Status;
        }
}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)                                // ??OpenGL????
{
        if (height==0)                                                                // ?????
        {
                height=1;                                                        // ?Height??1
        }
        glViewport(0, 0, width, height);                                        // ???????

        glMatrixMode(GL_PROJECTION);                                                // ??????
        glLoadIdentity();                                                        // ??????

        // ???????
        gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

        glMatrixMode(GL_MODELVIEW);                                                // ????????
        glLoadIdentity();                                                        // ????????
}

int InitGL(GLvoid)                                                                // ?????OpenGL??????
{
        if(!LoadGLTextures())
        {
                return FALSE;
        }
        glEnable(GL_TEXTURE_2D);
        glShadeModel(GL_SMOOTH);                                                // ??????
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);                                        // ????
        glClearDepth(1.0f);                                                        // ??????
        glEnable(GL_DEPTH_TEST);                                                // ??????
        glDepthFunc(GL_LEQUAL);                                                        // ?????????
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);                        // ???????????
        return TRUE;                                                                // ??? OK
}

int DrawGLScene(GLvoid)                                                                // ????????????
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);                        // ?????????
        glLoadIdentity();                                                        // ???????????
        glTranslatef(0.0f,0.0f,-6.0f);
        glRotatef(xrot,1.0f,0,0);
        glRotatef(yrot,0.0f,1,0);
        glRotatef(zrot,0.0f,0,1);

        //Front Face
        glBindTexture(GL_TEXTURE_2D,texture[0]);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Eacute;&Iuml;
        glEnd();
       
        //Back Face
        glBindTexture(GL_TEXTURE_2D,texture[1]);
        glBegin(GL_QUADS);
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Eacute;&Iuml;
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glEnd();
       
        //Top Face
        glBindTexture(GL_TEXTURE_2D,texture[2]);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Eacute;&Iuml;
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glEnd();
       
        //Bottom Face
        glBindTexture(GL_TEXTURE_2D,texture[3]);
        glBegin(GL_QUADS);
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Eacute;&Iuml;
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glEnd();
       
        //Right Face
        glBindTexture(GL_TEXTURE_2D,texture[4]);
        glBegin(GL_QUADS);
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Eacute;&Iuml;
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glEnd();
       
        //Left Face
        glBindTexture(GL_TEXTURE_2D,texture[5]);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;×ó&Iuml;&Acirc;
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Iuml;&Acirc;
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);        // &Icirc;&AElig;&Agrave;í&ordm;&Iacute;&Euml;&Auml;±&szlig;&ETH;&Icirc;&micro;&Auml;&Oacute;&Ograve;&Eacute;&Iuml;
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);        //;
        glEnd();
       
        xrot+=0.3;
        yrot+=0.2;
        zrot+=0.4;
        return TRUE;                                                                //  ?? OK
}

GLvoid KillGLWindow(GLvoid)                                                        // ??????
{
        if (fullscreen)                                                                // ??????????
        {
                ChangeDisplaySettings(NULL,0);                                        // ???,?????
                ShowCursor(TRUE);                                                // ??????
        }
        if (hRC)                                                                // ????OpenGL???????
        {
                if (!wglMakeCurrent(NULL,NULL))                                        // ??????DC?RC????
                {
                        MessageBox(NULL,"Release DC or RC Failure!","Close Error",MB_OK | MB_ICONINFORMATION);
                }
                if (!wglDeleteContext(hRC))                                        // ??????RC?
                {
                        MessageBox(NULL,"Release RC Failure","Close Error",MB_OK | MB_ICONINFORMATION);
                }
                hRC=NULL;                                                        // ?RC?? NULL
        }
        if (hDC && !ReleaseDC(hWnd,hDC))                                        // ?????? DC?
        {
                MessageBox(NULL,"Release DC Failure","Close Error",MB_OK | MB_ICONINFORMATION);
                hDC=NULL;                                                        // ? DC ?? NULL
        }
        if (hWnd && !DestroyWindow(hWnd))                                        // ???????
        {
                MessageBox(NULL,"Release WINDOW Handler Failure","Close Error",MB_OK | MB_ICONINFORMATION);
                hWnd=NULL;                                                        // ? hWnd ?? NULL
        }
        if (!UnregisterClass("OpenG",hInstance))                                // ??????
        {
                MessageBox(NULL,"Can not Logout WINDOW Class","Close Error",MB_OK | MB_ICONINFORMATION);
                hInstance=NULL;                                                        // ? hInstance ?? NULL
        }
}

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
        GLuint                PixelFormat;                                                // ?????????
        WNDCLASS        wc;                                                        // ?????
        DWORD                dwExStyle;                                                // ??????
        DWORD                dwStyle;                                                // ????
        RECT WindowRect;                                                        // ????????????????
        WindowRect.left=(long)0;                                                // ?Left   ?? 0
        WindowRect.right=(long)width;                                                // ?Right  ???????
        WindowRect.top=(long)0;                                                        // ?Top    ?? 0
        WindowRect.bottom=(long)height;                                                // ?Bottom ???????
        fullscreen=fullscreenflag;                                                // ????????
        hInstance                = GetModuleHandle(NULL);                        // ?????????
        wc.style                = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;                // ?????,??????DC
        wc.lpfnWndProc                = (WNDPROC) WndProc;                                // WndProc????
        wc.cbClsExtra                = 0;                                                // ???????
        wc.cbWndExtra                = 0;                                                // ???????
        wc.hInstance                = hInstance;                                        // ????
        wc.hIcon                = LoadIcon(NULL, IDI_WINLOGO);                        // ??????
        wc.hCursor                = LoadCursor(NULL, IDC_ARROW);                        // ??????
        wc.hbrBackground        = NULL;                                                // GL?????
        wc.lpszMenuName                = NULL;                                                // ?????
        wc.lpszClassName        = "OpenG";                                        // ?????

        if (!RegisterClass(&wc))                                                // ???????
        {
                MessageBox(NULL,"Register Window Failure","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?????FALSE
        }

        if (fullscreen)                                                                // ?????????
        {
                DEVMODE dmScreenSettings;                                                // ????
                memset(&dmScreenSettings,0,sizeof(dmScreenSettings));                        // ????????
                dmScreenSettings.dmSize=sizeof(dmScreenSettings);                        // Devmode ?????
                dmScreenSettings.dmPelsWidth        = width;                                // ??????
                dmScreenSettings.dmPelsHeight        = height;                                // ??????
                dmScreenSettings.dmBitsPerPel        = bits;                                        // ??????????
                dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
                // ???????????????: CDS_FULLSCREEN ???????
                if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
                {
                        // ?????,??????:??????????
                        if (MessageBox(NULL,"Fullscreen setup on this Videocard Failure!\nUse Console Mode?","NeHe G",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
                        {
                                fullscreen=FALSE;                                // ??????(Fullscreen=FALSE)
                        }
                        else
                        {
                                // ???????,????????
                                MessageBox(NULL,"The Program will be Closed","Error",MB_OK|MB_ICONSTOP);
                                return FALSE;                                        //  ????? FALSE
                        }
                }
        }
        if (fullscreen)                                                                // ?????????
        {
                dwExStyle=WS_EX_APPWINDOW;                                        // ??????
                dwStyle=WS_POPUP;                                                // ????
                ShowCursor(FALSE);                                                // ??????
        }
        else
        {
                dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;                        // ??????
                dwStyle=WS_OVERLAPPEDWINDOW;                                        //  ????
        }
        AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);                // ?????????????
        if (!(hWnd=CreateWindowEx(        dwExStyle,                                // ??????
                                        "OpenG",                                // ???
                                        title,                                        // ????
                                        WS_CLIPSIBLINGS |                        // ?????????
                                        WS_CLIPCHILDREN |                        // ?????????
                                        dwStyle,                                // ???????
                                        0, 0,                                        // ????
                                        WindowRect.right-WindowRect.left,        // ??????????
                                        WindowRect.bottom-WindowRect.top,        // ??????????
                                        NULL,                                        // ????
                                        NULL,                                        // ???
                                        hInstance,                                // ??
                                        NULL)))                                        // ??WM_CREATE??????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot create a window DC","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        static        PIXELFORMATDESCRIPTOR pfd=                                        // /pfd ????????????,??????????
        {
                sizeof(PIXELFORMATDESCRIPTOR),                                        // ??????????
                1,                                                                // ???
                PFD_DRAW_TO_WINDOW |                                                // ??????
                PFD_SUPPORT_OPENGL |                                                // ??????OpenGL
                PFD_DOUBLEBUFFER,                                                // ???????
                PFD_TYPE_RGBA,                                                        // ?? RGBA ??
                bits,                                                                // ??????
                0, 0, 0, 0, 0, 0,                                                // ??????
                0,                                                                // ?Alpha??
                0,                                                                // ??Shift Bit
                0,                                                                // ?????
                0, 0, 0, 0,                                                        // ?????
                16,                                                                // 16? Z-?? (????)
                0,                                                                // ?????
                0,                                                                // ?????
                PFD_MAIN_PLANE,                                                        // ????
                0,                                                                // Reserved
                0, 0, 0                                                                // ?????
        };
        if (!(hDC=GetDC(hWnd)))                                                        // ??????????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot create a corresponding pixel format","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))                                // Windows ????????????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot setup pixel format","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        if(!SetPixelFormat(hDC,PixelFormat,&pfd))                                // ??????????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot setup pixel format","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        if (!(hRC=wglCreateContext(hDC)))                                        // ??????????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot create OpenGL R","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        if(!wglMakeCurrent(hDC,hRC))                                                // ?????????
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Cannot activate current OpenGL RC","Error",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        ShowWindow(hWnd,SW_SHOW);                                                // ????
        SetForegroundWindow(hWnd);                                                // ???????
        SetFocus(hWnd);                                                                // ???????????
        ReSizeGLScene(width, height);                                                // ???? GL ??
        if (!InitGL())                                                                // ??????GL??
        {
                KillGLWindow();                                                        // ?????
                MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                return FALSE;                                                        // ?? FALSE
        }
        return TRUE;                                                                // ??
}

LRESULT CALLBACK WndProc(        HWND        hWnd,                                        // ?????
                                UINT        uMsg,                                        // ?????
                                WPARAM        wParam,                                        // ???????
                                LPARAM        lParam)                                        // ???????
{
        switch (uMsg)                                                                // ??Windows??
        {
                case WM_ACTIVATE:                                                // ????????
                {
                        if (!HIWORD(wParam))                                        // ???????
                        {
                                active=TRUE;                                        // ????????
                        }
                        else
                        {
                                active=FALSE;                                        // ??????
                        }

                        return 0;                                                // ??????
                }
                case WM_SYSCOMMAND:                                                // ??????
                {
                        switch (wParam)                                                // ??????
                        {
                                case SC_SCREENSAVE:                                // ??????
                                case SC_MONITORPOWER:                                // ???????????
                                return 0;                                        // ????
                        }
                        break;                                                        // ??
                }
                case WM_CLOSE:                                                        // ??Close???
                {
                        PostQuitMessage(0);                                        // ??????
                        return 0;                                                // ??
                }
                case WM_KEYDOWN:                                                // ??????
                {
                        keys[wParam] = TRUE;                                        // ???,??TRUE
                        return 0;                                                // ??
                }
                case WM_KEYUP:                                                        // ??????
                {
                        keys[wParam] = FALSE;                                        // ???,??FALSE
                        return 0;                                                // ??
                }
                case WM_SIZE:                                                        // ??OpenGL????
                {
                        ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));                // LoWord=Width,HiWord=Height
                        return 0;                                                // ??
                }
        }
        // ? DefWindowProc???????????
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(        HINSTANCE        hInstance,                                // ??????
                        HINSTANCE        hPrevInstance,                                // ???????
                        LPSTR                lpCmdLine,                                // ?????
                        int                nCmdShow)                                // ??????
{
        MSG        msg;                                                                // Windowsx????
        BOOL        done=FALSE;                                                        // ???????Bool ??
        // ??????????
        if (MessageBox(NULL,"Run in Fullscreen?", "Setup Fullscreen Mode",MB_YESNO|MB_ICONQUESTION)==IDNO)
        {
                fullscreen=FALSE;                                                // FALSE?????
        }
        // ??OpenGL??
        if (!CreateGLWindow("NeHe's OpenGL Program Frame",640,480,16,fullscreen))
        {
                return 0;                                                        // ????
        }
        while(!done)                                                                // ?????? done=TRUE
        {
                if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))                        // ????????
                {
                        if (msg.message==WM_QUIT)                                // ???????
                        {
                                done=TRUE;                                        // ?,?done=TRUE
                        }
                        else                                                        // ??,??????
                        {
                                TranslateMessage(&msg);                                // ????
                                DispatchMessage(&msg);                                // ????
                        }
                }
                else                                                                // ??????
                {
                        // ???????ESC????DrawGLScene()?????
                        if (active)                                                // ???????
                        {
                                if (keys[VK_ESCAPE])                                // ESC ?????
                                {
                                        done=TRUE;                                // ESC ??????
                                }
                                else                                                // ???????,????
                                {
                                        DrawGLScene();                                // ????
                                        SwapBuffers(hDC);                        // ???? (???)
                                }
                        }
                        if (keys[VK_F1])                                        // F1??????
                        {
                                keys[VK_F1]=FALSE;                                // ??,????Key?????? FALSE
                                KillGLWindow();                                        // ???????
                                fullscreen=!fullscreen;                                // ?? ?? / ?? ??
                                // ?? OpenGL ??
                                if (!CreateGLWindow("NeHe's OpenGL program Frame",640,480,16,fullscreen))
                                {
                                        return 0;                                // ????????,????
                                }
                        }
                }
        }
        // ????
        KillGLWindow();                                                                // ????
        return (msg.wParam);                                                        // ????
}

最近VR访客

tan_dunming 评论于2009-3-31 08:10:46
int LoadGLTextures()
{
        int Status=FALSE;
        AUX_RGBImageRec *TextureImage[6];
        memset(TextureImage,0,sizeof(void *)*6);

        char *pictures[]={
                "Data/1.bmp",
                "Data/2.bmp",
                "Data/3.bmp",
                "Data/4.bmp",
                "Data/5.bmp",
                "Data/6.bmp"
        };
        for(int i=0;i<6;i++)
        {
                if(TextureImage=LoadBMP(pictures))
                {
                        Status=TRUE;
                                                glEnable(GL_TEXTURE_2D);
                        glGenTextures(1,&texture);
                        glBindTexture(GL_TEXTURE_2D,texture);
                        glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage->sizeX,TextureImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage->data);
                        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
                        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
                }
                if(TextureImage)
                {
                        if(TextureImage->data)
                        {
                                free(TextureImage->data);
                        }
                        free(TextureImage);
                }
               
        }
                return Status;
}
追求卓越
tan_dunming 评论于2009-3-31 08:11:41
把return Status;一句放在最后面,函数的倒数一行,否则只加载第一个纹理就返回了。
追求卓越
gnu 评论于2009-3-31 14:59:57
原帖由 tan_dunming 于 2009-3-31 08:11 AM 发表
把return Status;一句放在最后面,函数的倒数一行,否则只加载第一个纹理就返回了。

惭愧啊……白学C语言了……
谢谢tan_dunming斑竹!您的解答很及时!再次表示感谢!

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-21 05:44 PM

返回顶部