PMG

Форумы по созданию игр
Текущее время: 14 ноя 2024 06:10

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Наложение текстуры
СообщениеДобавлено: 29 окт 2013 20:48 
Не в сети
Новичок

Зарегистрирован: 11 окт 2013 18:15
Сообщения: 5
Скажите, почему не накладывается текстура на куб?
Код:
/ /**************************
* Includes
*
**************************/
#include <windows.h>
#include <windows.h>
#include <gl/gl.h>
#include <gl\glaux.h>
#include <gl\glu.h>

HDC    hDC=NULL;      // Ñëóæåáíûé êîíòåêñò GDI óñòðîéñòâà
HGLRC  hRC=NULL;      // Ïîñòîÿííûé êîíòåêñò äëÿ âèçóàëèçàöèè
HWND   hWnd=NULL;     // Ñîäåðæèò äèñêðèïòîð äëÿ îêíà
HINSTANCE hInstance;  // Ñîäåðæèò äàííûå äëÿ íàøåé ïðîãðàììû


bool keys[256];       // Ìàññèâ, èñïîëüçóþùèéñÿ äëÿ ñîõðàíåíèÿ ñîñòîÿíèÿ êëàâèàòóðû
bool active=TRUE;     // Ôëàã ñîñòîÿíèÿ àêòèâíîñòè ïðèëîæåíèÿ (ïî óìîë÷àíèþ: TRUE)
bool fullscreen=TRUE;

GLuint filter;         // Êàêîé ôèëüòð èñïîëüçîâàòü


GLuint   texture[1];
/**************************
* Function Declarations
*
**************************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


GLfloat theta = 0.0f;
    GLfloat vlevo;
    GLfloat v2;
    GLfloat v1;
    GLfloat v3;
    GLfloat xspeed;
    GLfloat yspeed;

    GLvoid LoadGLTextures()
{
   // Çàãðóçêà êàðòèíêè
   AUX_RGBImageRec *texture1;
   texture1 = auxDIBImageLoad("Data/NeHe.bmp");
   
   glGenTextures(1, &texture[0]);
   glBindTexture(GL_TEXTURE_2D, texture[0]);
   
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
   
   glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
}

GLvoid InitGL(GLsizei Width, GLsizei Height)
{
LoadGLTextures();         // Çàãðóçêà òåêñòóð
glEnable(GL_TEXTURE_2D);      // Ðàçðåøåíèå íàëîæåíèå òåêñòóðû
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);

glMatrixMode(GL_MODELVIEW);
}


/**************************
* WinMain
*
**************************/

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    int iCmdShow)
{
    WNDCLASS wc;
    HWND hWnd;
    HDC hDC;
    HGLRC hRC;       
    MSG msg;
    BOOL bQuit = FALSE;
    float theta = 0.0f;
    float vlevo;
    float vverh;

    /* register window class */
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "GLSample";
    RegisterClass (&wc);

    /* create main window */
    hWnd = CreateWindow (
      "GLSample", "OpenGL Sample",
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
      0, 0, 1000, 1000,
      NULL, NULL, hInstance, NULL);

    /* enable OpenGL for the window */
    EnableOpenGL (hWnd, &hDC, &hRC);

    /* program main loop */
    while (!bQuit)
    {
        /* check for messages */
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        {
            /* handle or dispatch messages */
            if (msg.message == WM_QUIT)
            {
                bQuit = TRUE;
            }
            else
            {
                TranslateMessage (&msg);
                DispatchMessage (&msg);
            }
        }
        else
        {
            /* OpenGL animation code goes here */

            glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
            glClear (GL_COLOR_BUFFER_BIT);

            glPushMatrix ();
         
            glTranslatef(v1, v2, 0.0f );
            glRotatef  (v3, 0.0f, 0.0f, 1.0f );
            glBindTexture(GL_TEXTURE_2D, texture[0]);
           
            glBegin (GL_QUADS);
         glTexCoord2f(0.0f, 0.0f);      glVertex2f (0.05f, 0.05f);   
          glTexCoord2f(1.0f, 0.0f);     glVertex2f (-0.05f, 0.05f); 
            glTexCoord2f(1.0f, 1.0f);       glVertex2f (-0.05f, -0.05f);
        glTexCoord2f(0.0f, 1.0f);       glVertex2f (0.05f, -0.05f); 
            glEnd ();
            v2+=xspeed;
            v1+=yspeed;
            v3+=theta;


if (keys['D'])     // Êëàâèøà ñòðåëêà ââåðõ íàæàòà?
       {
        theta+=0.01f;
           // Åñëè òàê, òî óìåíüøèì xspeed
       }
            if (keys[VK_UP])     // Êëàâèøà ñòðåëêà ââåðõ íàæàòà?
       {
        xspeed+=0.0000001f;      // Åñëè òàê, òî óìåíüøèì xspeed
       }
       if (keys[VK_DOWN])   // Êëàâèøà ñòðåëêà âíèç íàæàòà?
       {
        xspeed-=0.0000001f;      // Åñëè òàê, òî óâåëè÷èì xspeed
       }
            if (keys[VK_RIGHT])  // Êëàâèøà ñòðåëêà âïðàâî íàæàòà?
       {
        yspeed+=0.0000001f;      // Åñëè òàê, òî óâåëè÷èì yspeed
       }
       if (keys[VK_LEFT])   // Êëàâèøà ñòðåëêà âëåâî íàæàòà?
       {
        yspeed-=0.0000001f;      // Åñëè òàê, òî óìåíüøèì yspeed
       }
       
            glPopMatrix ();

            SwapBuffers (hDC);
           
            Sleep (1);
           

        }
    }

    /* shutdown OpenGL */
    DisableOpenGL (hWnd, hDC, hRC);

    /* destroy the window explicitly */
    DestroyWindow (hWnd);

    return msg.wParam;
}


