JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=d8417ab97b235ac94d53c4476eb6bb5cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

umstellung multibyte unicode

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 09.04.2006, 16:22    Titel: umstellung multibyte unicode Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 09:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 11:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 12:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 12:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 13:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 10.04.2006, 15:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Legolas87
JLI'ler


Alter: 37
Anmeldedatum: 22.10.2003
Beiträge: 131

Medaillen: Keine

BeitragVerfasst am: 11.04.2006, 09:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum