|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 09.04.2006, 16:22 Titel: umstellung multibyte unicode |
|
|
Hab grad ein Programm von MultiByte auf Unicode umgheschrieben hab aber noch einen Fehler drin.
Code: |
GLvoid Opengl::glPrint(const char *fmt, ...) // Custom GL "Print" Routine
{
char text[256]; // Holds Our String
va_list ap; // Pointer To List Of Arguments
if (fmt == NULL) // If There's No Text
return; // Do Nothing
va_start(ap, fmt); // Parses The String For Variables
vsprintf_s(text,sizeof(text), fmt, ap); // And Converts Symbols To Actual Numbers
va_end(ap); // Results Are Stored In Text
glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits ( NEW )
glListBase(base - 32); // Sets The Base Character to 32 ( NEW )
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text ( NEW )
glPopAttrib(); // Pops The Display List Bits ( NEW )
} |
Darin muss ja die vsprintf_s geändert werden.
Wenn ich das zu vswprintf_s ändere bekomme ich beim Ertsellen keinen Fehler nur beim Ausführen kommt ne Fehlermeldung. Etwa so:
stack around the variable "text" was corrupted.
Also geht das auch nicht, oder was muss ich noch ändern?
Wenn ich anstatt des o.g. Code: | vswprintf(text,sizeof(text), fmt, ap); |
benutze läuft das Programm, aber alle Zeichenketten werden nur teilweise ausgegeben.
Gruß Legolas87 _________________ I can see I'm going blind. |
|
Nach oben |
|
|
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 10.04.2006, 09:41 Titel: |
|
|
Da mir offensichtlich keiner weiterhelfen kann, ändere ich meine Frage etwas, obwohl ich weiß, dass sie dann eher in OpenGl als in ENtwicklung passt.
Weiß ijemand, wie man in OpenGl Unicode Zeichenketten ausgibt und hat v auch noch gütigerweise einen Link oder ein bisschen Code dafür?
Gruß Legolas _________________ I can see I'm going blind. |
|
Nach oben |
|
|
Dragon Super JLI'ler
Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 10.04.2006, 11:59 Titel: |
|
|
OpenGL bietet meines Wissens, genau wie Direct3D, keine Möglichkeit Text auszugeben. Man muss entweder eine Texture mit allen darzustellenenden Buchstaben und Zeichen nehmen, oder man nutzt unter OGL die Displaylisten.
Ich mache das so, indem ich die UNICODE Zeichenkette in eine ASCII Zeichenkette umwandel und ausgebe.
CPP: | void Font::print(float x, float y, const TCHAR *te, ...)
{
static TCHAR t[MAX_TEXT_LENGTH + 1];
va_list ap;
va_start(ap, te);
#ifdef UNICODE
vswprintf(t, te, ap);
#else
vsprintf(t, te, ap);
#endif
va_end(ap);
char text[MAX_TEXT_LENGTH + 1] = "";
#ifdef UNICODE
WideCharToMultiByte(CP_ACP, 0, t, -1, text, MAX_TEXT_LENGTH, NULL, NULL);
#else
lstrcpy(text, t);
#endif
texture_->bind();
glEnable(GL_TEXTURE_2D);
glPushMatrix();
glColor3fv(color_.v);
glTranslatef(x, y, 0.0f);
size_t textlen = strlen(text);
//Das Viereck für einen Buchstaben zeichnen
for(size_t i=0;i<textlen;i++)
{
glBegin(GL_QUADS);
glTexCoord2f(letters[text[i]].x, 1.0f - letters[text[i]].y - 0.0625f); glVertex2d(0, size_);
glTexCoord2f(letters[text[i]].x + 0.0625f, 1.0f - letters[text[i]].y - 0.0625f); glVertex2d(size_, size_);
glTexCoord2f(letters[text[i]].x + 0.0625f, 1.0f - letters[text[i]].y); glVertex2d(size_, 0);
glTexCoord2f(letters[text[i]].x, 1.0f - letters[text[i]].y); glVertex2d(0 , 0);
glEnd();
glTranslated((letters[text[i]].width), 0.0f, 0.0f);
}
glPopMatrix();
} |
Du kannst es vieleicht für dein Beispiel abwandeln. Im Prinzip brauchst du nur die ersten Zeilen übernehmen.
mfg Dragon _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
|
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 10.04.2006, 12:17 Titel: |
|
|
ich hab den Vorschlag noch nicht ausprobiert, aber kann das sein, dass man damit keine Sonderzeichen wie griechische Buchstaben darstellen kann. Wäre gut wenn das funktionieren würde, da ich an nem Funktionsplotter für komplexe Zahlen arbeite und für die Polarkoordinaten zB das alpha brauche.
Gruß Legolas _________________ I can see I'm going blind. |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 10.04.2006, 12:25 Titel: |
|
|
http://www.freetype.org/ _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 10.04.2006, 13:53 Titel: |
|
|
Danke für den Link aber ich glaube mich in sowas Komplexes reinzuarbeiten ist ne Nummer zu hoch für mich.
trotzdem Danke
Gruß Legolas _________________ I can see I'm going blind.
Zuletzt bearbeitet von Legolas87 am 03.10.2011, 09:28, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 10.04.2006, 15:51 Titel: |
|
|
hab schonmal ein bisschen was hinbekommen. Ich hab das Programm jetzt so geschrieben, dass es egal sein (sollte) ob man UNICODE oder Multibyte verwendet. Wenn ich Multibyte verwende funktioniert auch alles, nur bei UNICODE wird wie schon gesagt nicht alles dargestellt. Ich hab das mal ge"Screenshoot"et:
Problembild
oben ist UNICODE und unten Multibyte. Woran kann das liegen?
Gruß Legolas _________________ I can see I'm going blind. |
|
Nach oben |
|
|
Legolas87 JLI'ler
Alter: 37 Anmeldedatum: 22.10.2003 Beiträge: 131
Medaillen: Keine
|
Verfasst am: 11.04.2006, 09:28 Titel: |
|
|
Ich hab das Programm jetzt soweit, dass die Zeichenketten in kompletter Länge angezeigt werden (Ein Parameter in einer OGL Funktion war falsch also wurden zu wenig Zeichen ausgegeben).
Wenn ich jetzt aber versuche das zu machen, weswegen ich eigentlich auf UNICODE umgebaut hab, nämlich sowas:
Code: | const char_t *c=T("αβγδ");
glPrint(c); |
dann wird grad mal gar nichts von dem String angezeigt, also funktionieren wieder nur normale Zeichen. Was hab ich jetzt wieder falsch gemacht?
Gruß Legolas _________________ I can see I'm going blind. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|