Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 20:30

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Superbible 4
BeitragVerfasst: Fr Aug 31, 2007 11:24 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 07:25
Beiträge: 12
Hallo!ich versuche die Beispiele gerade zum Laufen zu bekommen,aber ich schaffe es einfach nicht...
Habe z.B. aus Kaptiel 11 einen Sternenhimmel,mit folgendem Code:
Code:
  1. // starrynight.cpp
  2. // OpenGL SuperBible
  3. // Demonstrates vertex arrays (with point sprites!)
  4. // Program by Richard S. Wright Jr.
  5. #include "../../shared/gltools.h"   // OpenGL toolkit
  6. #include "../../shared/glframe.h"
  7. #include <math.h>
  8.  
  9.  
  10. // Array of small stars
  11. #define SMALL_STARS 100
  12. M3DVector2f  vSmallStars[SMALL_STARS];
  13.  
  14. #define MEDIUM_STARS   40
  15. M3DVector2f vMediumStars[MEDIUM_STARS];
  16.  
  17. #define LARGE_STARS 15
  18. M3DVector2f vLargeStars[LARGE_STARS];
  19.  
  20. #define SCREEN_X    800
  21. #define SCREEN_Y    600
  22.  
  23. int drawMode = 1;       // Normal points
  24.  
  25. GLuint  textureObjects[2];    // Texture Objects
  26.  
  27. ///////////////////////////////////////////////////////////////////////
  28. // Reset flags as appropriate in response to menu selections
  29. void ProcessMenu(int value)
  30.     {
  31.     drawMode = value;
  32.  
  33.     switch(value)
  34.         {
  35.         case 1:
  36.             // Turn off blending and all smoothing
  37.             glDisable(GL_BLEND);
  38.             glDisable(GL_LINE_SMOOTH);
  39.             glDisable(GL_POINT_SMOOTH);
  40.             glDisable(GL_TEXTURE_2D);
  41.             glDisable(GL_POINT_SPRITE);
  42.             break;
  43.  
  44.         case 2:
  45.             // Turn on antialiasing, and give hint to do the best
  46.             // job possible.
  47.             glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  48.             glEnable(GL_BLEND);
  49.             glEnable(GL_POINT_SMOOTH);
  50.             glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
  51.             glEnable(GL_LINE_SMOOTH);
  52.             glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
  53.             glDisable(GL_TEXTURE_2D);
  54.             glDisable(GL_POINT_SPRITE);
  55.             break;
  56.  
  57.         case 3:     // Point Sprites
  58.             glEnable(GL_BLEND);
  59.             glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
  60.             glDisable(GL_LINE_SMOOTH);
  61.             glDisable(GL_POINT_SMOOTH);
  62.             glDisable(GL_POLYGON_SMOOTH);
  63.             break;
  64.  
  65.  
  66.         default:
  67.             break;
  68.         }
  69.        
  70.     // Trigger a redraw
  71.     glutPostRedisplay();
  72.     }
  73.  
  74.  
  75. ///////////////////////////////////////////////////
  76. // Called to draw scene
  77. void RenderScene(void)
  78.     {
  79.     int i;                  // Loop variable
  80.     GLfloat x = 700.0f;     // Location and radius of moon
  81.     GLfloat y = 500.0f;
  82.     GLfloat r = 50.0f;
  83.     GLfloat angle = 0.0f;   // Another looping variable
  84.                
  85.     // Clear the window
  86.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  87.          
  88.     // Everything is white
  89.     glColor3f(1.0f, 1.0f, 1.0f);
  90.    
  91.     if(drawMode == 3)
  92.         {
  93.         glEnable(GL_POINT_SPRITE);
  94.         glEnable(GL_TEXTURE_2D);
  95.         glBindTexture(GL_TEXTURE_2D, textureObjects[0]);
  96.         glEnable(GL_BLEND);
  97.         }
  98.  
  99.     glEnableClientState(GL_VERTEX_ARRAY);
  100.  
  101.     // Draw small stars
  102.     glPointSize(7.0f);          // 1.0
  103.     /*
  104.     glBegin(GL_POINTS);
  105.         for(i = 0; i < SMALL_STARS; i++)
  106.             glVertex2fv(vSmallStars[i]);
  107.     glEnd();
  108.     */
  109.     glVertexPointer(2, GL_FLOAT, 0, vSmallStars);
  110.     glDrawArrays(GL_POINTS, 0, SMALL_STARS);
  111.    
  112.    
  113.     // Draw medium sized stars
  114.     glPointSize(12.0f);         // 3.0
  115.     /*glBegin(GL_POINTS);
  116.         for(i = 0; i< MEDIUM_STARS; i++)
  117.             glVertex2fv(vMediumStars[i]);
  118.     glEnd();
  119.     */
  120.     glVertexPointer(2, GL_FLOAT, 0, vMediumStars);
  121.     glDrawArrays(GL_POINTS, 0, MEDIUM_STARS);
  122.            
  123.     // Draw largest stars
  124.     glPointSize(20.0f);      // 5.5
  125.     /*glBegin(GL_POINTS);
  126.         for(i = 0; i < LARGE_STARS; i++)
  127.             glVertex2fv(vLargeStars[i]);
  128.     glEnd();
  129.     */
  130.     glVertexPointer(2, GL_FLOAT, 0, vLargeStars);
  131.     glDrawArrays(GL_POINTS, 0, LARGE_STARS);        
  132.                
  133.     glDisableClientState(GL_VERTEX_ARRAY);
  134.        
  135.     glPointSize(120.0f);
  136.     if(drawMode == 3)
  137.         {
  138.         glDisable(GL_BLEND);
  139.         glBindTexture(GL_TEXTURE_2D, textureObjects[1]);
  140.         }
  141.  
  142.     glBegin(GL_POINTS);
  143.         glVertex2f(x, y);
  144.     glEnd();
  145.  
  146.  
  147.     glDisable(GL_TEXTURE_2D);
  148.     glDisable(GL_POINT_SPRITE);
  149.  
  150.     // Draw distant horizon
  151.     glLineWidth(3.5);
  152.     glBegin(GL_LINE_STRIP);
  153.         glVertex2f(0.0f, 25.0f);
  154.         glVertex2f(50.0f, 100.0f);
  155.         glVertex2f(100.0f, 25.0f);
  156.         glVertex2f(225.0f, 115.0f);
  157.         glVertex2f(300.0f, 50.0f);
  158.         glVertex2f(375.0f, 100.0f);
  159.         glVertex2f(460.0f, 25.0f);
  160.         glVertex2f(525.0f, 100.0f);
  161.         glVertex2f(600.0f, 20.0f);
  162.         glVertex2f(675.0f, 70.0f);
  163.         glVertex2f(750.0f, 25.0f);
  164.         glVertex2f(800.0f, 90.0f);    
  165.     glEnd();
  166.  
  167.  
  168.     // Swap buffers
  169.     glutSwapBuffers();
  170.     }
  171.  
  172.  
  173. // This function does any needed initialization on the rendering
  174. // context.
  175. void SetupRC()
  176.     {
  177.     int i;
  178.        
  179.     // Populate star list
  180.     for(i = 0; i < SMALL_STARS; i++)
  181.         {
  182.         vSmallStars[i][0] = (GLfloat)(rand() % SCREEN_X);
  183.         vSmallStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100))+100.0f;
  184.         }
  185.            
  186.     // Populate star list
  187.     for(i = 0; i < MEDIUM_STARS; i++)
  188.         {
  189.         vMediumStars[i][0] = (GLfloat)(rand() % SCREEN_X * 10)/10.0f;
  190.         vMediumStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100))+100.0f;
  191.         }
  192.  
  193.     // Populate star list
  194.     for(i = 0; i < LARGE_STARS; i++)
  195.         {
  196.         vLargeStars[i][0] = (GLfloat)(rand() % SCREEN_X*10)/10.0f;
  197.         vLargeStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100)*10.0f)/ 10.0f +100.0f;
  198.         }
  199.            
  200.            
  201.     // Black background
  202.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
  203.  
  204.     // Set drawing color to white
  205.     glColor3f(0.0f, 0.0f, 0.0f);
  206.  
  207.     // Load our textures
  208.     glGenTextures(2, textureObjects);
  209.     GLbyte *pBytes;
  210.     GLint iWidth, iHeight, iComponents;
  211.     GLenum eFormat;
  212.      
  213.     glBindTexture(GL_TEXTURE_2D, textureObjects[0]);
  214.      
  215.        
  216.     // Load this texture map
  217.     glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
  218.     pBytes = gltLoadTGA("star.tga", &iWidth, &iHeight, &iComponents, &eFormat);
  219.     glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, pBytes);
  220.     free(pBytes);
  221.    
  222.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  223.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  224.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  225.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  226.  
  227.     glBindTexture(GL_TEXTURE_2D, textureObjects[1]);
  228.     glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
  229.     pBytes = gltLoadTGA("moon.tga", &iWidth, &iHeight, &iComponents, &eFormat);
  230.     glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, pBytes);
  231.     free(pBytes);
  232.    
  233.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  234.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  235.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  236.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  237.  
  238.     glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
  239.     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  240.  
  241.     // Point Sprites enabled by default
  242.     ProcessMenu(3);
  243.     }
  244.  
  245. /////////////////////////////////////////////////
  246. // Clean up texture objects
  247. void ShutdownRC(void)
  248.     {
  249.     glDeleteTextures(2, textureObjects);
  250.     }
  251.  
  252.  
  253. void ChangeSize(int w, int h)
  254.     {
  255.     // Prevent a divide by zero
  256.     if(h == 0)
  257.         h = 1;
  258.  
  259.     // Set Viewport to window dimensions
  260.     glViewport(0, 0, w, h);
  261.  
  262.     // Reset projection matrix stack
  263.     glMatrixMode(GL_PROJECTION);
  264.     glLoadIdentity();
  265.  
  266.     // Establish clipping volume (left, right, bottom, top, near, far)
  267.     gluOrtho2D(0.0, SCREEN_X, 0.0, SCREEN_Y);
  268.  
  269.  
  270.     // Reset Model view matrix stack
  271.     glMatrixMode(GL_MODELVIEW);
  272.     glLoadIdentity();
  273.     }
  274.  
  275. int main(int argc, char* argv[])
  276.     {
  277.     glutInit(&argc, argv);
  278.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  279.     glutInitWindowSize(800, 600);
  280.     glutCreateWindow("Starry Starry Night");
  281.    
  282.     // Create the Menu
  283.     glutCreateMenu(ProcessMenu);
  284.  
  285.     glutAddMenuEntry("Normal Points",1);
  286.     glutAddMenuEntry("Antialiased Points",2);
  287.     glutAddMenuEntry("Point Sprites", 3);
  288.  
  289.     glutAttachMenu(GLUT_RIGHT_BUTTON);
  290.    
  291.     glutReshapeFunc(ChangeSize);
  292.     glutDisplayFunc(RenderScene);
  293.     SetupRC();
  294.     glutMainLoop();
  295.     ShutdownRC();
  296.  
  297.     return 0;
  298.     }
  299.  


