Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Ich wollt jetzt nicht extra nen neues Thema anfangen (da der Titel eh der gleiche wäre),
ich arbeite seit gestern auch mit TextSuite, hab auch eigentlich keine Probleme damit, das einzige was mich noch stört ist, das der Text bei mir falsch ausgegeben wird. Ich arbeite mit OpenGL 2-dimensoional, nur der Text wird falsch herrum ausgegeben.
Im Anhang is nen screenshot, die rote Schrift sollte man ja sehen können
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
thebubble hat geschrieben:
Ich wollt jetzt nicht extra nen neues Thema anfangen (da der Titel eh der gleiche wäre),
Spielt keine Rolle. Lieber ein Thema zu viel als 2 unterschiedliche Diskussionen in einem Thema. Dann kommt man nur durcheinander. Entsprechend habe ich es auch mal geteilt.
thebubble hat geschrieben:
ich arbeite seit gestern auch mit TextSuite, hab auch eigentlich keine Probleme damit, das einzige was mich noch stört ist, das der Text bei mir falsch ausgegeben wird. Ich arbeite mit OpenGL 2-dimensoional, nur der Text wird falsch herrum ausgegeben.
Im Anhang is nen screenshot, die rote Schrift sollte man ja sehen können
Also ich sehe zwar keinen Anhang aber ich denke ich weiß woran das liegt. Der Text dürfte auf dem Kopf stehen. Und Zwar arbeite ich in der Textsuite mit einem 2D Koordinatensystem welches Oben Links als Koordinate 0,0 betrachtet. Der ein oder andere macht es gerne so, dass Unten Links die Koordinate 0,0 hat. Mir persönlich gefällt es aber nicht, dass ich bei jeder Koordinate Höhe-Y Koordinate machen muss.
Was das angeht hast du 2 Möglichkeiten. Entweder du passt dein glOrtho so an, dass 0,0 Oben Links ist. Oder ein glScalef(1, -1, 1) direkt vor dem Zeichnen des Textes sollte auch genügen. Musst du dann natürlich nach dem Text wieder rückgängig machen. Bei glScale könnte es auch passieren, dass die Schrift nicht mehr da ist (weiß es nicht mehr genau ob das passieren kann). Falls doch, dann müsstest du auch backface culling kurzzeitig deaktivieren. Denn es könnte sein, dass man den Text dann eben von hinten sieht.
Ich persönlich bevorzuge und empfehle für 2D eigentlich immer den Orthomodus so zu benutzen, dass Oben Links 0,0 ist. Allerdings ist das nur meine Meinung. Gibt genug die das anders sehen. Muss aber auch dazu sagen, dass ich meine Bibliothek eigentlich ausschließlich nur mit Oben Links getestet habe. (Sollte ich wohl mal ändern)
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
hmmm, normal mit glScale(1,-1,1) gehts nich ... weil dann ja komplett die koordinaten ins negative gebracht werden... aber dann müsste es ja eigentlich gehen wenn ich den text erst zum ursprung transformiere dann invertiere und wieder zurück an die richtige position, oder hab ich da nen denkfehler?
kann ich ne matrix pushen, dann glLoadIdentity aufrufen um damit zu arbeiten und dann die matrix wieder popen?
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wie gesagt. Ich arbeite grundsätzlich andersrum. Aber ja. Da könntest du sogar recht haben. Also, dass du die Matrix sichern (Push) und dann zurücksetzen musst. Anschließend dann wiederherstellen (Pop). Ich weiß es so aus dem Kopf jetzt leider nicht so genau. Kann auch gerade nicht nachschauen. Ich werds mir aber definitiv mal anschauen und dann die faq in meiner Dokumentation auch erweitern.
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kurz eine Erklärung wieso es besser ist das KoOrdinatenUrsprungs oben links zu machen. Ich hab das früher, als ich eine GUI geschrieben habe, auch nicht gemacht - bis...
...ich das Fenster vergrößern wollte. Der Hinzukommende Platz wird immer in der gegenüberliegenden Ecke des KOU hinzugefügt. Wenn man den Ursprung unten links macht und man jetzt das Fenste vergrößert hat man oben rechts plötzlich den neuen Raum. Oben! D.h. unter dem Fenstertitel ist plötzlich ein Freiraum. Das ist irgendwie seltsam und sieht aus wie ein Bug. Ich hab mich dann hingesetzt und 4-5h investiert um den Ursprung zu verlagern. Seit dem mach ich das immer so wie auch Lossy
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
thebubble: fBlockHeight ist natürlich nur dann verfügbar, wenn du dich auch im BlockModus befindest. Wenn du keinen Blockmodus hast, dann wird der Text an der aktuellen Stelle ausgegeben. Und ich weiß gerade nicht ob fBlockHeight im Singleline Modus auf 0 gesetzt wird. Glaube ich aber nicht.
Was du bei deiner Änderung aber auch nicht vergessen darfst ist die Tatsache, dass es bei einem Update der Quellen dann wieder verschwunden ist. Also wenn ich es denn irgendwann mal geschafft habe eine neue Version zu machen.
Und sonst zu deiner Lösung. Muss ich wieder passen. Ich kann so aus dem Kopf nicht sagen wo Probleme auftreten könnten. Da muss ich mich mal ein paar Stunden hinsetzen und das mal Systematisch durchtesten. Leider nicht ganz Zeitunaufwändig. Was ich aber so früher mal hatte sollte ein glScale ausreichen. Eventuell in Kombination mit weiteren Dingen. Aber wie gesagt. Ich werde mir das mal anschauen und dann für solch ein Vorgehen irgendwas Lösungsähnliches anbieten. Müssen. Weil ja doch der ein oder andere es so macht.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
wäre nich das einfachste nen zusätzlichen parameter zu erschaffen TS_ORIGIN mit den werten TS_ORIGIN_TOP bzw TS_ORIGIN_BOTTOM und dem entsprechend einfach das glOrtho anzupassen? (weiß ja nich genau wie das mit der textur-erstellung aussieht)
nehmen wir mal an das der o.g. parameter implementiert ist würde ich das in DrawChar so schreiben (also ohne das sich glOrtho ändert):
(ob das mit dem SingleLine so richtig is weiß ich nich genau muss ich mal später gucken )
aus der tatsache das ich nur im Blockmodus arbeite verschwindet das problem dass es fBlockHeight im SingleLine nich gibt ;D
ja bei updates muss ich das halt jedesmal neu anpassen, gibt schlimmeres ^^
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
thebubble hat geschrieben:
wäre nich das einfachste nen zusätzlichen parameter zu erschaffen TS_ORIGIN mit den werten TS_ORIGIN_TOP bzw TS_ORIGIN_BOTTOM und dem entsprechend einfach das glOrtho anzupassen? (weiß ja nich genau wie das mit der textur-erstellung aussieht)
Meine Texturerstellung ist vollkommen unabhängig von OpenGL. Ich brauch nur eine oder mehrere Texturen. Rest ist mir da recht egal. Was die Veränderung von States innerhalb von OpenGL angeht. Da ist aktuelle Textur, Farbe, (vorher auch noch Position) das maximum was drin ist. Zu mal ein neues Setzen von glOrtho (ich muss das für jeden Popelblock machen) ein ziemlich großer Haufen Arbeit. Nicht gerade förderlich um noch halbwegs schnell zu sein. Im übrigen ist glVertex2iv auch schneller als glVertex2f mit Integer als Parameter.
Was mich an dem Beispiel etwas stört ist die Sache, dass du da aktuell 3 Methoden zum Zeichnen eines Zeichens hättest. Das wäre gar nicht nötig. Aber ist kein Ding. Du kennst die Struktur ja auch nicht. Von daher ist das auch überhaupt keine Sache.
Ich persönlich bin nur noch überhaupt nicht überzeugt davon, dass diese Lösung komplett funktioniert. Ich muss mir da selber erst mal ein genauen Überblick drüber verschaffen wo der Schuh drückt und was für Problem existieren bzw was für Probleme entstehen können. Also mit welchen Koordinaten muss der Block eingestellt werden. Was passiert, wenn der Block nur halb so hoch ist. Normal muss man für solche Berechnungen die Höhe des ViewPorts benutzen. Wie wirken sich glScale auf die Berechungen aus etc etc etc. Erst wenn ich weiß wie sich das alles auswirkt, dann überlege ich mir was ich da als Lösung in betracht ziehe.
Aber. Ja ich habe mit dem Gedanken gespielt so etwas in der Art wie das TS_RENDERER_OPENGL_ORIGIN zu machen. Aber bevor ich mich da zu einer definitiven Aussage hinreißen zu lassen muss ich mir mehr Input verschaffen und vor allem eine oder zwei Nächte drüber schlafen. Ich überlege mir solche Sachen meistens sehr sehr gut. Und ich mag ungern mit einer recht spontan getroffene Entscheidung bis in alle Ewigkeit leben müssen. Das ist nicht böse gemeint. Aber was meine Projekt angeht bin ich so.
PS: Vielleicht gibt es ja auch eine ganz andere Lösung. Ich habe ja schon mal gesagt, dass ich Ursprung Unten Links in 2D für nicht so berauschend finde. Nur weil irgendwann mal wer damit angefangen hat müssen es nicht alle bis an ihr Lebensende so machen. Falls ich also durch eine beschriebene Lösung (faq) wie glScale den ein oder anderen dazu bringe einfacher damit arbeiten zu können, dann wäre es mir das durchaus wert es so zu machen.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Naja war ja nur ne Idee ;D
Was du machst und was nich is ja deine Sache
Aber ich hab mal ne Frage, ich find irgendwie nirgens in der Dokumentation beüglich des Offsets, kannst du mir kurz nen beispiel geben, wie man es einstellt?
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nicht falsch verstehen. Ich bin froh und dankbar über alle Anregungen oder Ideen. Ihn nehme sie zur Kenntniss und werde es berücksichtigen, wenn ich mir ein Bild von dem ganzen Problem verschafft habe. Das ist nicht böse gemeint sondern eher nur etwas zurückhaltend.
Welches Offset meinst du? Du kannst den Text relativ zur seiner Grundlinien verschieben oder aber du kannst den Inhalt eines Blockes (Blockmode) verschieben. Ich vermute mal du meinst innerhalb des Blockes. Dafür gibt es die Parameter TS_BLOCK_OFFSET_Y und TS_BLOCK_OFFSET_X. Das sind 2 Integerwerte die vergleichbar zu einem glTranslate sind. Nur mit dem Unterschied, dass durch das Blockoffset auch beeinflusst wird, welche Zeilen sichtbar sind und welche nicht (clipping).
Diesen Wert kannst du ganz normal mit der Methode tsSetParameter und dann TS_BLOCK_OFFSET_Y und den entsprechenden Wert (positiv oder negativ) setzen. Für das übergebene Offset ist eine OpenGL Einheit die Maßeinheit. Im 1:1 Orthomodus entspräche ein Offset von 1 genau 1 Pixel. Diesen Wert kannst du nur außerhalb des Blockmodes setzt. Wie so einiges Andere auch. Und der bleibt so lange erhalten bis du einen neuen Wert setzt.
Wichtig dabei immer auf Fehler prüfen. Ich habe in der Dokumentation bei allen Methoden ausführlich aufgeführt welche Fehler entstehen können und was die Ursachen dafür sein können. Außerdem kann man erfragen welche Methode den Fehler gesetzt hat.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Okay nach reichlichen Problemen mit Textsuite (dadurch das mein Ursprung ja unten ist), hab ich den Ursprung nach oben verlegt, mittlerweile find ich es sorum auch besser
Geht auch alles eigentlich einwandfrei, bis auf den kleinen aber feinen unterschied, dass das Cliping bei mir unten eine Zeile zuviel dranne läst (siehe Bild). Der Block bekommt halt die Dimensionen von dem darunterliegendem Quad.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das Clipping der TextSuite ist kein Ersatz für glScissor. Sobald auch nur ein einziges Pixel einer Zeile in einen Block reinreicht wird die komplette Zeile gezeichnet. Mit dem Parameter TS_CLIP kannst du beeinflussen ob auch angeschnittene Zeilen verworfen werden sollen. Aber wenn du wirklich nur den viereckigen Bereich des Blockes als Anzeige haben willst, dann musst du mit glScissor den rechteckigen Bereich einstellen. Da führt kein Weg dran vorbei.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Dann is doch aber in deiner Dokumentation nen kleiner Fehler oder? -> Cliping
wenn ich TS_CLIP_COMPLETE richtig verstehe dann malt er doch alles was rot ist oder?
EDIT:
mir is grad noch nen Fehler (also ich denk ma es ist einer ;D) aufgefallen, wenn ich tsSetParameteri(TS_BLOCK_OFFSET_X,100) aufrufe verschiebts nich an der X- sondern an der Y-Achse,
bei tsSetParameteri(TS_BLOCK_OFFSET_Y,100) auch falsche Achse
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hmmm. Sollte ich vielleicht deutlicher kennzeichnen. Die Linie die du sieht befindet sich nicht unten sondern oben in einem Block. Complete schmeißt nur das weg was komplett außerhalb liegt. Border schmeißt alles weg was die Kanten oben und unten streift.
[edit] Das mit dem Offset werde ich bei Gelegenheit mal in mein Mantis übertragen und mir mal anschauen bzw dann auch fixen.
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.