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)



  • nehe.gamedev.net

    Dort z.B. Fonts anschauen.

    Oder Panels / HUD, gleiches Prinzip.

    Oder für DX: www.andypike.com



  • 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();
    }
    

Anmelden zum Antworten