Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

gluPerspective

2.4K
14 июля 2005 года
Lenin
51 / / 05.12.2004
Недавно начал учить opengl,написал простенький пример,но вот облом-не компилится,точнее не линкуется.Выдает:unresolved external symbol _main referenced in function _mainCRTStartup.Опытным путем выяснил,что проблема в функции gluPerspective.Причем ошибка вылетает только когда линкую с libcmt,а если с msvcrt,то ничего.
Неработает если переназначить точку входа на свою, но с winmain и main ессесно работает.
Вопрос:как сделать,чтобы заработало и какого gluPerspective бращается к main().
255
14 июля 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by Lenin
Недавно начал учить opengl,написал простенький пример,но вот облом-не компилится,точнее не линкуется.Выдает:unresolved external symbol _main referenced in function _mainCRTStartup.Опытным путем выяснил,что проблема в функции gluPerspective.Причем ошибка вылетает только когда линкую с libcmt,а если с msvcrt,то ничего.
Неработает если переназначить точку входа на свою, но с winmain и main ессесно работает.
Вопрос:как сделать,чтобы заработало и какого gluPerspective бращается к main().


Запомни в OpenGl ошибок быть не может, особенно в документированой части. Это, скорее всего компилятор неправильно идентифицирует место ошибки. Надо код смотреть.
ЗЫ. А на чем пишешь?

2.4K
15 июля 2005 года
Lenin
51 / / 05.12.2004
Цитата:
Originally posted by Dart Bobr
Запомни в OpenGl ошибок быть не может, особенно в документированой части. Это, скорее всего компилятор неправильно идентифицирует место ошибки. Надо код смотреть.
ЗЫ. А на чем пишешь?


Пишу на c/c++,а вот код

Код:
#pragma comment(lib,"OpenGL32.lib")
#pragma comment(lib,"Glu32.lib")
#pragma comment(lib,"GlAux.Lib")
#pragma comment(linker,"/ENTRY:My_WinMain")
#pragma comment(linker,"/SUBSYSTEM:WINDOWS")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"GDI32.lib")

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/GLAux.h>

//Constants:
HGLRC glRc=NULL;
HDC dC=NULL;
HWND hW=NULL;
HINSTANCE hI=NULL;

//Bools:
bool keys[256];
bool mini=true;
bool fullScreen=TRUE;

//Functions declare:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

//Code:
void ReSizeScene(GLsizei width,GLsizei height)
{
    if (height==0)
        height++;
    glViewport(0,0,height,width);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int GLInit(GLvoid)
{
    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;
}

int DrawScene(GLvoid)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    auxSolidCone(1,1);
    auxWireCone(1,1);
    return TRUE;
}