Nun kommen folgende Fehler:
[Linker Error]undefined reference to 'glutpostRedisplay

[Linker Error]undefined reference to 'glutswapBuffers

[Linker Error]undefined reference to 'gltLoadTGA(...)
und noch viele andere...
was mache ich falsch?Hab bei Parameter unter Projekteinstellungen folgendes eingestellt:-lopengl32
-lglu32
-lglut32
und den shared Ordner in das include Verzeichnis kopiert!!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 13:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich habe das Thema mal ins Allgemeine verschoben, da es eher ein allgemeines Problem ist.

Ich weiß nicht ob du dich so gut mit Kompilern auskennst aber der Vorgang des Erzeugens besteht aus 2 Schritten.
Der erste Schritt ist das Kompilieren. Dabei wird der Quellecode syntaktisch geprüft und für den Linker notwendige Dateien erstellt. (Unter Delphi *.dcu (delphi compiled unit) und C/C++ *.o (Objectfiles))
Der zweite Schritt besteht aus dem Linken. Dabei werden diese Zwischendateien genommen und eine ausführbare Binärdatei erzeugt.

Mit dem Code scheint aber alles in Ordnung zu sein, da der Compiler keinen Fehler gemeldet hat.

Externe Bibliotheken (DLLs) werden in C/C++ häufig mittels Librarys (*.LIB) eingebunden. Und diese LIB wird beim Linken benutzt. In der LIB sind dann informationen enthalten, welche Bibliothek benutzt wird und welche Methoden diese zur Verfügung stellt. Und sollte diese LIB veraltet sein oder unvollständig, dann kann es passieren, dass der Linker solch einen Fehler von sich gibt, weil er die Methode nicht richtig auflösen kann. Bzw sie nicht finden kann.

Und du musst an der Stelle dafür sorgen, dass der Linker auch die entsprechenden LIBs findet. Meistens befinden die sich mit in dem Packen aus dem du auch die Include hast. Typischerweise in einem "Lib" Verzeichniss. Wobei je nach Compiler sollten die Glut, Glu und OpenGL eigentlich standard mit dabei sein. Evtl sollte dein Linker auch schon angemault haben, dass er die entsprechende Lib nicht finden konnte.

Bin leider nicht ganz so fitt was C/C++ angeht. Fall es nicht geht wäre auf jeden Fall noch interessant welchen Compiler du benutzt. Da gibt es ja auch nur ein paar. ;)

PS: Wenn möglich größere Codes lieber als Dateianhang. Das kann sonst mitunter etwas viel und unübersichtlich werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 15:48 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 07:25
Beiträge: 12
hi!Dank dir für deine antwort!Andere programme laufen unter meinem Compiler dev c++.Nur die neuen Beispiele der Superbible will er nicht:-(((Also die Beispiele der Superbible 3 laufen!!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

könnte sein, dass in der gltools.h oder der glframe.h aus dem Buch eine andere glut.h eingebunden wird, als du auf deinem System hast.
Am besten du schaust mal dort rein und tauscht das include gegen deine glut.h aus deinem devcpp ordner aus (wahrscheinlich müsste das bei dir #include <GL/glut.h>) sein.
Das ist nämlich die include-Datei, gegen die du mit -lglut32 linkst.

Viele Grüße
dj3hut1

P.S. oder du schaust ob in deinem Buch noch spezielle lib-Dateien dabei sind. Die müsstest du dann noch in den lib-Ordner von Dev-Cpp kopieren und beim Linker hinzufügen (wird bei gltLoadTGA bestimmt der Fall sein).
Das Prinzip dabei ist ganz einfach. Wenn die Datei z.B. libtga.a heisst, müsstest du beim Linker -ltga eintragen, d.h. aus dem lib wird ein l und die Endung wird weggelassen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 01, 2007 17:33 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 07:25
Beiträge: 12
Hab das jetzt mal umgeändert,also in der gltools.h den richtigen Pfad für glut eingestellt,aber die Fehlermeldungen sind immer noch die gleichen:-( Und eine library war nicht dabei,die ich hätte verlinken können...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 02, 2007 07:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

eine letzte Möglichkeit ist noch, dass du unter "Werkzeuge->Compiler Optionen" ein Häkchen bei der Linker-Kommandozeile gesetzt hast.
Dann werden die Link-Parameter des Projektes nicht genommen...
Wenn nicht, poste doch nochmal deine genaue Ausgabe beim Kompilieren...

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]