Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

OpenGL Glut linkowanie pomocy

Ostatnio zmodyfikowano 2010-02-24 18:04
Autor Wiadomość
ison
Temat założony przez niniejszego użytkownika
OpenGL Glut linkowanie pomocy
» 2010-02-23 14:43:07
Witam

Od jakiegoś czasu uczę się opengla i zauważyłem że często używany jest razem z nim glut. Problem w tym że w żaden sposób nie mogę sprawić aby działał. Używam Dev-C++, gluta pobralem z DevPacka. Gdy robię nowy projekt->Glut app to wyświetla mi się przykładowy program, który się nawet nie kompiluje. Przeszukałem całe google. Jedyne co znalazłem to to że trzeba zalinkować gluta i opengl, ale Dev robi to automatycznie podczas tworzenia nowego projektu. Linkowałem już wszystko:
-lglut32
-lglut
-glut32
-glut16
-glut
-opengl
-lopengl32
-opengl32
-opengl16
-glu
-glu16
-glu32
-lglu32

nadal wyskakuje mi:
[Linker error] undefined reference to `_imp____glutInitWithExit@12'
[Linker error] undefined reference to `_imp____glutCreateWindowWithExit@8'
[Linker error] undefined reference to `_imp____glutCreateMenuWithExit@8'
ld returned 1 exit status
[Build Error]  [Project1.exe] Error 1



Zgodnie z radami dołączałem windows.h
nic nie pomogło

Czy jest możliwe żeby glut działał pod Devem? Bo z tego co ja widzę to raczej nie.
Ewentualnie jaki edytor byście mi polecili w takim wypadku?
Proszę o jak najszybszą pomoc
-Ison
P-14042
wojownik266
» 2010-02-23 14:57:30
Od pewnego czasu też bawię się w OpenGL. Jak byś mógł to wrzuć cały kod programu w którym używasz gluta. Wtedy można by coś więcej napisać. OK?
P-14044
ison
Temat założony przez niniejszego użytkownika
» 2010-02-23 15:09:51
Tu jest cały kod przykładowego programu, nie wiem co on robi bo nie mogę skompilować:

C/C++
#include <windows.h>
#include <GL/glut.h>
#include <stdlib.h>

static int slices = 16;
static int stacks = 16;

/* GLUT callback Handlers */

static void
resize( int width, int height )
{
    const float ar =( float ) width /( float ) height;
   
    glViewport( 0, 0, width, height );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glFrustum( - ar, ar, - 1.0, 1.0, 2.0, 100.0 );
   
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
}

static void
display( void )
{
    const double t = glutGet( GLUT_ELAPSED_TIME ) / 1000.0;
    const double a = t * 90.0;
   
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3d( 1, 0, 0 );
   
    glPushMatrix();
    glTranslated( - 2.4, 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutSolidSphere( 1, slices, stacks );
    glPopMatrix();
   
    glPushMatrix();
    glTranslated( 0, 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutSolidCone( 1, 1, slices, stacks );
    glPopMatrix();
   
    glPushMatrix();
    glTranslated( 2.4, 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutSolidTorus( 0.2, 0.8, slices, stacks );
    glPopMatrix();
   
    glPushMatrix();
    glTranslated( - 2.4, - 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutWireSphere( 1, slices, stacks );
    glPopMatrix();
   
    glPushMatrix();
    glTranslated( 0, - 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutWireCone( 1, 1, slices, stacks );
    glPopMatrix();
   
    glPushMatrix();
    glTranslated( 2.4, - 1.2, - 6 );
    glRotated( 60, 1, 0, 0 );
    glRotated( a, 0, 0, 1 );
    glutWireTorus( 0.2, 0.8, slices, stacks );
    glPopMatrix();
   
    glutSwapBuffers();
}


static void
key( unsigned char key, int x, int y )
{
    switch( key )
    {
    case 27:
    case 'q':
        exit( 0 );
        break;
       
    case '+':
        slices++;
        stacks++;
        break;
       
    case '-':
        if( slices > 3 && stacks > 3 )
        {
            slices--;
            stacks--;
        }
        break;
    }
   
    glutPostRedisplay();
}

static void
idle( void )
{
    glutPostRedisplay();
}

const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

/* Program entry point */

int main( int argc, char * argv[] )
{
    glutInit( & argc, argv );
    glutInitWindowSize( 640, 480 );
    glutInitWindowPosition( 10, 10 );
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
   
    glutCreateWindow( "FreeGLUT Shapes" );
   
    glutReshapeFunc( resize );
    glutDisplayFunc( display );
    glutKeyboardFunc( key );
    glutIdleFunc( idle );
   
    glClearColor( 1, 1, 1, 1 );
    glEnable( GL_CULL_FACE );
    glCullFace( GL_BACK );
   
    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LESS );
   
    glEnable( GL_LIGHT0 );
    glEnable( GL_NORMALIZE );
    glEnable( GL_COLOR_MATERIAL );
    glEnable( GL_LIGHTING );
   
    glLightfv( GL_LIGHT0, GL_AMBIENT, light_ambient );
    glLightfv( GL_LIGHT0, GL_DIFFUSE, light_diffuse );
    glLightfv( GL_LIGHT0, GL_SPECULAR, light_specular );
    glLightfv( GL_LIGHT0, GL_POSITION, light_position );
   
    glMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient );
    glMaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse );
    glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular );
    glMaterialfv( GL_FRONT, GL_SHININESS, high_shininess );
   
    glutMainLoop();
   
    return EXIT_SUCCESS;
}



Problem w tym że sam OpenGL działa tylko z glutem coś nie tak
zalinkowane mam:
-lglut32
-lglu32
-lopengl32
tak jak być powinno, a błędów o linkowaniu wyskakuje multum, nie wiem czy dam rade je wszystkie tu skopiować, oto kilka z nich:
[Linker error] undefined reference to `_imp____glutInitWithExit@12'
[Linker error] undefined reference to `_imp____glutCreateWindowWithExit@8'
[Linker error] undefined reference to `_imp____glutCreateMenuWithExit@8'
[Linker error] undefined reference to `_imp__glutGet@4'
P-14045
ison
Temat założony przez niniejszego użytkownika
» 2010-02-23 15:56:58
Nikt nie może pomóc? :(

coś wyszukałem w necie że może pomóc dodanie na początku
#define GLUT_DISABLE_ATEXIT_HACK

linkery:
-lglut32
-lglut
-glut32
-glut16
-glut
-opengl
-lopengl32
-opengl32
-opengl16
-glu
-glu16
-glu32
-lglu32

C/C++
#define GLUT_DISABLE_ATEXIT_HACK
#include <windows.h>               //header file for windows
#include <gl\gl.h>                 //header file for openGL
#include <gl\glu.h>                //header file for the openGL utility library
#include <gl\glut.h>               //header file for GLUT

void RenderScene()

{
    glClear( GL_COLOR_BUFFER_BIT );
   
    glFlush();
}

void SetupRC()
{
    glClearColor( 0.0f, 0.0f, 1.0, 1.0 );
}
int main()
{
    glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
    glutCreateWindow( "Simple" );
    glutDisplayFunc( RenderScene );
   
    SetupRC();
   
    glutMainLoop();
gdy kompiluję, o dziwo wszystko jest ok, lecz gdy próbuje uruchomić wyskakuje okienko Project is not compiled. Mam dość tego deva. Czy naprawdę nie mam szans na naukę opengla?
P-14046
wojownik266
» 2010-02-23 16:04:22
Proponuję zmienić Deva na CodeBlocks. Ten kod programu który mi podałeś bez problemu kompiluje się i uruchamia pod CodeBlockiem-). Sposób instalacji itp.. masz tutaj: 
http://www.mediafire.com/sharekey=28a1f36df249db2791b20cc0d07ba4d29d376d667d13491b

A gdyby Ci coś nie wychodziło to mozesz do mnie śmiało pisać. Mój e-mail: wojownik266@wp.pl
P-14048
wojownik266
» 2010-02-23 16:09:54
Sorry pomyliłem adres strony To ma być tutaj: http://codiecode.wordpress.com/
P-14049
ison
Temat założony przez niniejszego użytkownika
» 2010-02-23 16:12:19
Wow. Udało się. Po pierwsze linkery (wszystkie możliwe jakie udało mi się znaleźć :D)
-lmingw32
-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32
-ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32
-lglut32
-lglu32
-lopengl32
-lm
-lwinmm
-lglut32
-lglut
-glut32
-glut16
-glut
-opengl
-lopengl32
-opengl32
-opengl16
-glu
-glu16
-glu32
-lglu32

po drugie
#include <windows.h>
#define GLUT_DISABLE_ATEXIT_HACK
#include <GL/glut.h>

po trzecie
ściągnąc glut.dll z neta i wpakować go do pliku z programem.


Niby działa ale nie do końca bo:
Jak kompiluje projekt to exe ma nazwę pengl16.exe więc musze go ręcznie uruchamiać za każdym razem. Jak juz go uruchomię i zamknę krzyżykiem to... uwaga... proces się nie zakańcza więc muszę go killować za każdym razem. Jak skopiuję jakiś program z tutejszego tutoriala to i tak nie działa tak jak powinien. Tym optymistycznym akcentem dochodzę do wniosku że Dev-cpp to najgorszy edytor jaki powstał w całej historii programowania. Wielkie dzięki wojownik266 za pomoc. Rzeczywiście zainstaluję code::blocks.
P-14050
wojownik266
» 2010-02-23 16:18:39
A gdybyś jednak nie chciał zmieniać kompilatora to mozesz tylko pobrać plik glut.zip z ze strony którą Ci podałew wyżej i powklejać pliki do odpowiednich katalogów. U mnie działa pod Devem i codeblockiem
P-14051
« 1 » 2 3
  Strona 1 z 3 Następna strona