/********************
* Window Procedure
*
********************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                          WPARAM wParam, LPARAM lParam)
{

    switch (message)
    {
    case WM_CREATE:
        return 0;
    case WM_CLOSE:
        PostQuitMessage (0);
        return 0;

    case WM_DESTROY:
        return 0;
       
        case WM_KEYDOWN:
      keys[wParam] = TRUE;
      switch (wParam)
        {
        case VK_ESCAPE:
            PostQuitMessage(0);
            return 0;
        }
      break;

      case WM_KEYUP:
      keys[wParam] = FALSE;
      break;


   
        switch (wParam)
        {
        case VK_ESCAPE:
            PostQuitMessage(0);
            return 0;
        }
        return 0;
       
         

    default:
        return DefWindowProc (hWnd, message, wParam, lParam);
    }
}

void keyboard(unsigned char key,int x, int y)
{
switch(key)
{
case 'D':
xspeed-=0.1f;

break;
}
}
/*******************
* Enable OpenGL
*
*******************/

void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;

    /* get the device context (DC) */
    *hDC = GetDC (hWnd);

    /* set the pixel format for the DC */
    ZeroMemory (&pfd, sizeof (pfd));
    pfd.nSize = sizeof (pfd);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 24;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;
    iFormat = ChoosePixelFormat (*hDC, &pfd);
    SetPixelFormat (*hDC, iFormat, &pfd);

    /* create and enable the render context (RC) */
    *hRC = wglCreateContext( *hDC );
    wglMakeCurrent( *hDC, *hRC );

}





/******************
* Disable OpenGL
*
******************/

void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent (NULL, NULL);
    wglDeleteContext (hRC);
    ReleaseDC (hWnd, hDC);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Наложение текстуры
СообщениеДобавлено: 31 окт 2013 09:22 
Не в сети
Новичок

Зарегистрирован: 31 окт 2013 07:49
Сообщения: 4
Вот код, который вы хотели получить:
Код:

#include <windows.h>      // Header File For Windows
#include <stdio.h>         // Header File For Standard Input/Output
#include <gl\gl.h>         // Header File For The OpenGL32 Library
#include <gl\glu.h>         // Header File For The GLu32 Library
#include <gl\glaux.h>      // Header File For The Glaux Library

HDC         hDC=NULL;      // Private GDI Device Context
HGLRC      hRC=NULL;      // Permanent Rendering Context
HWND      hWnd=NULL;      // Holds Our Window Handle
HINSTANCE   hInstance;      // Holds The Instance Of The Application

