Arathorns Open GL thread



  • Jo, da ich in letzter zeit viel mir open gl lerne, und ab und an probleme hab und keine lust hab immer nen neuen thread aufzumachen, mach ich hier mal nen sammelthread für meine Open GL fragen auf.

    1.Frage: ich hab ein Problem mit dem Texturieren von Quads. in dem code aus der übungslektion funzt es, aber wenn ich das ganze nun auch bei nem anderen Programm machen will, gehts nichtmehr. Compiliert wird alles ohne fehler, aber die texturierte fläche bleibt weiß...( ja, die textur ist vorhanden, 512*512 groß und hat 24 Bit. Und sie ist im pasenden ordner. die textur von dem anderen projekt hat übrigends die selben eigenschaften.) aber hier mal die codeausschnitte:

    #include <windows.h>        // Header File For Windows
    #include <stdio.h>
    #include <gl\gl.h>            // Header File For The OpenGL32 Library
    #include <gl\glu.h>            // Header File For The GLu32 Library
    #include <gl/glaux.h>       //Heder File for the GLaux library
    .
    .
    .
    GLuint texture[1];
    .
    .
    .
    AUX_RGBImageRec *LoadBMP(char *Filename)               //Loads a BMP image
    {
        FILE *File=NULL;                                    // File Handle
    
        if (!Filename)                                     // Make Sure a filename was given
        {
            return NULL;
        }
    
        File = fopen(Filename,"r");                         //Check if the file exists
    
        if (File)                                           //Does the file exist
        {
            fclose(File);                                  //Close the handle
            return auxDIBImageLoad(Filename);              //Load the BMP and return a pointer
        }
    
        return NULL;
    }
    
    int LoadGLTextures()                                     // Load Bitmaps and convert to textures
    {
        int Status = FALSE;                                  //Status Indicator
        AUX_RGBImageRec *TextureImage[1];                   // Create Storage space for the textures
        memset(TextureImage, 0, sizeof(void *) * 1);         // SEt the pointer to null
    
        //Load the BMP, Check for errors, if bitmap´s not found quit
        if (TextureImage[0] = LoadBMP("Data/Front_1.bmp"))
        {
            Status = TRUE;                                  //Set the status to true
            glGenTextures(1, &texture[0]);            //Create the texture
    
            //Typical Texture Generation, Using Data From the Bitmap
            glBindTexture(GL_TEXTURE_2D, texture[0]);
    
            //Generate the texture
            glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  //Linear Filtering
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  //Linear Filtering
    
            if (TextureImage[0])            //If texture exists
            {
                if (TextureImage[0]->data);    //if texture image exists
                {
                    free(TextureImage[0]->data);   //Free the texture image memory
                }
    
                free(TextureImage[0]);              //Free the image structure
            }
    }
            return Status;
    
    }
    .
    .
    .
    int InitGL(GLvoid)                                        // All Setup For OpenGL Goes Here
    {
    
        if(!LoadGLTextures())                               //rufe textur lade routine auf
        {
            return FALSE;                                   //wenn textur nicht geladen wurde gebe FALSE zurück
        }
    
        glShadeModel(GL_SMOOTH);                            // Enable Smooth Shading
        glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                // Black Background
        glClearDepth(1.0f);                                    // Depth Buffer Setup
        glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing
        glDepthFunc(GL_LEQUAL);                                // The Type Of Depth Testing To Do
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);    // Really Nice Perspective Calculations
        return TRUE;                                        // Initialization Went OK
    }
    .
    .
    .
    int DrawGLScene(GLvoid)                                    // Here's Where We Do All The Drawing
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // Clear Screen And Depth Buffer
        glLoadIdentity();                                    // Reset The Current Modelview Matrix
    
        glTranslatef(xpos, ypos, zpos);                   // Move Left 1.5 units and 6.0 into the screen
    
        glRotatef(rquad, 0.0f, 1.0f, 0.0f);                  //Rotate around the y-axis
    
        glBindTexture(GL_TEXTURE_2D, texture[0]);           //wählt die textur aus
        glBegin(GL_QUADS);                              // Drawing uses Quads
    
                glTexCoord2f(0.7f, 1.0f); glVertex3f( 0.4f, 3.0f, 0.0f);           //Top right front
                glTexCoord2f(0.3f, 1.0f); glVertex3f(-0.4f, 3.0f, 0.0f);           //Top left front
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.5f, 0.0f, 0.0f);           //Middle left front
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.5f, 0.0f, 0.0f);           //Middle right front
    
                glVertex3f( 1.5f, 0.0f, 0.0f);           //Middle right front
                glVertex3f(-1.5f, 0.0f, 0.0f);           //Middle left front
                glVertex3f(-1.0f,-0.5f, 0.0f);           //Bottom left front
                glVertex3f( 1.0f,-0.5f, 0.0f);           //Bottom right front
    
                glVertex3f(-1.0f,-0.5f,-0.5f);           //back left Bottom
                glVertex3f(-1.0f,-0.5f, 0.0f);           //front  left bottom
                glVertex3f( 1.0f,-0.5f, 0.0f);           //front right bottom
                glVertex3f( 1.0f,-0.5f,-0.5f);           //back  right bottom
    
                glVertex3f(-1.5f, 0.0f,-0.5f);           //back top middle-side-left
                glVertex3f(-1.5f, 0.0f, 0.0f);           //front top middle-side-left
                glVertex3f(-1.0f,-0.5f, 0.0f);           //front bottom middle-side-left
                glVertex3f(-1.0f,-0.5f,-0.5f);           //back bottom middle-side-left
    
                glVertex3f( 1.5f, 0.0f,-0.5f);           //back top middle-side-right
                glVertex3f( 1.5f, 0.0f, 0.0f);           //front top middle-side-right
                glVertex3f( 1.0f,-0.5f, 0.0f);           //front bottom middle-side-right
                glVertex3f( 1.0f,-0.5f,-0.5f);           //back bottom middle-side-right
    
                glVertex3f(-0.4f, 3.0f,-0.5f);           //back top side left
                glVertex3f(-0.4f, 3.0f, 0.0f);           //front top side left
                glVertex3f(-1.5f, 0.0f, 0.0f);           //front bottom side left
                glVertex3f(-1.5f, 0.0f,-0.5f);           //back bottom side left
    
                glVertex3f( 0.4f, 3.0f,-0.5f);           //back top side right
                glVertex3f( 0.4f, 3.0f, 0.0f);           //front top side right
                glVertex3f( 1.5f, 0.0f, 0.0f);           //front bottom side right
                glVertex3f( 1.5f, 0.0f,-0.5f);           //back bottom side right
    
                glVertex3f(-0.4f, 3.0f,-0.5f);           //back left top
                glVertex3f(-0.4f, 3.0f, 0.0f);           //front  left top
                glVertex3f( 0.4f, 3.0f, 0.0f);           //front right top
                glVertex3f( 0.4f, 3.0f,-0.5f);           //back  right top
    
                glVertex3f( 0.4f, 3.0f,-0.5f);           //Top right back
                glVertex3f(-0.4f, 3.0f,-0.5f);           //Top left back
                glVertex3f(-1.5f, 0.0f,-0.5f);           //Middle left back
                glVertex3f( 1.5f, 0.0f,-0.5f);           //Middle right back
    
                glVertex3f( 1.5f, 0.0f,-0.5f);           //Middle right back
                glVertex3f(-1.5f, 0.0f,-0.5f);           //Middle left back
                glVertex3f(-1.0f,-0.5f,-0.5f);           //Bottom left back
                glVertex3f( 1.0f,-0.5f,-0.5f);           //Bottom right back
        glEnd();
    
                                           // End drawing
    
        rquad += 0.5f;                                     //decrease the rotation variable for the quad
        return TRUE;                                        // Everything Went OK
    }
    

    liegts vielleicht daran, dass zum testen erstmal nur eine seite texturiert werden soll?



  • Hab ichs übersehen oder fehlt da ein

    glEnable(GL_TEXTURE_2D);
    

    ?



  • Aua. ich sollte nächstes mal genauer lesen. thx, für die antwort.

    aja, hab hier in nem anderen thread was von dem neuen Open GL 3.0 gelesen. lohnt es sich übnerhaupt noch das alte zu lernen, oder soll ich lieber auf das neue warten?



  • Arathorns Sohn schrieb:

    Aua. ich sollte nächstes mal genauer lesen. thx, für die antwort.

    aja, hab hier in nem anderen thread was von dem neuen Open GL 3.0 gelesen. lohnt es sich übnerhaupt noch das alte zu lernen, oder soll ich lieber auf das neue warten?

    Die Grundlagen kannst du auch ruhig am Alten lernen, so schnell stirbt das nicht aus. Und außerdem weis ich ja nicht ob deine Graka auch potentiell OGL3-fähig ist^^



  • Ist ne X1950XT, also nicht wirklich so alt. aja, ist das nehe tut empfehlenswert?



  • Arathorns Sohn schrieb:

    Ist ne X1950XT, also nicht wirklich so alt. aja, ist das nehe tut empfehlenswert?

    Also wenn sich quer durch Foren liest, wird es sehr oft empfohlen. Ich persönlich finde den Farbstil der Website grauenhaft. Und die Tuts selbst naja es gibt sehr viel. Aber der Stil ist nicht mein Fall. Da musst du einfach selber schauen, ob du was damit anfangen kannst.

    http://www.gamedev.net/ Die Seite ist auch ziemlich gut.



  • Die Nehe Tutorials sind ziemlich umfangreich, aber leider verwendet der Autor einen etwas kruden C/C++ Mix (sieht aus wie C, manchmal steht dann aber auch new mittendrin...)

    Grüße,

    Martin



  • die seite gamedev kenn ich, hab zumindest schon davon gehört. aja, wegen dem farbstil, es gibt hier ne deutsche übersetzung in ordentlichen farben.^^
    http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=10



  • Den Farbstil kann man auch ändern...



  • Die nehe Tuts sind ziemlich OK was OGL angeht. C++ sollte man schon können, dann stört es auch nicht wenn der "C++ Stil" grauenhaft ist -- man sieht was man mit OGL machen muss, "die Form" bleibt einem selbst überlassen.



  • jo, thx. aber ich hab ne weitere frage. ich hab ein 3d objekt gemacht, das sechseckicg ist, also brauche ich auch für jede fläche zwei faces, für die ich je andere texturen benutzen möchte, aber an dem punkt, wo die beiden texturen des font aufeinander treffen, gibt es einige weiße pixel( fast eine durchgehende reihe), aber die texturen sind bis auf den letzten pixel grau, und nicht weiß. Was kann ich machen?



  • wo die beiden texturen des font aufeinander treffen, gibt es weiße pixel

    was'n fuer'n font?

    Was kann ich machen?

    'nen screenshot posten?



  • http://s6.directupload.net/images/070920/temp/c2uRZbcH.png

    da. nix gegen die texturen(provisorisch) oder meinen musikgeschmack^^



  • jetzt verrate uns doch noch ein paar details:
    wie sehen deine texturkoordinaten aus, wie sieht die textur aus (groesse) und wie kopierst du selbige in den grafikspeicher.



  • Bis auf die größe findest du alles in post 1. groß sind beide 512*512( coord der zweiten textur kommen jetzt.)

    so, die ganzen coords( auch die von textur eins.)

    glBindTexture(GL_TEXTURE_2D, texture[0]);           //wählt die textur aus
    	glBegin(GL_QUADS);                              // Drawing uses Quads
    
    	        glTexCoord2f(0.7f, 1.0f); glVertex3f( 0.4f, 3.0f, 0.0f);           //Top right front
                glTexCoord2f(0.3f, 1.0f); glVertex3f(-0.4f, 3.0f, 0.0f);           //Top left front
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.5f, 0.0f, 0.0f);           //Middle left front
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.5f, 0.0f, 0.0f);           //Middle right front
         glEnd();
         glBindTexture(GL_TEXTURE_2D, texture[1]);
         glBegin(GL_QUADS);
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.5f, 0.0f, 0.0f);           //Middle right front
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.5f, 0.0f, 0.0f);           //Middle left front
                glTexCoord2f(0.25f, 0.0f); glVertex3f(-1.0f,-0.5f, 0.0f);           //Bottom left front
                glTexCoord2f(0.75f, 0.0f); glVertex3f( 1.0f,-0.5f, 0.0f);           //Bottom right front
    
                glVertex3f(-1.0f,-0.5f,-0.5f);           //back left Bottom
                glVertex3f(-1.0f,-0.5f, 0.0f);           //front  left bottom
                glVertex3f( 1.0f,-0.5f, 0.0f);           //front right bottom
                glVertex3f( 1.0f,-0.5f,-0.5f);           //back  right bottom
    
                glVertex3f(-1.5f, 0.0f,-0.5f);           //back top middle-side-left
                glVertex3f(-1.5f, 0.0f, 0.0f);           //front top middle-side-left
                glVertex3f(-1.0f,-0.5f, 0.0f);           //front bottom middle-side-left
                glVertex3f(-1.0f,-0.5f,-0.5f);           //back bottom middle-side-left
    
                glVertex3f( 1.5f, 0.0f,-0.5f);           //back top middle-side-right
                glVertex3f( 1.5f, 0.0f, 0.0f);           //front top middle-side-right
                glVertex3f( 1.0f,-0.5f, 0.0f);           //front bottom middle-side-right
                glVertex3f( 1.0f,-0.5f,-0.5f);           //back bottom middle-side-right
    
                glVertex3f(-0.4f, 3.0f,-0.5f);           //back top side left
                glVertex3f(-0.4f, 3.0f, 0.0f);           //front top side left
                glVertex3f(-1.5f, 0.0f, 0.0f);           //front bottom side left
                glVertex3f(-1.5f, 0.0f,-0.5f);           //back bottom side left
    
                glVertex3f( 0.4f, 3.0f,-0.5f);           //back top side right
                glVertex3f( 0.4f, 3.0f, 0.0f);           //front top side right
                glVertex3f( 1.5f, 0.0f, 0.0f);           //front bottom side right
                glVertex3f( 1.5f, 0.0f,-0.5f);           //back bottom side right
    
                glVertex3f(-0.4f, 3.0f,-0.5f);           //back left top
                glVertex3f(-0.4f, 3.0f, 0.0f);           //front  left top
                glVertex3f( 0.4f, 3.0f, 0.0f);           //front right top
                glVertex3f( 0.4f, 3.0f,-0.5f);           //back  right top
    
                glVertex3f( 0.4f, 3.0f,-0.5f);           //Top right back
                glVertex3f(-0.4f, 3.0f,-0.5f);           //Top left back
                glVertex3f(-1.5f, 0.0f,-0.5f);           //Middle left back
                glVertex3f( 1.5f, 0.0f,-0.5f);           //Middle right back
    
                glVertex3f( 1.5f, 0.0f,-0.5f);           //Middle right back
                glVertex3f(-1.5f, 0.0f,-0.5f);           //Middle left back
                glVertex3f(-1.0f,-0.5f,-0.5f);           //Bottom left back
                glVertex3f( 1.0f,-0.5f,-0.5f);           //Bottom right back
        glEnd();
    
                                           // End drawing
    

    texturen kommen auch jetzt.
    textur1:http://img341.imageshack.us/img341/6403/front1jj3.th.png
    textur2:http://img341.imageshack.us/img341/8656/front2qr3.th.png



  • mach mal texture-repeat aus.



  • thx, aber jetzt ist diese pixel linie schwarz, als wäre an der stelle nix( ur hintergrund)



  • och, i-jemand weiß bestimm was. aber ich hab auch drei neue fragen:
    1.Wie schreibe ich mir einen packer und unpacker für gamedaten.( also z.B. um alle texturen zur datei textures.game zu komprimieren. Sprache bitte C++).
    2.Wie kann ich die texturen aus dieser datei laden?
    3.Welcher dateityp empfiehlt sich für texturen? TGA, JPG, oder PNG, und wie lade ich diesen um ihn in eine textur umzuwandeln?
    THX, schonmal für die hilfe.



  • UnRarLib
    DevIL
    Beides haettest Du mit Google leicht selber finden koennen!



  • THX, aber zu der unrarlib, wären ein paar erklärungen wünschenswert. Kann ich da das format zum packen angeben? und wie kann ich einzelne sachen aus damit gepackten archiven laden? erst in den ram entpacken, oder?

    edit: ok, unrarlib ist nur für rars, aber ich möchte files machen, die man nicht einfach mit winrar entpacken und verändern kann...

    edit2: und welcher dateityp empfiehlt sich für texturen?



  • Verschlüssel doch einfach deine Daten. IIRC kann das die urarlib auch. Ist auf jeden Fall weniger Arbeit, als selbst ein Packformat zu erstellen. (Naja, das ist nicht so aufwendig, aber zahlt sich nicht aus, und Anfänger dürften auf die Nase fallen.)

    Als Dateiformat empfehle ich DDS, weil es nicht nur normale 2D-Bilder, sondern DXT-komprimierte Texturen, Mipmaps, Cubemaps, Volumtexturen und HDR-Texturen speichern kann. Es sollte ausreichend DDS-Loader im Netz geben. Was DevIL angeht, habe ich keine Ahnung, ob es mit DXT, DDS-Cubemaps, DDS-Mipmaps usw. klarkommt oder nur ein 2D-Bild will. In letzterem Fall wärs schade, weil DevIL dann die Mipmaps generiert, was ja eigtl. unnötig ist, da DDS die bereits gespeichert hat.


Anmelden zum Antworten