tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
933
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    PHPler PHPler ist offline Mitglied
    Registriert seit
    Sep 2004
    Beiträge
    10
    Hallo,

    ich habe ein kleines Problem und bin mir fast sicher das es entweder an VS2010 liegt oder an GLUT.

    Ich habe einen Beispielcode von meinem Professor, von dem aus ich das Projekt aufbauen soll. In der Uni habe ich diesen so schon verwenden und ausführen können, dort jedoch auf einer älteren VS Version (ich glaube 2008). Durch das Studentenprogramm von MS komme ich ja an VS2010 ran und hab es dann auch installiert.

    Erstes Problem war dann, dass <gl/glut.h> nicht installiert war. Also hab ich das gemacht.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    
    /* 
     
       Lehrveranstaltung Computergraphik,
       OpenGL Praktikum
       Erste Aufgabe
     
       Autor: Prof. Dr. Ralf Dörner, FH Wiesbaden
     
       Version 1.0
     
    */
    // für Textausgaben auf der Konsole:
    #include <stdio.h>
     
     
    // hier die notwendigen Includes - es genügt glut.h einzubinden, da
    // diese wiederum GL/gl.h und alle weiteren benötigten Include-
    // Dateien einbindet
    #include <gl/glut.h>
     
     
    // die Funktion display enthält alle Befehle, die zum Zeichnen des
    // Bildes benötigt werden
    void display( void )
    {
     
        // zunächst wird das bisher gezeichnete Bild gelöscht,
        // indem das Bild komplett in der Hintergrundfarbe gezeichnet
        // wird. Ausserdem wird die Verdeckungsrechnung initialisiert
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        
        // die folgenden drei Befehle dienen dazu anzugeben, von wo aus
        // die Szene betrachtet wird (d.h. unter welchem Blickwinkel
        // das Bild berechnet wird
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        // die ersten drei Argumente sind die Koordinaten, wo der
        // Betrachter steht, die nächsten drei Argumente geben die
        // Koordinaten an, wohin der Betrachter blickt und die letzten
        // drei Argumente geben an, wo oben ist (bei uns ist y-Richtung
        // oben
        gluLookAt(20.0,20.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
     
        // die Zeichenfarbe wird auf rot gesetzt
        glColor3f(1.0, 0.0, 0.0);
     
        // Verbinde die folgenden Eckpunkten zu Dreicken (bis glEnd()
        // kommt)
        glBegin(GL_TRIANGLES);
                // und hier kommen die Koordinaten der Eckpunkte:
                glVertex3f(0.0, 0.0, 0.0);
                glVertex3f(-10.0, 0.0, 0.0);
                glVertex3f(10.0, 10.0, 0.0);
        glEnd();
     
        // Sorge dafür, dass wirklich alle glBefehle abgearbeitet und
        // nicht gepuffert werden
        glFlush();
     
        // Vertausche die Backbuffer und Frontbuffer: das fertig
        // gezeichnete Bild soll jetzt angezeigt werden
        //glutSwapBuffers();
     
        // Sorge dafür, dass das Bild im nächsten Schleifendurchlauf
        // der glutMainLoop wieder gezeichnet wird
        //glutPostRedisplay();
     
    } // end display
     
     
    // die Funktion reshape enthält alle Befehle, die man benötigt,
    // um auf Veränderungen der Fenstergröße zu reagieren
    void reshape(int w, int h)
    {
        
        // hier wird die Perspektive gesetzt
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(60.0, w / h, 0.1, 100.0);
        glViewport(0.0, 0.0, w, h);
        glMatrixMode(GL_MODELVIEW);
     
    } // end reshape
     
     
    // die Funktion wird aufgerufen, sobald eine Taste der Tastur
    // gedrückt wurde. Es steht die Info zur Verfügung, welche
    // Taste gedrückt wurde und wo sich die Maus zu diesem Zeitpunkt
    // befand
    void keyboard(unsigned char key, int x, int y)
    {
        printf("Taste wurde gedrueckt: %c \n", key);
    }
     
     
    // die Funktion wird aufgerufen, sobald eine Taste der Maus
    // gedrückt wurde. Es steht die Info zur Verfügung, welche
    // Taste betroffen ist, ob sie gedrückt oder losgelassen wurde
    // und wo sich die Maus zu diesem Zeitpunkt befand
    void mouse(int button, int state, int x, int y)
    {
        if(GLUT_LEFT == button && GLUT_DOWN == state)
        {
            printf("Linker Mausbutton wurde geklickt.\n");
        }
    }
     
     
    // Hauptfunktion
    void main(int argc, char** argv)
    {
        // Initialisiere die GLUT
        glutInit(&argc,argv);
     
        // Setze den Display Mode: Farben werden in RGB angegeben,
        // es wird eine Verdeckungsrechnung durchgeführt und mit
        // zwei Buffern gearbeitet
        glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
        
        // Setze die Fenstergröße auf 500 x 500
        glutInitWindowSize(500,500); 
     
        // Erzeuge ein Fenster auf dem Bildschirm an Position
        // 100, 0 (Bildschirmkoordinaten)
        glutInitWindowPosition(100,0); 
     
        // Erzeuge das Fenster
        glutCreateWindow("Computergraphik ist toll!!");
        
        // Bestimme, welcher Callback zum Zeichnen aufgerufen wird
        glutDisplayFunc(display); 
     
        // Bestimme, welcher Callback bei Größenänderung des Fensters
        // aufgerufen wird
        glutReshapeFunc(reshape);
     
        // Bestimme, welcher Callback bei Betätigung der Tastatur
        // aufgerufen wird
        glutKeyboardFunc(keyboard);
     
        // Bestimme, welcher Callback bei Betätigen einer Maustaste
        // aufgerufen wird
        glutMouseFunc(mouse);
     
        // die Hintergrundfarbe wird auf gelb gesetzt
        glClearColor(1.0, 1.0, 0.0, 1.0);
     
        // die Initialisierung der Verdeckungsrechnung ist 1.0
        glClearDepth(1.0);
     
        // die Verdeckungsrechnung wird eingeschaltet
        glEnable(GL_DEPTH_TEST);
     
        // Übergebe die Kontrolle nun an GLUT, die in einer Endlos-
        // schleife die Callbacks aufruft
        glutMainLoop(); 
    }// end main

    So, das sollte doch eigentlich alles gewesen sein. Programm compiliert, Consolen Fenster geht auf, OpenGL Fenster geht auf, bleibt aber weiss.

    Wo ist jetzt das Problem? Ich kann in das Fenster klicken und bekomme dann Ausgaben in der Konsole (Linker Maus Button gedrückt), das gleiche mit Tastatur eingaben. Ein "resize" des Fensters bewirkt auch keine Veränderung.

    Bei einem Kommilitonen funktioniert alles, wenn er es so macht. Könnte es am System liegen?

    Win7 64Bit
    Intel E6600
    ATI 4870

    Bin für jede Hilfe dankbar.
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.522
    Ich kann dich beruhigen, ich hab es jetzt mal mit 2005, 2008 und 2010 getestet:

    - Visual Studio 2005 kompiliert nicht, weil GL/gl.h fehlt
    - Visual Studio 2008 kompiliert, linkt und führt aus, Bildschirm bleibt weiß, Maustasten-Event-Handler reagiert auf LMT
    - Visual Studio 2010 kompiliert, linkt und führt aus, Bildschirm bleibt weiß, Maustasten-Event-Handler reagiert auf LMT

    Ich musste jedoch die GLUT erstmal installieren, hier die verwendete Anleitung: http://csf11.acs.uwosh.edu/cs371/visualstudio/

    Der "Fehler" muss also wo anders zu suchen sein, denn das Verhalten ist auf einer anderen Maschine mit anderen Compilern identisch. Das Einzige, was jetzt noch sein könnte, wäre, das du und ich die gleiche "falsche" Glut-Lib einsetzen.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    PHPler PHPler ist offline Mitglied
    Registriert seit
    Sep 2004
    Beiträge
    10
    Okay danke dir schon mal saftmeister, ich habe glaube dieselbe Anleitung für GLUT verwendet, dann muss ich nochmal den Quellcode mit meinen Komillitonen abgleichen, bin aber eigentlich sicher das ich nichts verändert habe. Ich schmeiss nen Edit rein, wenn es was neues gibt.
    Ich lass mir dann auch mal bei der Gelegenheit die GLUT Dateien zuschicken, um das auch auszuschließen.

    EDIT:
    Okay anscheinend war ich doch so doof und hab den Originalquellcode verändert. Hab ihn mir nochmal aus dem Verzeichnis vom Prof geholt und es geht nun.

    Danke!
    Geändert von PHPler (29.12.11 um 10:57 Uhr)
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 24.01.11, 16:44
  2. MFC .exe sehr groß mit VS2010
    Von thekiller im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 19.08.10, 11:42
  3. OpenGL - Glut - Sichtweite
    Von petergoessweiner im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 04.07.08, 23:23
  4. Antworten: 0
    Letzter Beitrag: 04.06.08, 15:13
  5. OpenGL (mit Glut) 3D Würfel
    Von baum77 im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 20.04.07, 18:36

Stichworte