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. ]