GLvoid KillGLWindow(GLvoid)
{
    if (fullScreen)
    {
        ChangeDisplaySettings(NULL,0);
        ShowCursor(TRUE);
    }
    if (glRc)
    {
        if (!wglMakeCurrent(NULL,NULL))
        {
            MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        }
        if (!wglDeleteContext(glRc))
        {
            MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        }
        glRc=NULL;                         
    }
    if (dC && !ReleaseDC(hW,dC))                   
    {
        MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        dC=NULL;                           
    }
    if (hW && !DestroyWindow(hW))                  
    {
        MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        hW=NULL;                           
    }
    if (!UnregisterClass("OpenGL",hI))             
    {
        MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        hI=NULL;                           
    }
}

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
    GLuint uI;
    WNDCLASS w;
    ZeroMemory(&w,sizeof(WNDCLASS));
    RECT r;
    r.left=(long)0;
    r.right=(long)width;
    r.top=(long)0;
    r.bottom=(long)height;
    fullScreen=fullscreenflag;
    hI=GetModuleHandle(NULL);
    w.hInstance=hI;
    w.style=CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    w.lpfnWndProc=(WNDPROC)WndProc;
    w.cbClsExtra=0;
    w.cbWndExtra=0;
    w.hIcon=LoadIcon(NULL, IDI_WINLOGO);
    w.hCursor=LoadCursor(NULL, IDC_ARROW);
    w.lpszClassName="OpenGL";
    if (!RegisterClass(&w))
    {
        MessageBox(NULL,"Error while registering class!","Error!",NULL);
        return FALSE;
    }
    DEVMODE d;
    d.dmBitsPerPel=bits;
    d.dmSize=sizeof(DEVMODE);
    d.dmPelsHeight=height;
    d.dmPelsWidth=width;
    d.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    if (ChangeDisplaySettings(&d,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
    {
        MessageBox(NULL,"Can't change video mode!","Error!",NULL);
        return FALSE;
    }
    DWORD dwExStyle=WS_EX_APPWINDOW;                   
    DWORD dwStyle=WS_POPUP;
    ShowCursor(FALSE);
    if (!CreateWindowEx(dwExStyle,"OpenGl","GLWindow",WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle,0,0,r.right-r.left,r.bottom-r.top,NULL,NULL,hI,NULL))
    {
        KillGLWindow();
        MessageBox(NULL,"ErrorCreatingWindow","Error!",NULL);
        return FALSE;
    }
    static  PIXELFORMATDESCRIPTOR pfd=                 
    {
        sizeof(PIXELFORMATDESCRIPTOR),                 
        1,                             
        PFD_DRAW_TO_WINDOW |                       
        PFD_SUPPORT_OPENGL |                       
        PFD_DOUBLEBUFFER,                      
        PFD_TYPE_RGBA,                         
        bits,                              
        0, 0, 0, 0, 0, 0,                      
        0,                             
        0,                             
        0,                             
        0, 0, 0, 0,                        
        16,                            
        0,                             
        0,                             
        PFD_MAIN_PLANE,                        
        0,                             
        0, 0, 0                            
    };
    if (!(dC=GetDC(hW)))
    {
        KillGLWindow();
        MessageBox(NULL,"Can't get DC!","Error!",NULL);
        return FALSE;
    }
    if (!(uI=ChoosePixelFormat(dC,&pfd)))
    {
        KillGLWindow();
        MessageBox(NULL,"Can't choose pF!","Error!",NULL);
        return FALSE;
    }
    if (!SetPixelFormat(dC,uI,&pfd))
    {
        KillGLWindow();
        MessageBox(NULL,"Can't set pF!","Error!",NULL);
        return FALSE;
    }
    if (!(glRc=wglCreateContext(dC)))
    {
        KillGLWindow();
        MessageBox(NULL,"Can't create rC!","Error!",NULL);
        return FALSE;
    }
    ShowWindow(hW,SW_SHOW);
    SetForegroundWindow(hW);
    SetFocus(hW);
    ReSizeScene(width,height);
    if (!GLInit())
    {
        KillGLWindow();
        MessageBox(NULL,"Can't init OpenGL!","Error!",NULL);
        return FALSE;
    }
    return TRUE;
}

LRESULT CALLBACK WndProc(HWND hW,UINT uI,WPARAM wP,LPARAM lP)
{
    switch (uI)
    {
    case WM_ACTIVATE:
        {
            if (!HIWORD(wP))
            {
                mini=TRUE;
            }
            else
            {
                mini=FALSE;
            }
            return 0;
        }
    case WM_SYSCOMMAND:
        {
            switch(wP)
            {
            case SC_SCREENSAVE:
            case SC_MONITORPOWER:
                return 0;
            }
            break;
        }
    case WM_CLOSE:
        {
            PostQuitMessage(0);
            return 0;
        }
    case WM_KEYDOWN:
        {
            keys[wP]=TRUE;
            return 0;
        }
    case WM_KEYUP:
        {
            keys[wP]=FALSE;
            return 0;
        }
    case WM_SIZE:
        {
            ReSizeScene(LOWORD(lP),HIWORD(lP));
            return 0;
        }
    }
    return DefWindowProc(hW,uI,wP,lP);
}

int WINAPI My_WinMain()
{
    return 0;
}

Я думаю проблемы со сменой точки входа,наверно надо что-то в настройках проэкта сменить,а что-не знаю.
255
16 июля 2005 года
Dart Bobr
1.4K / / 09.04.2004
Хм, код вроди правильно выглядит.
А если закоментить gluPerspective?
Ошибка вылетает?
А зачем переназначать точку входа?
ЗЫ. В функции ResizeScene у тебя перепутаны местами параметры функции glViewPort.
Код лучше всегда пиши в аттач к теме.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог