Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> open GL, урок из NeHe не получается 
:(
    Опции темы
koljan
Дата 20.9.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



Код

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

static HGLRC hRC;
static HDC hDC;
BOOL keys[256];

GLvoid InitGL(GLsizei Width, GLsizei Height)
{
    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);
}
GLvoid ReSizeGLScene(GLsizei Width, GLsizei Height)
{
    if (Height==0)  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);
}

GLvoid DrawGLScene(GLvoid)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
}


LRESULT CALLBACK WndProc(       HWND    hWnd,
                                UINT    message,
                                WPARAM  wParam,
                                LPARAM  lParam)
{
    RECT    Screen;         
        GLuint  PixelFormat;
        static  PIXELFORMATDESCRIPTOR pfd=
        {
                sizeof(PIXELFORMATDESCRIPTOR),  
        1,                              
        PFD_DRAW_TO_WINDOW |            
        PFD_SUPPORT_OPENGL |            
        PFD_DOUBLEBUFFER,               
        PFD_TYPE_RGBA,                  
        16,                             
        0, 0, 0, 0, 0, 0,               
        0,                              
        0,                              
        0,                              
        0, 0, 0, 0,                     
        16,                             
        0,                              
        0,                              
        PFD_MAIN_PLANE,                 
        0,                              
        0, 0, 0 
};

switch (message)
{
case WM_CREATE:
    hDC=GetDC(hWnd);
    PixelFormat=ChoosePixelFormat(hDC,&pfd);
    if(!PixelFormat)
        {
            MessageBox(0,"Can't Find A Suitable PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
        break;
        }

if(!SetPixelFormat(hDC,PixelFormat,&pfd))
        {
            MessageBox(0,"Can't Set The PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
hRC=wglCreateContext(hDC);
if(!hRC)
    {
        MessageBox(0,"error rendering","error",MB_OK|MB_ICONERROR);
        PostQuitMessage(0);
        break;
    }
if(!wglMakeCurrent(hDC, hRC))
                {
                MessageBox(0,"Can't activate GLRC.","Error",MB_OK|MB_ICONERROR);
                PostQuitMessage(0);
                break;
                }

GetClientRect(hWnd, &Screen);
                InitGL(Screen.right, Screen.bottom);
                break;

case WM_DESTROY:
                case WM_CLOSE:
                ChangeDisplaySettings(NULL, 0);

                wglMakeCurrent(hDC,NULL);
                wglDeleteContext(hRC);
                ReleaseDC(hWnd,hDC);

                PostQuitMessage(0);
                break;
case WM_KEYDOWN:
                keys[wParam] = TRUE;
                break;

case WM_KEYUP:
                keys[wParam] = FALSE;
                break;
                case WM_SIZE:
                ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
                break;
default:
        return (DefWindowProc(hWnd, message, wParam, lParam));
        }
        return (0);
}




int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, 
                LPSTR lpCmdLine,int nCmdShow)
{
        MSG             msg;    
        WNDCLASS        wc; 
        HWND            hWnd;   
        wc.style                = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
        wc.lpfnWndProc          = (WNDPROC) WndProc;
        wc.cbClsExtra           = 0;
        wc.cbWndExtra           = 0;
        wc.hInstance            = hInstance;
        wc.hIcon                = NULL;
        wc.hCursor              = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground        = NULL;
        wc.lpszMenuName         = NULL;
        wc.lpszClassName        = "OpenGL WinClass";
if(!RegisterClass(&wc))
        {
        MessageBox(0,"Failed To Register The Window Class.","Error",MB_OK|MB_ICONERROR);
        return FALSE;
        }
hWnd = CreateWindow(
        "OpenGL WinClass",
        "OPEN GL", 

        WS_POPUP |
        WS_CLIPCHILDREN |
        WS_CLIPSIBLINGS,

        0, 0,                   
        640, 480,               

        NULL,
        NULL,
        hInstance,
        NULL);
if(!hWnd)
        {
        MessageBox(0,"Window Creation Error.","Error",MB_OK|MB_ICONERROR); 
                return FALSE;
        }

DEVMODE dmScreenSettings;                       

memset(&dmScreenSettings, 0, sizeof(DEVMODE));          
dmScreenSettings.dmSize = sizeof(DEVMODE);              
dmScreenSettings.dmPelsWidth    = 640;                  
dmScreenSettings.dmPelsHeight   = 480;                  
dmScreenSettings.dmFields       = DM_PELSWIDTH | DM_PELSHEIGHT; 
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);


ShowWindow(hWnd, SW_SHOW);
        UpdateWindow(hWnd);
        SetFocus(hWnd);

while (1)
        {
                
                while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
                {
                        if (GetMessage(&msg, NULL, 0, 0))
                        {
                                TranslateMessage(&msg);
                                DispatchMessage(&msg);
                        }
                        else
                        {
                                return TRUE;
                        }
                }


DrawGLScene();                          
        SwapBuffers(hDC);                               
        if (keys[VK_ESCAPE]) SendMessage(hWnd,WM_CLOSE,0,0);    
        }

}


ошибки 
ogl error LNK2019: unresolved external symbol _gluPerspective@32 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z)

И их куча только немного отличаются



--------------------
PM MAIL ICQ   Вверх
koljan
Дата 20.9.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



уже нашёл ответ


--------------------
PM MAIL ICQ   Вверх
koljan
Дата 20.9.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



Код

