[GLUT] Object Loader tut's nicht...



  • Hallo,

    Ich habe ein Problem, ich habe mit blender eine *.obj file exportiert und will sie nun mit folgendem code in einem Fenster anzeigen lassen:

    #include <GL/glut.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    
    struct Triangle {
    
           int v1;
           int v2;
           int v3;
    
    };
    
    struct Vertex {
    
          float x;
          float y;
          float z;
    
    };
    
    using namespace std;
    
    static void display(void)
    {    
    
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0, 1.0, 1.0);
    
        Vertex v[50000];
        Triangle t[50000];
    
        int vertexCount = 0;
        int triangleCount = 0;
    
        char line[100];
    
        FILE *fp = fopen("tisch.obj","r");
    
        if (fp != NULL)
        {
            while (fgets(line, 99, fp))
            {
                  if (line[0] == 'v')
                  {
                      sscanf(line, "%*c %f %f %f", &v[vertexCount].x, &v[vertexCount].y, &v[vertexCount].z);                  
                      vertexCount++;
                  } 
                  else if (line[0] == 'f')
                  {
                      sscanf(line, "%*c %d %d %d", &t[triangleCount].v1, &t[triangleCount].v2, &t[triangleCount].v3);
                      triangleCount++;
                  }   
            }   
        }
    
        fclose(fp);
    
        glBegin(GL_TRIANGLES);
    
            for (int i=0; i<triangleCount; i++)
            {
                glVertex3f(v[t[i].v1-1].x * 0.25, v[t[i].v1-1].y * 0.25, v[t[i].v1-1].z * 0.25);
                glVertex3f(v[t[i].v2-1].x * 0.25, v[t[i].v2-1].y * 0.25, v[t[i].v2-1].z * 0.25);
                glVertex3f(v[t[i].v3-1].x * 0.25, v[t[i].v3-1].y * 0.25, v[t[i].v3-1].z * 0.25);
            }
    
        glEnd();
    
        glFlush();
    }
    
    void init(void)
    {
    
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(600,500);
        glutInitWindowPosition(100,100);
        glutCreateWindow("Objektloader");
    
        glClearColor(0.0, 0.0, 0.0, 0.0);
    
    }
    
    int main(int argc, char *argv[])
    {  
        glutInit(&argc, argv);
    
        init();
    
        glutDisplayFunc(display);
    
        glutMainLoop();
    
        return 0;
    }
    

    Aber Leider passiert es nicht so, wie ich es mir vorstelle... es wird mir einfach ein leeres Fenster angezeigt, doch es sollte ein 3D-Tisch darin sein... Es wäre auch nicht schlecht, wenn mir jemand ein tutorial geben könnte, wo so was erklärt wird, insbesondere, mit mouseinteractions... (Mit der Maus drehen)

    vielen dank!



  • Matrizen interessieren Dich nich so?



  • vielleicht steht der tisch auch nur nicht da, wo du ihn suchst?
    auf jeden fall solltest du das laden nicht in die darstellungsfunktion setzen, bremst alles aus



  • emm... okay... ich bräuchte eig. nur nen beispielcode mit moouseinteraction... ob der tisch da ist... ka... moment, ich lade mal die obj file hoch

    Hier:
    http://habofl.kilu.de/upload/uploaded_files/tisch.obj



  • aaaah... §%$§%&§ schon gut... das dingh ist da, also... das Problem ist jedoch, dass FARBIGE Objekte, die ich exportiert habe weiß dargestellt werden!

    so sollte es sein:

    http://habofl.kilu.de/upload/uploaded_files/wuerfel2.gif

    So ist es:

    http://habofl.kilu.de/upload/uploaded_files/wuerfel1.gif



  • ::JET::LI:: schrieb:

    aaaah... §%$§%&§ schon gut... das dingh ist da, also... das Problem ist jedoch, dass FARBIGE Objekte, die ich exportiert habe weiß dargestellt werden!

    Ist ja kein Wunder - Du setzt die Zeichenfarbe ja auch auf weiß und änderst diese nicht 😉



  • ja, das script war aus dem i-net... 😃 könntest du mir vielleciht sagen, wie ich das "normal" hinbekomme? 😃



  • Du solltest erstmal die ueblichen Tutorials durcharbeiten.



  • danke, aber eigentlich hatte ich gar nicht vor, mich mit opengl so dolle zu befassen, ich suchte lediglich eine Möglichkeit, meine 3d-Objekte zu präsentieren (mit mouseinteractions)... Ich bräcuhte also nur Code, keine Erklärungen, nichts... ich will wie gesagt einfach meine 3D Modelle wie beschrieben präsentieren 🙂



  • Du solltest vielleicht auch nicht jeden Schleifendurchlauf die Datei einlesen.



  • eigentlich hatte ich gar nicht vor, mich mit opengl so dolle zu befassen
    ich suchte lediglich eine Möglichkeit, meine 3d-Objekte zu präsentieren

    Naja, Du wirst ein bischen mehr brauchen als 'nen einfachen .obj-Parser - Materialien, Shader, usw...
    Vielleicht suchst Du Dir besser jemanden, der Dir sowas machen kann?



  • auf die Idee bin ich auch schon gekommen, aber wer macht so etwas schon für lau? 😞


  • Mod

    ::JET::LI:: schrieb:

    auf die Idee bin ich auch schon gekommen, aber wer macht so etwas schon für lau? 😞

    du wirst schon eine gegenleistung erbringen muessen denk ich mir. vielleicht will ja jemand ein paar model haben und du willst ein programm haben...



  • gute idee aber ich fange mit dem 'modeln' erst mal an... aber dafür bin ich, wenn ich das so sagen darf, ohne das es großspurig klingt in webdesign ein ass 😃

    achja, mal eben kurz ne frage off topic; ich habe mir ein buch gekauft "3D-Grafik Programmierung" von Marius Apetri. Da sind codes drin, ozhne welche include oder sonst was, auf der beiliegemnden cd sind aber auch kompillierte exen drauf... auch auf der cd ist der compiler cygwin, doch in dem buch ist auch nicht beschrieben, wie man so etwas kompilliert oder sonst was... ich verstehe es einfach nicht... teilweise soooo kleine snippets an code und so ein riesiger effekt (texture mapping) zum beispiel... wie kiann das funktionieren?


Anmelden zum Antworten