OpenGL rendert kein 3D :)
-
hallo,
Ich verzweifle grad dran, einen einfachen haufen vertices zu rendern. GL weigert sich auch nur einen zu zeichnen
hier erstmal der code (aus einer memberfunktion)
unsigned long numVert = meshes[Id].size(); // Set up projection matrix glMatrixMode( GL_PROJECTION ); // Select projection matrix glLoadIdentity(); // Start with an identity matrix gluPerspective( // Set perspective view 45.0, // Field of view = 45 degrees static_cast<double>(m_iWindowWidth)/ static_cast<double>(m_iWindowHeight), // Window aspect (assumes square pixels) 0.1, // Near Z clipping plane 100 // Far Z clippling plane ); // Set up modelview matrix glMatrixMode( GL_MODELVIEW ); // Select modelview matrix glLoadIdentity(); // Start with an identity matrix gluLookAt(0,10,10, 0,0,0, 0,1,0); glScalef(scale.x,scale.y,scale.z); glBegin(GL_TRIANGLES); for(unsigned long i = 0;i < numVert; i++) { glColor4b(meshes[Id][i].color.red, meshes[Id][i].color.green, meshes[Id][i].color.blue, meshes[Id][i].color.alpha); glVertex3f(meshes[Id][i].x, meshes[Id][i].y, meshes[Id][i].z); } glEnd();Beim debuggen kann ich nichts falsches erkennen:
unsigned long numVert = meshes[Id].size();hier bekommt numVert eine 12 zugewiesen, was auch der Anzahl der Vertices entspricht, die im Mesh zu finden sind.
Die Perspektiv und die Objektmatrix hab ich meiner meinung nach richtig gesetzt - 45 grad blickwinkel, unter 0.1 und über 100 wird abgeschnitten, kamera ist 10 einheiten vom objekt entfernt, y ist oben, mittelpunkt ist nullvektorbei glScale habe ich werte von 1 bis 150 versucht
den inhalt von meshes[Id] hab ich zur laufzeit überprüft, hier eine tabelle:
-1 0 0 0xFFFFFFFF 1 0 0 0xFFFFFFFF 0 1.41421356 0 0xFFFFFFFF 0 1.41421356 0 0xFFFFFFFF 1 0 0 0xFFFFFFFF 1 2 0 0xFFFFFFFF 1 2 0 0xFFFFFFFF -1 2 0 0xFFFFFFFF 0 1.41421356 0 0xFFFFFFFF 0 1.41421356 0 0xFFFFFFFF -1 2 0 0xFFFFFFFF -1 0 0 0xFFFFFFFF-> x,y,z, farbe
Hab auch versucht, einfach ein einzelnes dreieck mit konstanten zu zeichnen, geht nicht...
hattte auch versucht, -100000000 und 100000000 bei near und far clipping plane einzusetzen, es wird nichts angezeigtHab ich irgendwie das rendering indirekt deaktiviert? der rest wird ordnungsgemäß gerendert (Text und 2d bild, welches übrigens eine textur auf einem polygon ist). nur nicht in dieser funktion Oo
-
hm hat denn keiner einen vorschlag woran es liegen könnte, dass glBegin(); glEnd(); und das dazwischen scheitert? glGetError gibt mit eine 0
also müsste doch alles in ordnung sein? niemand ne idee?
-
Was steht denn in scale drin? Kommentier mal Zeile 20 aus. Machst du einen Aufruf von glBlendFunc? Ist Blending oder enabled? Versuch mal die Farben ohne Alpha mit glColor3b anzugeben!
-
Blending ist enabled, blendfunc ist
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);hab versucht blending in dieser methode auszuschalten und dann wieder anschalten - bringt nichts.
Farbe ohne alpha mit glColor3b angeben hab ich auch versucht - keine Wirkung, hab Skalieren auskomentiert - bringt nichts, hab per konstante faktor 150 versucht - keine Wirkung. hab culling deaktivier/alle einstellungen ausprobiert - nichts.komischerweise funktionieren andere Methoden wunderbar, z.B meine drawImage-Methode:
// drawImage - Draws an Image to Screen // ============================================================= void ALSAGE_OGL::drawImage(int Id, AL_Point pos, AL_Point size) { int x = textures[Id].Width; int y = textures[Id].Height; DoOrtho(); // Textured rendering glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textures[Id].Name); glColor4f(1.0f,1.0f,1.0f,1.0f); glTranslatef(pos.x,-pos.y,0.0); glScalef(x,y,1.0f); if ((size.x == -1) || (size.y ==-1)) { size.x = x; size.y = y; } glScalef(size.x/x,-size.y/y,1.0); glCallList(m_face); UndoOrtho(); } // =============================================================DoOrtho und UndoOrtho:
// DoOrtho - Initialize Orthogonal Projection // ============================================================= void ALSAGE_OGL::DoOrtho() { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, m_iWindowWidth, -m_iWindowHeight,0, -1, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); } // ============================================================= // UndoOrtho - End Orthogonal Projection // ============================================================= void ALSAGE_OGL::UndoOrtho() { glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } // =============================================================die Display List m_face:
m_face = glGenLists(1); glNewList(m_face, GL_COMPILE); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 0.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.0f, 0.0f, 0.0f); glEnd(); glEndList();in meiner renderschleife hab ich folgendes stehen:
renderer->BeginScene(); renderer->drawMesh(meshId,posVec,scaVec);und BeginScene sieht so aus:
// BeginScene - Begins Drawing the Scene // ============================================================= void ALSAGE_OGL::BeginScene() { timeBeg = glfwGetTime(); glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); } // =============================================================
-
Wow, plötzlich klappt das:
glColor3f(1,1,1); glBegin(GL_TRIANGLES); glVertex3f(1,0,0); glVertex3f(0,1.732,0); glVertex3f(-1,0,0); /*for(unsigned long i = 0;i < numVert; i++) { glColor4b(meshes[Id][i].color.red, meshes[Id][i].color.green, meshes[Id][i].color.blue, meshes[Id][i].color.alpha); glVertex3f(meshes[Id][i].x, meshes[Id][i].y, meshes[Id][i].z); }*/ glEnd();liegt wohl doch am Mesh Oo... wobei beim debuggen gültige werte da sind :(...
danke für die antwortEdit: das andere klappt jetzt auch... hab glColor4ub nehmen müssen *doof* xDDD