#include <windows.h>      
#include <stdio.h>        
#include <gl\gl.h>        
#include <gl\glu.h>       
#include <gl\glaux.h>     
HDC             hDC=NULL; 
HGLRC           hRC=NULL; 
HWND            hWnd=NULL;
HINSTANCE       hInstance;
bool    keys[256];      
bool    active=TRUE;    
bool    fullscreen=TRUE;
BOOL    twinkle;          
BOOL    tp;
const   num=50;
typedef struct            
{
        int r, g, b;      
        GLfloat dist;     
        GLfloat angle;    
}
stars;                    
stars star[num];          
GLfloat zoom=-15.0f;      
GLfloat tilt=90.0f;       
GLfloat spin;             
GLuint  loop;             
GLuint  texture[1];       
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
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[1];
        memset(TextureImage,0,sizeof(void *)*1);
        if (TextureImage[0]=LoadBMP("Data/Star.bmp"))
        {
                Status=TRUE;            
                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, TextureImage[0]->sizeX,
        TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        }
        if (TextureImage[0])            
        {
                if (TextureImage[0]->data)   
                {
                       
                        free(TextureImage[0]->data);
                }
                free(TextureImage[0]);  
        }
        return Status;                  
}
int InitGL(GLvoid)                      
{
        if (!LoadGLTextures())          
        {
                return FALSE;           
        }
        glEnable(GL_TEXTURE_2D);        
        glShadeModel(GL_SMOOTH);
        glClearColor(0.0f, 0.0f, 0.0f, 0.5f);   
        glClearDepth(1.0f);                     
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
        glBlendFunc(GL_SRC_ALPHA,GL_ONE);
        glEnable(GL_BLEND);          
        for (loop=0; loop<num; loop++)       
        {
                star[loop].angle=0.0f;
                star[loop].dist=(float(loop)/num)*5.0f;
                star[loop].r=rand()%256;
                star[loop].g=rand()%256;
                star[loop].b=rand()%256;
        }
        return TRUE;                  
}
int DrawGLScene(GLvoid)              
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        for (loop=0; loop<num; loop++)               
        {
                
                glLoadIdentity();
                glTranslatef(0.0f,0.0f,zoom);
                glRotatef(tilt,1.0f,0.0f,0.0f);
                glRotatef(star[loop].angle,0.0f,1.0f,0.0f);
                glTranslatef(star[loop].dist,0.0f,0.0f);
glRotatef(-star[loop].angle,0.0f,1.0f,0.0f);
                glRotatef(-tilt,1.0f,0.0f,0.0f);        
                if (twinkle)                            
                {
                        
                        glColor4ub(star[(num-loop)-1].r,star[(num-loop)-1].g,
                        star[(num-loop)-1].b,255);
                        glBegin(GL_QUADS);
                                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);
                                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);
                                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
                                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
                        glEnd();                               
                }
glRotatef(spin,0.0f,0.0f,1.0f);
                glColor4ub(star[loop].r,star[loop].g,star[loop].b,255);
                glBegin(GL_QUADS);             
                        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f);
                        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f);
                        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
                        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
                glEnd();      
                spin+=0.01f;                    
                star[loop].angle+=float(loop)/num;
                star[loop].dist-=0.01f; 
                if (star[loop].dist<0.0f)   
                {
                        star[loop].dist+=5.0f;  
                        star[loop].r=rand()%256;
                        star[loop].g=rand()%256;
                        star[loop].b=rand()%256;
                }
        }
        return TRUE;                                            
}
SwapBuffers(hDC);               
                if(keys['T'] && !tp)           SE
                {
                        tp=TRUE;               
                        twinkle=!twinkle;      
                }
                if (!keys['T'])                
                {
                        tp=FALSE;              
                }
if (keys[VK_UP])              
                {
                        tilt-=0.5f;            
                }

                if (keys[VK_DOWN])             
                {
                        tilt+=0.5f;            
                }

                if (keys[VK_PRIOR])            
                {
                        zoom-=0.2f;            
                }

                if (keys[VK_NEXT])             
                {
                        zoom+=0.2f;            
                }
if (keys[VK_F1])                
                {
                        keys[VK_F1]=FALSE;     
                        KillGLWindow();        
                        fullscreen=!fullscreen;
                        if (!CreateGLWindow("NeHe's Textures,Lighting & Keyboard Tutorial",640,480,16,fullscreen))
                        {
                                return 0;       
                        }
                }
        }
}


теперь у меня такой код не пашет
ошибки ::
i:\c#\screen\screen\screen.cpp(140): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(139): error C2501: 'SwapBuffers' : missing storage-class or type specifiers
i:\c#\screen\screen\screen.cpp(139): error C2365: 'SwapBuffers' : redefinition; previous definition was a 'function'
i:\c#\screen\screen\screen.cpp(139): error C2440: 'initializing' : cannot convert from 'HDC' to 'int'
i:\c#\screen\screen\screen.cpp(141): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(141): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(145): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(146): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(146): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(149): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(150): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(150): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(154): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(155): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(155): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(159): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(160): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(160): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(164): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(165): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(165): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(168): error C2059: syntax error : 'if'
i:\c#\screen\screen\screen.cpp(169): error C2143: syntax error : missing ';' before '{'
i:\c#\screen\screen\screen.cpp(169): error C2447: '{' : missing function header (old-style formal list?)
i:\c#\screen\screen\screen.cpp(178): error C2059: syntax error : '}'
i:\c#\screen\screen\screen.cpp(178): error C2143: syntax error : missing ';' before '}'
i:\c#\screen\screen\screen.cpp(178): error C2059: syntax error : '}'
i:\c#\screen\screen\screen.cpp(179): error C2143: syntax error : missing ';' before '}'
i:\c#\screen\screen\screen.cpp(179): error C2059: syntax error : '}'


во как smile  




--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.