Ich verstehe die (OGL) Welt nimma.....



  • Ich glaube ich bin gerade an verzfeifeln, und brauche sehr dringend Hilfe....

    Ich habe einen einfachen Quader, welcher einen Raum darstellt. Beim start des Programms wirs festgelegt wie groß die Seitenlängen dieses Quaders sind, welcher danach als Displaylist gespeichert wird. In der RenderScene Funktion wird nun zuerst die Funktion Look meiner Camera Klasse aufgerufen. Diese ruft die Funktion glMultMatrixf() auf. Dann wird die Display List gerendert.
    Soweit so gut, jetzt mein Problem: Es ist ganzegal, wie groß mein Quader ist, er wird immer gleich groß dargestellt! Das einzige was sich ändert, ist dass ich länger brauche, bis ich vom einen Ende zum anderen gelangt bin....

    Hier der Code:

    GLvoid buildLists()
    {
        skyBox = glGenLists(2);         // Building One Display List
        glNewList(skyBox, GL_COMPILE);  // New Compiled Display List
            glBegin(GL_QUADS);                          // Start Drawing Quads
                glColor3fv(skyColor);                   // Sky Color
                // Top Face
                glNormal3f(0.0f, -1.0f, 0.0f);
                glVertex3f(-(groundWidth/2), (skyHeight/2), -(groundDepth/2));  
                glVertex3f((groundWidth/2), (skyHeight/2), -(groundDepth/2));
                glVertex3f((groundWidth/2), (skyHeight/2), (groundDepth/2));    
                glVertex3f(-(groundWidth/2), (skyHeight/2), (groundDepth/2));   
                // Front Face
                glNormal3f(0.0f, 0.0f, -1.0f);
                glVertex3f(-(groundWidth/2), (skyHeight/2), (groundDepth/2));   
                glVertex3f((groundWidth/2), (skyHeight/2), (groundDepth/2));    
                glVertex3f((groundWidth/2), -(skyHeight/2), (groundDepth/2));   
                glVertex3f(-(groundWidth/2), -(skyHeight/2), (groundDepth/2));  
                // Back Face
                glNormal3f(0.0f, 0.0f, 1.0f);
                glVertex3f((groundWidth/2), (skyHeight/2), -(groundDepth/2));       
                glVertex3f(-(groundWidth/2), (skyHeight/2), -(groundDepth/2));      
                glVertex3f(-(groundWidth/2), -(skyHeight/2), -(groundDepth/2));     
                glVertex3f((groundWidth/2), -(skyHeight/2), -(groundDepth/2));      
                // Right Face
                glNormal3f(-1.0f, 0.0f, 0.0f);
                glVertex3f((groundWidth/2), (skyHeight/2), (groundDepth/2));    
                glVertex3f((groundWidth/2), (skyHeight/2), -(groundDepth/2));
                glVertex3f((groundWidth/2), -(skyHeight/2), -(groundDepth/2));
                glVertex3f((groundWidth/2), -(skyHeight/2), (groundDepth/2));
                // Left Face
                glNormal3f(1.0f, 0.0f, 0.0f);
                glVertex3f(-(groundWidth/2), (skyHeight/2), -(groundDepth/2));
                glVertex3f(-(groundWidth/2), (skyHeight/2), (groundDepth/2));
                glVertex3f(-(groundWidth/2), -(skyHeight/2), (groundDepth/2));
                glVertex3f(-(groundWidth/2), -(skyHeight/2), -(groundDepth/2));
            glEnd();                                // Done Drawing Quads
        glEndList();
    
        ground = skyBox+1;
        glNewList(ground, GL_COMPILE);
            for(int rows=0; rows<tilesy; ++rows) {               // The Row-Loop
                for(int cols=0; cols<tilesx; ++cols) {           // The Col-Loop
                    glBindTexture(GL_TEXTURE_2D, texture[rows*tilesx+cols]); // Bind The Right Texture
                    // Compute The Width Of Each Quad
                    float   quadWidth = groundWidth/tilesx,
                            quadDepth = groundDepth/tilesy;
                    // Compute The Corners Of The Quad
                    float   toprightx    = -(groundWidth/2)+(quadWidth*(cols+1)),
                            toprighty    = -(groundDepth/2)+(quadDepth*rows),
                            topleftx     = -(groundWidth/2)+(quadWidth*cols),
                            toplefty     = -(groundDepth/2)+(quadDepth*rows),
                            bottomleftx  = -(groundWidth/2)+(quadWidth*cols),
                            bottomlefty  = -(groundDepth/2)+(quadDepth*(rows+1)),
                            bottomrightx = -(groundWidth/2)+(quadWidth*(cols+1)),
                            bottomrighty = -(groundDepth/2)+(quadDepth*(rows+1));
                    glBegin(GL_QUADS);
                        // Draw The Quad    
                        glNormal3f(0.0f, -1.0f, 0.0f);
                        glTexCoord2f(0.99f, 0.01f);
                        glVertex3f(toprightx, -(skyHeight/2), toprighty);
                        glTexCoord2f(0.01f, 0.01f);
                        glVertex3f(topleftx, -(skyHeight/2), toplefty);
                        glTexCoord2f(0.01f, 0.99f);
                        glVertex3f(bottomleftx, -(skyHeight/2), bottomlefty);
                        glTexCoord2f(0.99f, 0.99f);
                        glVertex3f(bottomrightx, -(skyHeight/2), bottomrighty);         
                    glEnd();
                }
            }       
        glEndList();
    }
    

    Wobei die größen groundWidht, groundHeight und skyHeight inner INI stehen, und beim Programmstart geladen werden.

    DasPInsch



  • Könntest du noch etwas mehr Code posten ?

    Spontan würde ich sagen, dass deine Projection Matrix kaputt ist, kannst du auch posten wie du die setzt ?



  • Von wo betrachtest du denn den Quader?
    Und wie stellst du dir das vor, dass er größer dargestellt wird?
    Hast du ein Vergleichs Object neben dem Quader?



  • hmmm ich betrachte den Quader von innen. Mit "größer" meine ich, dass die "Welt" in der man sich befindet, größer aussieht.
    Meine Projectionsmatrix bilde ich eigentlich genauso wie Stefan Zerbst in Kapitel 7 seines D3D Tuts, hier der Code:

    // Set The Current Camera View
    CCamera::look()
    {
       float viewMatrix[16] = {vRight.x, vRight.y, vRight.z, dotProduct(&vPos, &vRight),
                         vUp.x, vUp.y, vUp.z, dotProduct(&vPos, &vUp),
                         vDir.x, vDir.y, vDir.z, dotProduct(&vPos, &vDir),
                         0, 0, 0, 1
                         };
    
       glMultMatrixf(viewMatrix);
    }
    

    DasPinsch

    [ Dieser Beitrag wurde am 24.01.2003 um 23:12 Uhr von DasPinsch editiert. ]



  • Ein Quader sieht von innen eigentlich immer gleich groß aus. Aber wenn die Kamera im vergleich zur Größe des Quaders näher am Boden schwebt, dann kommt er einem größer vor.
    Daran könnte das Problem liegen.

    [ Dieser Beitrag wurde am 25.01.2003 um 00:14 Uhr von Eho editiert. ]


Anmelden zum Antworten