Hi!
Ich versuche jetzt die Beispiele von Lossy so zu ändern, dass ich den generierten Text auch auf einem eigenen Objekt darstellen kann (z.B. Farbverlauf in alle Ecken des Fensters).
Ich habe einen blauen Hintergrund und in der Mitte ein Quadrat mit Farbverlauf. Sobald ich nun die Zeilen zum Rendern des Textes nicht mehr auskommentiere wird das Quadrat schwarz, bzw. mit Alphablending ein bisschen dunkler als der Hintergrund, der Text ist aber nicht zu sehen. Siehe Zeile mit "// << hier"
(Bei TextBeginBlock habe ich auch schon verschiedene Werte für Left, Top usw ausprobiert.)
Kann jemand sagen, warum?
Code:
procedure TMainForm.render;
var
Temp:Integer;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das Problem ist viel subtiler. Die Fonts basieren auf Texturen. Und ich denke die sind in der einen Ecke schwarz. Die Texturen deaktiviere ich nicht explizit. Mach also vor deinem Quad oder hinter tsTextEndBlock ein glDisable(GL_TEXTURE_2D) und dann sollte es nicht mehr schwarz sein.
PS: Solche großen Codestücke bitte lieber als Dateianhang posten.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bei der Schrift solltest du dir eines bewusst vor Augen halten. Die Schrift ist in erster Linie für 2D Ausgaben konzipiert. Entsprechend ist die Größe einer OpenGL Einheit normalerweise auch 1 Pixel. In 3D ist die Einheitsgröße aber nicht 1 Pixel groß. Sondern wie bei deinem Quad erstrecken sich der Wertebereich von -10 bis 10. Und bei tsTextBeginBlock übergibst du für Links bereits eine 20. Entsprechend ist der Text schon viel zu weit rechts. Bzw benutzt du für VAlign auch Center was dafür sorgt, dass dein Text sonst wie weit nach unten zentriert wird.
Du darfst jetzt aber bei tsTextBeginBlockauf keinen Fall -10 bis 10 angeben. Das würde evtl zwar funktionieren aber dann wären deine Buchstaben gigantisch zu groß und würden nach 20 "Pixeln" umgebrochen werden. Die Buchstaben sind in jedem Fall immer Pixelorientiert! Also musst du vor dem Zeichnen die Textausgabe etwas runterskalieren und die Angaben bei tsTextBeginBlock so anpassen wie du es gerne hättest. Aber immer unter Berücksichtigung der von dir gewählten Schriftgröße. Je nachdem wie groß die Schrift zu sehen sein soll solltest du auch die Schriftgröße etwas erhöhen. In etwa so wie es auch in 2D der Fall wäre. Weil die Textur sonst bescheiden aussieht. Und dazu passend natürlich dann die Breite setzen und runterskalieren.
Um zu sehen wie es in 3D gemacht wird habe ich aber auch ein spezielles 3D Beispiel mit zu den Beispielen gepackt. Evtl solltest du da auch mal einen Blick hinein werfen.
Aber bedenke, dass es in erster Linie für 2D gemacht wurde. Bei dem 3D Beispiel trickse ich etwas (deaktivierter Tiefentest), da die Buchstaben irgendwie mit der Hintergrundfläche ein doch extremes Z-Fighting veranstalten. Und das würde so nicht mehr überall bedenkenlos funktionieren. Ich bin da aber bisher noch nicht großartig weiter darauf eingegangen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Keine Ahnung was du sonst noch so verändert hast. Aber dein Code anstelle von Form.OnPaint, in dem originalen Beispiel, funktioniert.
Bis darauf, dass der Text grün ist und auf dem Kopf steht. Grün ist weil die letzte gesetzte Farbe grün ist und auf dem Kopf steht er weil du für glOrtho bei Bottom eine 0 und für Top die ClientHeight angegeben hast. Was ja nicht falsch ist und auch ganz gerne von einigen gemacht wird.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja. Ich beschränke mich in den Beispielen auf das Nötigste. Um nicht zu sehr zu verwirren.
Und falls du die Textfarbe innerhalb eines Blockes ändern möchtest musst du tsTextColor* benutzen, da der Text nicht sofort gerendert wird und die Farbsetzung dann natürlich auch erst später statt finden darf.
PS: Bitte Bitte Und falls Fragen sind immer raus damit.
Mitglieder in diesem Forum: 0 Mitglieder und 14 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.