bool   keys[256];         // Array Used For The Keyboard Routine
bool   active=TRUE;      // Window Active Flag Set To TRUE By Default
bool   fullscreen=TRUE;   // Fullscreen Flag Set To Fullscreen Mode By Default

    GLfloat theta = 0.0f;
    GLfloat v2 = 0.0f;
    GLfloat v1 = 0.0f;
    GLfloat v3 = 0.0f;
    GLfloat xspeed = 0.0f;
    GLfloat yspeed = 0.0f;



GLuint   texture[1];         // Storage For One Texture ( NEW )

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

AUX_RGBImageRec *LoadBMP(char *Filename)            // Loads A Bitmap Image
{
   FILE *File=NULL;                           // File Handle

   if (!Filename)                              // Make Sure A Filename Was Given
   {
      return NULL;                           // If Not Return NULL
   }

   File=fopen(Filename,"r");                     // Check To See If The File Exists

   if (File)                                 // Does The File Exist?
   {
      fclose(File);                           // Close The Handle
      return auxDIBImageLoad(Filename);            // Load The Bitmap And Return A Pointer
   }

   return NULL;                              // If Load Failed Return NULL
}

int LoadGLTextures()                           // Load Bitmaps And Convert To Textures
{
   int Status=FALSE;                           // Status Indicator

   AUX_RGBImageRec *TextureImage[1];               // Create Storage Space For The Texture

   memset(TextureImage,0,sizeof(void *)*1);              // Set The Pointer To NULL

   // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
   if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
   {
      Status=TRUE;                           // Set The Status To TRUE

      glGenTextures(1, &texture[0]);               // Create The Texture

      // Typical Texture Generation Using Data From The Bitmap
      glBindTexture(GL_TEXTURE_2D, texture[0]);
      glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   }

   if (TextureImage[0])                           // If Texture Exists
   {
      if (TextureImage[0]->data)                     // If Texture Image Exists
      {
         free(TextureImage[0]->data);               // Free The Texture Image Memory
      }

      free(TextureImage[0]);                        // Free The Image Structure
   }

   return Status;                              // Return The Status
}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)      // Resize And Initialize The GL Window
{
   if (height==0)                              // Prevent A Divide By Zero By
   {
      height=1;                              // Making Height Equal One
   }

   glViewport(0,0,width,height);                  // Reset The Current Viewport

   glMatrixMode(GL_PROJECTION);                  // Select The Projection Matrix
   glLoadIdentity();                           // Reset The Projection Matrix

   // Calculate The Aspect Ratio Of The Window
   gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

   glMatrixMode(GL_MODELVIEW);                     // Select The Modelview Matrix
   glLoadIdentity();                           // Reset The Modelview Matrix
}

int InitGL(GLvoid)                              // All Setup For OpenGL Goes Here
{
   if (!LoadGLTextures())                        // Jump To Texture Loading Routine ( NEW )
   {
      return FALSE;                           // If Texture Didn't Load Return FALSE
   }

   glEnable(GL_TEXTURE_2D);                     // Enable Texture Mapping ( NEW )
   glShadeModel(GL_SMOOTH);                     // Enable Smooth Shading
   glClearColor(0.0f, 0.0f, 0.0f, 0.5f);            // Black Background
   glClearDepth(1.0f);                           // Depth Buffer Setup
   glEnable(GL_DEPTH_TEST);                     // Enables Depth Testing
   glDepthFunc(GL_LEQUAL);                        // The Type Of Depth Testing To Do
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   // Really Nice Perspective Calculations
   return TRUE;                              // Initialization Went OK
}

int DrawGLScene(GLvoid)                           // Here's Where We Do All The Drawing
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // Clear The Screen And The Depth Buffer
   glLoadIdentity();                           // Reset The View

            glTranslatef(v1, v2, -5.0f );
            glRotatef  (v3, 0.0f, 0.0f, 1.0f );
            glBindTexture(GL_TEXTURE_2D, texture[0]);
           
            glBegin (GL_QUADS);
//         glTexCoord2f(0.0f, 0.0f);      glVertex2f (0.05f, 0.05f);   
//         glTexCoord2f(1.0f, 0.0f);     glVertex2f (-0.05f, 0.05f); 
//         glTexCoord2f(1.0f, 1.0f);       glVertex2f (-0.05f, -0.05f);
//         glTexCoord2f(0.0f, 1.0f);       glVertex2f (0.05f, -0.05f); 
   // Front Face
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
      glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
      glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
      glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

      
      glEnd ();

     v2+=xspeed;
     v1+=yspeed;
     v3+=theta;

   return TRUE;                              // Keep Going
}

