OpenGL: Kamera und Schrift
-
Hallo !
Wie bekomme ich es hin das Schrift z.B. in der oberen linken Eckes stehen bleibt auch wenn ich die Kamera bewege ?
-
Nach dem Rendern der Scene ortho-Projektion.
-
Kannst du mir auch sagen wie ich das genau mache. (Pseudocode)
-
-
In den NEHE Tuts steht nichts zu Ortho
-
inline void drawRect (GLint x, GLint y, GLint width, GLint height, bool hover) { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho( 0, 800, 600, 0, 0, 1 ); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); // Matrix Pushen glPushMatrix (); // Alphablending Aktivieren glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); // Transformieren glTranslatef(static_cast<float>(x),static_cast<float>(y),0.0f); // Paralelogram Zeichnen mit Alpha 50% oder 25% glColor4f (0.0f, 0.75f, 0.0f, hover ? 0.75f : 0.5f); glBegin(GL_POLYGON); glVertex2i(0,0); glVertex2i(width-32,0); glVertex2i(width,32); glVertex2i(width,height); glVertex2i(0,height); glEnd(); // Alphablending dekativieren glDisable(GL_BLEND); // Rahmen rendern glColor3f (0.725f, 0.725f, 0.725f); glBegin(GL_LINES); glVertex2i(0,0); glVertex2i(width-32,0); glVertex2i(width-32,0); glVertex2i(width,32); glVertex2i(width,32); glVertex2i(width,height); glVertex2i(width,height); glVertex2i(0,height); glVertex2i(0,height); glVertex2i(0,0); glVertex2i(0,64); glVertex2i(32,32); glVertex2i(32,32); glVertex2i(width,32); glEnd(); // Normalfarbe wiederherstellen glColor3f (1, 1,1); // Matrix Popen glPopMatrix(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glPopMatrix(); }
funzt und kannst die kamera bewegen, nebenbei in den nehe tuts gibt es ein Tut über orto!
-
Das geht immer noch nicht.
Hier mal mein Code:
Szene Rendern:void COGL::RenderScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(camera.g_mv_p.x,camera.g_mv_p.y,camera.g_mv_p.z, camera.g_mv_v.x,camera.g_mv_v.y,camera.g_mv_v.z, camera.g_mv_u.x,camera.g_mv_u.y,camera.g_mv_u.z); if(bRotation) { for(int i=0;i<10;i++) { sObject[i].nAngle++; sObject[i].x_p=sinf(sObject[i].nAngle/sObject[i].fRotSpeeed)*sObject[i].fMaxAxis; sObject[i].z_p=cosf(sObject[i].nAngle/sObject[i].fRotSpeeed)*sObject[i].fMaxAxis; } } else { for(int i=0;i<10;i++) { sObject[i].x_p=sObject[i].fMaxAxis; sObject[i].z_p=0.0f; } } //... hie werden Planeten gerendert if(bDisplayInfo) { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0,800,600,0,0,1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glPushMatrix(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glTranslatef(0.0f,0.0f,0.0f); glColor3f(1.0f,1.0f,1.0f); PrintFont("Text"); glDisable(GL_BLEND); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } GetInput(); GetFPS(); SwapBuffers(hDC); }
Schrift malen:
void COGL::PrintFont(char *chText) { float fLen=0.0f; char text[256]; va_list ap; if(chText==NULL) return; va_start(ap,chText); vsprintf(text,chText,ap); va_end(ap); for(unsigned int loop=0;loop<(strlen(text));loop++) fLen+=gmf[text[loop]].gmfCellIncX; glRasterPos2f(-fLen/2.0f,0.0f); //glTranslatef(-fLen/2.0f,0.0f,0.0f); glPushAttrib(GL_LIST_BIT); glListBase(nBase); glCallLists((GLsizei)strlen(text),GL_UNSIGNED_BYTE,text); glPopAttrib(); }