PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GLUT]Textausgabe?


Gast
2006-06-24, 16:14:09
Hi Leute,

ich arbeite an einem GLUT-Programm, das u.a. Texte auf dem Bildschirm ausgeben soll. Das Problem ist, daß das Programm plattformunabhängig sein soll (insbesondere sowohl unter Windows als auch unter Linux compilierbar), die GLUT-eigenen Textverarbeitungsroutinen jedoch sehr eingeschränkt sind: es gibt die Funktion glutBitmapCharacter(), die aber nur sehr wenige Auswahlmöglichkeiten bezüglich der Schriftart bietet. Plattformspezifische Funktionen wie wglUseBitmapFont() oder glXUseXFont() bieten da weit mehr Optionen an. Gibt es eine Möglichkeit, eine vergleichbare Flexibilität auch plattformunabhängig zur Verfügung zu haben?

del_4901
2006-06-24, 17:44:48
Gast[/POST]']Hi Leute,

ich arbeite an einem GLUT-Programm, das u.a. Texte auf dem Bildschirm ausgeben soll. Das Problem ist, daß das Programm plattformunabhängig sein soll (insbesondere sowohl unter Windows als auch unter Linux compilierbar), die GLUT-eigenen Textverarbeitungsroutinen jedoch sehr eingeschränkt sind: es gibt die Funktion glutBitmapCharacter(), die aber nur sehr wenige Auswahlmöglichkeiten bezüglich der Schriftart bietet. Plattformspezifische Funktionen wie wglUseBitmapFont() oder glXUseXFont() bieten da weit mehr Optionen an. Gibt es eine Möglichkeit, eine vergleichbare Flexibilität auch plattformunabhängig zur Verfügung zu haben?

Du kannst den Präprozessor vergewaltigen, das er erstes bei WIN32 nimmt und das andere unter UNIX.

Coda
2006-06-24, 19:11:41
Einfach kein glut sondern SDL verwenden.

Gast
2006-06-24, 23:31:15
SDL ist aber doof, da muß man statt

glutMainLoop();

so nen langen Roman

while ( !done )
{
while ( SDL_PollEvent( &event ) )
{
switch( event.type )
{
case SDL_ACTIVEEVENT:
if ( event.active.gain == 0 )
isActive = FALSE;
else
isActive = TRUE;
break;
case SDL_VIDEORESIZE:
surface = SDL_SetVideoMode( event.resize.w, event.resize.h, 16, videoFlags );
resizeWindow( event.resize.w, event.resize.h );
break;
case SDL_KEYDOWN:
handleKeyPress( &event.key.keysym );
break;
case SDL_QUIT:
done = TRUE;
break;
default:
break;
}
}

/* draw the scene */
if ( isActive )
drawGLScene( );
}
schreiben :D

Aber ich versuch mal SDL_ttf

Coda
2006-06-25, 02:04:03
Wenn du dich daran aufhälst, dann gute Nacht...

Gast
2006-06-25, 06:17:51
SDL_ttf hab ich derweil mal probiert. Problem: es reicht nicht, den Namen der Schriftart anzugeben, man braucht den Dateinamen der ttf-Datei. Unter Windows kein Thema, einfach in C:\Windows\Fonts nachgucken. Aber unter Linux? Es scheint schlicht unmöglich zu sein, da herauszufinden, wo die Schriftartdateien versteckt sind. Die Systemverwaltung behauptet in /home/johndoe/.kde/share/fonts, aber Fehlanzeige, da is nix. Kann ich vielleicht einfach die Dateinamen von Windows verwenden?

Gast
2006-06-25, 14:31:58
woanders habe ich gelesen, das Linux-Fontsverzeichnis sei usr/share/fonts, das aber existiert bei mir (Suse 8.1) gar nicht erst.

Coda
2006-06-25, 14:32:53
Dann kopier die Schrift doch einfach in dein Verzeichnis mit rein und gut is.

Gast
2006-06-25, 19:56:05
jetzt stellt sich nur die Frage, ob man mit SDL_ttf darauf festgelegt ist, das OpenGL-Fenster als SDL_surface zu erzeugen. Wir hatten ja kürzlich:
http://www.forum-3dcenter.org/vbulletin/showthread.php?p=4401584#post4401584
erst das Thema, daß SDL_image unabhängig von SDL_Video verwendet werden kann, gilt das auch für SDL_ttf?

Die Dokumentation spricht ja eher dagegen: im Codebeispiel

// Render some text in blended black to a new surface
// then blit to the upper left of the screen
// then free the text surface
//SDL_Surface *screen;
SDL_Color color={0,0,0};
SDL_Surface *text_surface;
if(!(text_surface=TTF_RenderText_Blended(font,"Hello World!",color))) {
//handle error here, perhaps print TTF_GetError at least
} else {
SDL_BlitSurface(text_surface,NULL,screen,NULL);
//perhaps we can reuse it, but I assume not for simplicity.
SDL_FreeSurface(text_surface);
}muß der gerenderte Text ja mit SDL_BlitSurface auf ein Fenster im SDL_Surface-Format übertragen werden.

Ich würde aber halt gerne auch weiterhin GLUT benutzen können :(

Gast
2006-06-26, 09:32:33
ich hab jetzt mal versucht, das OpenGL-Fenster mit SDL zu erzeugen, aber irgendwie funktioniert das SDL_BlitSurface nicht. Es wird kein Text angezeigt. Am von TTF_RenderText_Solid zurückggebenen text_surface kann es nicht liegen, ich habe gecheck ob es NULL ist, und das ist es nicht.
Kann es sein, daß SDL_BlitSurface nicht funktioniert, wenn OpenGL-Ausgabe verwendet wird?
Ich werde mal folgendes ausprobieren: aus text_surface eine Textur machen und die auf ein GL_QUAD mappen.

Gast
2006-06-26, 21:09:47
hm, ich glaube so wird das aber auch nicht funktionieren, OpenGL will ja schließlich quadratische Texturen, und ein Textstring geht für gewöhnlich sehr viel mehr in die Breite als in die Höhe...
Jemand ne andere Idee?