GLvoid KillGLWindow(GLvoid)                        // Properly Kill The Window
{
   if (fullscreen)                              // Are We In Fullscreen Mode?
   {
      ChangeDisplaySettings(NULL,0);               // If So Switch Back To The Desktop
      ShowCursor(TRUE);                        // Show Mouse Pointer
   }

   if (hRC)                                 // Do We Have A Rendering Context?
   {
      if (!wglMakeCurrent(NULL,NULL))               // Are We Able To Release The DC And RC Contexts?
      {
         MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
      }

      if (!wglDeleteContext(hRC))                  // Are We Able To Delete The RC?
      {
         MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
      }
      hRC=NULL;                              // Set RC To NULL
   }

   if (hDC && !ReleaseDC(hWnd,hDC))               // Are We Able To Release The DC
   {
      MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
      hDC=NULL;                              // Set DC To NULL
   }

   if (hWnd && !DestroyWindow(hWnd))               // Are We Able To Destroy The Window?
   {
      MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
      hWnd=NULL;                              // Set hWnd To NULL
   }

   if (!UnregisterClass("OpenGL",hInstance))         // Are We Able To Unregister Class
   {
      MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
      hInstance=NULL;                           // Set hInstance To NULL
   }
}

/*   This Code Creates Our OpenGL Window.  Parameters Are:               *
*   title         - Title To Appear At The Top Of The Window            *
*   width         - Width Of The GL Window Or Fullscreen Mode            *
*   height         - Height Of The GL Window Or Fullscreen Mode         *
*   bits         - Number Of Bits To Use For Color (8/16/24/32)         *
*   fullscreenflag   - Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)   */

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
   GLuint      PixelFormat;         // Holds The Results After Searching For A Match
   WNDCLASS   wc;                  // Windows Class Structure
   DWORD      dwExStyle;            // Window Extended Style
   DWORD      dwStyle;            // Window Style
   RECT      WindowRect;            // Grabs Rectangle Upper Left / Lower Right Values
   WindowRect.left=(long)0;         // Set Left Value To 0
   WindowRect.right=(long)width;      // Set Right Value To Requested Width
   WindowRect.top=(long)0;            // Set Top Value To 0
   WindowRect.bottom=(long)height;      // Set Bottom Value To Requested Height

   fullscreen=fullscreenflag;         // Set The Global Fullscreen Flag

   hInstance         = GetModuleHandle(NULL);            // Grab An Instance For Our Window
   wc.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;   // Redraw On Size, And Own DC For Window.
   wc.lpfnWndProc      = (WNDPROC) WndProc;               // WndProc Handles Messages
   wc.cbClsExtra      = 0;                           // No Extra Window Data
   wc.cbWndExtra      = 0;                           // No Extra Window Data
   wc.hInstance      = hInstance;                     // Set The Instance
   wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO);         // Load The Default Icon
   wc.hCursor         = LoadCursor(NULL, IDC_ARROW);         // Load The Arrow Pointer
   wc.hbrBackground   = NULL;                           // No Background Required For GL
   wc.lpszMenuName      = NULL;                           // We Don't Want A Menu
   wc.lpszClassName   = "OpenGL";                        // Set The Class Name

   if (!RegisterClass(&wc))                           // Attempt To Register The Window Class
   {
      MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                                 // Return FALSE
   }
   
   if (fullscreen)                                    // Attempt Fullscreen Mode?
   {
      DEVMODE dmScreenSettings;                        // Device Mode
      memset(&dmScreenSettings,0,sizeof(dmScreenSettings));   // Makes Sure Memory's Cleared
      dmScreenSettings.dmSize=sizeof(dmScreenSettings);      // Size Of The Devmode Structure
      dmScreenSettings.dmPelsWidth   = width;            // Selected Screen Width
      dmScreenSettings.dmPelsHeight   = height;            // Selected Screen Height
      dmScreenSettings.dmBitsPerPel   = bits;               // Selected Bits Per Pixel
      dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

      // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
      if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
      {
         // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.
         if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
         {
            fullscreen=FALSE;      // Windowed Mode Selected.  Fullscreen = FALSE
         }
         else
         {
            // Pop Up A Message Box Letting User Know The Program Is Closing.
            MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
            return FALSE;                           // Return FALSE
         }
      }
   }

   if (fullscreen)                                    // Are We Still In Fullscreen Mode?
   {
      dwExStyle=WS_EX_APPWINDOW;                        // Window Extended Style
      dwStyle=WS_POPUP;                              // Windows Style
      ShowCursor(FALSE);                              // Hide Mouse Pointer
   }
   else
   {
      dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;         // Window Extended Style
      dwStyle=WS_OVERLAPPEDWINDOW;                     // Windows Style
   }

   AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);      // Adjust Window To True Requested Size

   // Create The Window
   if (!(hWnd=CreateWindowEx(   dwExStyle,                     // Extended Style For The Window
                        "OpenGL",                     // Class Name
                        title,                        // Window Title
                        dwStyle |                     // Defined Window Style
                        WS_CLIPSIBLINGS |               // Required Window Style
                        WS_CLIPCHILDREN,               // Required Window Style
                        0, 0,                        // Window Position
                        WindowRect.right-WindowRect.left,   // Calculate Window Width
                        WindowRect.bottom-WindowRect.top,   // Calculate Window Height
                        NULL,                        // No Parent Window
                        NULL,                        // No Menu
                        hInstance,                     // Instance
                        NULL)))                        // Dont Pass Anything To WM_CREATE
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   static   PIXELFORMATDESCRIPTOR pfd=            // pfd Tells Windows How We Want Things To Be
   {
      sizeof(PIXELFORMATDESCRIPTOR),            // Size Of This Pixel Format Descriptor
      1,                                 // Version Number
      PFD_DRAW_TO_WINDOW |                  // Format Must Support Window
      PFD_SUPPORT_OPENGL |                  // Format Must Support OpenGL
      PFD_DOUBLEBUFFER,                     // Must Support Double Buffering
      PFD_TYPE_RGBA,                        // Request An RGBA Format
      bits,                              // Select Our Color Depth
      0, 0, 0, 0, 0, 0,                     // Color Bits Ignored
      0,                                 // No Alpha Buffer
      0,                                 // Shift Bit Ignored
      0,                                 // No Accumulation Buffer
      0, 0, 0, 0,                           // Accumulation Bits Ignored
      16,                                 // 16Bit Z-Buffer (Depth Buffer) 
      0,                                 // No Stencil Buffer
      0,                                 // No Auxiliary Buffer
      PFD_MAIN_PLANE,                        // Main Drawing Layer
      0,                                 // Reserved
      0, 0, 0                              // Layer Masks Ignored
   };
   
   if (!(hDC=GetDC(hWnd)))                     // Did We Get A Device Context?
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))   // Did Windows Find A Matching Pixel Format?
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   if(!SetPixelFormat(hDC,PixelFormat,&pfd))      // Are We Able To Set The Pixel Format?
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   if (!(hRC=wglCreateContext(hDC)))            // Are We Able To Get A Rendering Context?
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   if(!wglMakeCurrent(hDC,hRC))               // Try To Activate The Rendering Context
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   ShowWindow(hWnd,SW_SHOW);                  // Show The Window
   SetForegroundWindow(hWnd);                  // Slightly Higher Priority
   SetFocus(hWnd);                           // Sets Keyboard Focus To The Window
   ReSizeGLScene(width, height);               // Set Up Our Perspective GL Screen

   if (!InitGL())                           // Initialize Our Newly Created GL Window
   {
      KillGLWindow();                        // Reset The Display
      MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;                        // Return FALSE
   }

   return TRUE;                           // Success
}

LRESULT CALLBACK WndProc(   HWND   hWnd,         // Handle For This Window
                     UINT   uMsg,         // Message For This Window
                     WPARAM   wParam,         // Additional Message Information
                     LPARAM   lParam)         // Additional Message Information
{
   switch (uMsg)                           // Check For Windows Messages
   {
      case WM_ACTIVATE:                     // Watch For Window Activate Message
      {
         if (!HIWORD(wParam))               // Check Minimization State
         {
            active=TRUE;                  // Program Is Active
         }
         else
         {
            active=FALSE;                  // Program Is No Longer Active
         }

         return 0;                        // Return To The Message Loop
      }

      case WM_SYSCOMMAND:                     // Intercept System Commands
      {
         switch (wParam)                     // Check System Calls
         {
            case SC_SCREENSAVE:               // Screensaver Trying To Start?
            case SC_MONITORPOWER:            // Monitor Trying To Enter Powersave?
            return 0;                     // Prevent From Happening
         }
         break;                           // Exit
      }

      case WM_CLOSE:                        // Did We Receive A Close Message?
      {
         PostQuitMessage(0);                  // Send A Quit Message
         return 0;                        // Jump Back
      }

      case WM_KEYDOWN:                     // Is A Key Being Held Down?
      {
         keys[wParam] = TRUE;               // If So, Mark It As TRUE
         return 0;                        // Jump Back
      }

      case WM_KEYUP:                        // Has A Key Been Released?
      {
         keys[wParam] = FALSE;               // If So, Mark It As FALSE
         return 0;                        // Jump Back
      }

      case WM_SIZE:                        // Resize The OpenGL Window
      {
         ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height
         return 0;                        // Jump Back
      }
   }

   // Pass All Unhandled Messages To DefWindowProc
   return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(   HINSTANCE   hInstance,         // Instance
               HINSTANCE   hPrevInstance,      // Previous Instance
               LPSTR      lpCmdLine,         // Command Line Parameters
               int         nCmdShow)         // Window Show State
{
   MSG      msg;                           // Windows Message Structure
   BOOL   done=FALSE;                        // Bool Variable To Exit Loop

   // Ask The User Which Screen Mode They Prefer
   if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
   {
      fullscreen=FALSE;                     // Windowed Mode
   }

   // Create Our OpenGL Window
   if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))
   {
      return 0;                           // Quit If Window Was Not Created
   }

   while(!done)                           // Loop That Runs While done=FALSE
   {
      if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))   // Is There A Message Waiting?
      {
         if (msg.message==WM_QUIT)            // Have We Received A Quit Message?
         {
            done=TRUE;                     // If So done=TRUE
         }
         else                           // If Not, Deal With Window Messages
         {
            TranslateMessage(&msg);            // Translate The Message
            DispatchMessage(&msg);            // Dispatch The Message
         }
      }
      else                              // If There Are No Messages
      {
         // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
         if ((active && !DrawGLScene()) || keys[VK_ESCAPE])   // Active?  Was There A Quit Received?
         {
            done=TRUE;                     // ESC or DrawGLScene Signalled A Quit
         }
         else                           // Not Time To Quit, Update Screen
         {
            SwapBuffers(hDC);               // Swap Buffers (Double Buffering)
         }

         if (keys[VK_F1])                  // Is F1 Being Pressed?
         {
            keys[VK_F1]=FALSE;               // If So Make Key FALSE
            KillGLWindow();                  // Kill Our Current Window
            fullscreen=!fullscreen;            // Toggle Fullscreen / Windowed Mode
            // Recreate Our OpenGL Window
            if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))
            {
               return 0;                  // Quit If Window Was Not Created
            }
         }
         else if (keys['D'])      theta+=0.000001f;
            else if (keys[VK_UP])    xspeed+=0.0000001f;
         else if (keys[VK_DOWN])  xspeed-=0.0000001f;
            else if (keys[VK_RIGHT]) yspeed+=0.0000001f;
         else if (keys[VK_LEFT])  yspeed-=0.0000001f; 
     
   
      }
   }

   // Shutdown
   KillGLWindow();                           // Kill The Window
   return (msg.wParam);                     // Exit The Program
}


Очевидно, вы пытаетесь создавать коды, выдергивая их из текстов уроков. Я этот путь весь прошел, а потом обнаружил готовые коды на http://nehe.gamedev.net/. В конце концов я свел все в один проект http://pmg.org.ru/nehe/nehex3.htm, коды и демо на http://pmg.org.ru/nehe/LessonsCode_2010.7z, все адаптировано к Visual C++ MS VS 2010/2012.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Наложение текстуры
СообщениеДобавлено: 31 окт 2013 19:48 
Не в сети
Новичок

Зарегистрирован: 11 окт 2013 18:15
Сообщения: 5
Спасибо за помощь. Да, все правильно, код собираю из разных уроков, просто прибавляю к нему по какой-то новой возможности. Так, на мой взгляд интереснее, и запоминается лучше. За ссылки тоже спасибо огромное :r


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB