Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 17:03

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 3D True Type Fonts
BeitragVerfasst: Di Okt 17, 2006 07:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

es gibt ja bekanntlich die Möglichkeit mit OpenGL 3D-Fonts auszugeben. Das können entweder Bitmap- oder TrueType-Fonts sein. Ich habe leider zwei Probleme damit.

1. Die Größe des Fonts ist immer gleich, egal welche Parameter ich bei Createfont angebe.

2. Ich kann den einem Device-Context zugewiesenen Font nicht mehr löschen und durch einen anderen ersetzen. Das muss dann so geschehen, dass ich den Device- und Rendering-Context lösche, einen neuen erzeuge und diesem dann wieder einen Font zuweise. Leider muss ich dann das ganze Environment sichern (Texturen, ...) und nacher wieder herstellen.

Zum ersten Punkt habe ich mir schon jede Menge Tutorials und Beispielprogramme angeschaut. Aber auch die Beispielprogramme haben dieses Problem. Die Fontgröße ist nicht zu ändern.

Weiß jemand Abhilfe?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 17, 2006 08:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also 3D Fonts sind keine Bitmap fonts. Wirf die bitte nicht zu sehr ineinander. Die werden zwar beide in OpenGL verwendet habe aber so sonst nicht viel gemeinsam außer, dass sie Fonts sind.

Bei Bitmapfonts kann man die Größe beim Erstellen angeben. Und bei 3D Fonts spielt die Schriftgröße eher nur eine untergeordnete Rolle. Du hast ja schließlich ein Scale. Das die Buchstaben teilweise bei einer anderen Größe auch anders aussehen ist ein anderes Problem.

Und zum Erstellen der Fonts. Habe es bisher noch nicht mit OpenGL ausprobiert aber an einem DC kann man sehr wohl unterschiedliche Fonts binden. Das habe ich mit der GDI selber schon häufig genug gemacht. Und darauf bauen die Funktionen für OpenGL nun mal auch auf also sollte es mich wundern, wenn es nicht gehen sollte. Aber sonst befürchte ich werden wir ohne Code wohl nur Raten können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: 3D Fonts
BeitragVerfasst: Di Okt 17, 2006 14:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Entschuldigung, Entschuldigung,

da drückt man sich mal etwas ungenau aus und wird direkt abgemahnt.

Man kann mit OpenGL auf zwei Arten Fonts erstellen:

mit wglUseFontOutlines und
mit wglUseFontBitmaps

Habe ich nun einen Font angelegt (siehe Code), dann kann ich dessen Größe im Programm nicht mehr ändern. Das ist unabhängig von der Art des Fonts. Ist ein Font einmal einem DC zugewiesen, kann ich, auch wenn ich das Objekt lösche und wieder neu anlege, dessen Größe nicht mehr ändern.

Code:
  1.  
  2. {******************************************************************}
  3. (*
  4.   Released as part of the camera example program
  5.   Maintained by Andree Heyroth (AndyH)
  6. -------------------------------------------------------------------
  7.   License
  8.   -------
  9.   Copyright (C) 2006 Andree Heyroth
  10.  
  11.   This license applies to everything on www.delphigl.com, except where
  12.   otherwise noted.
  13.  
  14.   This software is provided 'as-is', without any express or implied warranty.
  15.   In no event will the authors be held liable for any damages arising from
  16.   the use of this software.
  17.  
  18.   Permission is granted to anyone to use this software for any purpose,
  19.   including commercial applications, and to alter it and redistribute it
  20.   freely, subject to the following restrictions:
  21.  
  22.   1. The origin of this software must not be misrepresented; you must not
  23.      claim that you wrote the original software. If you use this software in a
  24.      product, an acknowledgment in the product documentation would be
  25.      appreciated but is not required.
  26.   2. Altered source versions must be plainly marked as such, and must not be
  27.      misrepresented as being the original software.
  28.   3. This notice may not be removed or altered from any source distribution.
  29.  
  30.   Description
  31.   -----------
  32.   Component containing mehtods and properties which are useful for writing
  33.   TrueType based fonts to the screen.
  34.  
  35.   Requirements
  36.   ------------
  37.   - Borland VCL
  38.   - Borland Delphi version 5.0 and above
  39.   - DGLSDK 2006.1
  40.  
  41.   History
  42.   -------
  43.   -
  44.  
  45.   Contact
  46.   -------
  47.   I created this source code in my spare time. If you find a bug or just
  48.   wanna say hello, feel free to write to the contributor:
  49.  
  50.     Andree Heyroth (AndyH)
  51.  
  52. *******************************************************************************)
  53. unit MyFont;
  54.  
  55. interface
  56.  
  57. uses
  58.   Windows,
  59.   Graphics,
  60.   SysUtils,
  61.   Classes,
  62.   Controls,
  63.   Dialogs,
  64.   Forms,
  65.   Camera,
  66.   Util,
  67.   DglOpenGL;
  68.  
  69. type
  70.   TPMyFont=^TMyFont;
  71.   TMyFont=class(TComponent)
  72.   private
  73.     FWinFont: TFont;
  74.     FFontList: GLUint;
  75.     FFontSize: integer;
  76.     FFontThickness: integer;
  77.     FFontWidth: integer;
  78.     FFontItalic: integer;
  79.     FFontUnderline: integer;
  80.     FFontStrikeout: integer;
  81.     FFontWeight: integer;
  82.     FFontgmf : array [0..255] of GLYPHMETRICSFLOAT;  // Address Buffer For Font Storage
  83.     FEnabled: boolean;
  84.     FColor: TglColor;
  85.     function CalcCenterPos(Start: TGLvector; text: pchar): TGLvector;
  86.     function GetLength(text: pchar): GLdouble;
  87.     procedure ScaleFont;
  88.   public
  89.     constructor Create(AOwner:TComponent); override;
  90.     destructor Destroy; override;
  91.     procedure Print(text: pChar;
  92.                     Pos: TGLvector;
  93.                     PCamera: TPCamera);overload;
  94.     procedure Print(text: pChar;
  95.                     Pos: TGLvector);overload;
  96.     procedure BuildFont (FontName: string; glFontDC: HDC);
  97.     procedure KillFont;
  98.     procedure Init;
  99.   published
  100.     property Enabled: boolean read FEnabled write FEnabled;
  101.     property FontSize: integer read FFontSize write FFontSize;
  102.     property FontThickness: integer read FFontThickness write FFontThickness;
  103.     property FontWidth: integer read FFontWidth write FFontWidth;
  104.     property FontItalic: integer read FFontItalic write FFontItalic;
  105.     property FontUnderline: integer read FFontUnderline write FFontUnderline;
  106.     property FontStrikeout: integer read FFontStrikeout write FFontStrikeout;
  107.     property FontWeight: integer read FFontWeight write FFontWeight;
  108.     property Font: TFont read FWinFont;
  109.     property Color: TglColor read FColor write FColor;
  110.   end; {TOpenGL}
  111.  
  112. procedure Register;
  113.  
  114. implementation
  115.  
  116. function TMyFont.GetLength (text: pchar): GLdouble;
  117. var
  118.   loop: integer;
  119.   laenge: GLdouble;
  120. begin
  121.   laenge := 0;
  122.   for loop:=1 to length(text)-1 do
  123.     laenge := laenge + FFontgmf[loop].gmfCellIncX;
  124.   result := laenge;
  125. end;
  126.  
  127. function TMyFont.CalcCenterPos (Start: TGLvector; text: pchar): TGLvector;
  128. begin
  129.   result := Start;
  130.   result.X := result.X + GetLength (text) / 2;
  131. end;
  132.  
  133. constructor TMyFont.Create(AOwner:TComponent);
  134. begin
  135.   inherited Create(AOwner);
  136.   FFontList := 0;
  137.   FWinFont := nil;
  138. end;
  139.  
  140. destructor TMyFont.Destroy;
  141. begin
  142.   enabled := true;
  143.   KillFont;
  144.   enabled := false;
  145.   inherited destroy;
  146. end;
  147.  
  148. procedure TMyFont.BuildFont (FontName: string; glFontDC: HDC); // Build Our Bitmap Font
  149. var
  150.   FName: PChar;
  151. begin
  152.   if not FEnabled then
  153.     exit;
  154.   if assigned (FWinFont) then
  155.     KillFont;
  156.  
  157.   FName := PChar (FontName);
  158.  
  159.   FFontList := glGenLists(256);              // Storage For 256 Characters
  160.   FWinFont := TFont.Create;
  161.   FWinFont.Name := FName;
  162.   FWinFont.Size := -FFontSize;
  163.   if FFontWeight = 700 then
  164.     FWinFont.Style := FWinFont.Style + [fsBold];
  165.   if FFontItalic = 1 then
  166.     FWinFont.Style := FWinFont.Style + [fsItalic];
  167.   if FFontUnderline = 1 then
  168.     FWinFont.Style := FWinFont.Style + [fsUnderline];
  169.   if FFontStrikeout = 1 then
  170.     FWinFont.Style := FWinFont.Style + [fsStrikeout];
  171.  
  172.   glEnable(GL_POINT_SMOOTH);
  173.  
  174.   //SelectObject(glFontDC, 0);                   // delete previously assignment
  175.   SelectObject(glFontDC, FWinFont.Handle);  // Selects The Font We Created
  176.  
  177.   if not wglUseFontOutlines(glFontDC,       // Select the wanted DC
  178.                      0,                     // Starting Character
  179.                      255,                   // Number Of Display Lists To Build
  180.                      FFontList,             // Starting Display Lists
  181.                      0,                     // Deviation From The True Outlines
  182.                      FFontThickness/10,     // Font Thickness In The Z Direction
  183.                      WGL_FONT_POLYGONS,     // Use Polygons, Not Lines
  184.                      FFontgmf[0]) then      // Address Of Buffer To Recieve Data
  185.   begin
  186.     Application.MessageBox(pChar ('Konnte Font '+FontName+' nicht installieren!'),
  187.                            'Fehler',
  188.                            0);
  189.   end;
  190. end;
  191.  
  192. procedure TMyFont.KillFont;
  193. begin
  194.   if not enabled then
  195.     exit;
  196.  
  197.   if FFontList > 0 then
  198.     glDeleteLists(FFontList, 256);            // Lösche alle 256 Zeichen
  199.   FFontList := 0;
  200.  
  201.   if assigned (FWinFont) then
  202.     FreeAndNil (FWinFont);
  203. end;
  204.  
  205. procedure TMyFont.Print(text: pChar;
  206.                         Pos: TGLvector;
  207.                         PCamera: TPCamera);
  208. var
  209.   Start, Center: TGLvector;
  210. begin
  211.   if not FEnabled then
  212.     exit;
  213.   if text = '' then
  214.     exit;
  215.   if not glIsList (FFontList) then
  216.     exit;
  217.  
  218.   Start := Pos;
  219.   Center := CalcCenterPos (Start, text);
  220.  
  221.   glPushMatrix;
  222.   //glPushAttrib(GL_LIST_BIT);
  223.   glPushAttrib (GL_ALL_ATTRIB_BITS);
  224.   glListBase(FFontList);
  225.  
  226.   PCamera^.Apply;
  227.   glTranslated(Start.x, Start.y, Start.z);
  228.  
  229.   // Text immer zum benutzer ausrichten, also nur die drehung und nicht die
  230.   // verschiebung zurücknehmen
  231.   PCamera^.ApplyInvers;
  232.   glColor4fv (@FColor);
  233.   ScaleFont;
  234.   glCallLists(length(text),GL_UNSIGNED_BYTE,text);
  235.   glPopAttrib;
  236.   glPopMatrix;
  237. end;
  238.  
  239. procedure TMyFont.Print(text: pChar;
  240.                         Pos: TGlvector);
  241. var
  242.   Start, Center: TGLvector;
  243.   Rotation: TRotation;
  244. begin
  245.   if not FEnabled then
  246.     exit;
  247.   if text = '' then
  248.     exit;
  249.   if not glIsList (FFontList) then
  250.     exit;
  251.  
  252.   Start := Pos;
  253.   Center := CalcCenterPos (Start, text);
  254.  
  255.   glPushMatrix;
  256.   //glPushAttrib(GL_LIST_BIT);
  257.   glPushAttrib (GL_ALL_ATTRIB_BITS);
  258.   glListBase(FFontList);
  259.   glTranslated(Pos.x, Pos.y, Pos.z);
  260.   glColor4fv (@FColor);
  261.   ScaleFont;
  262.   glCallLists(length(text),GL_UNSIGNED_BYTE,text);
  263.   glPopAttrib;
  264.   glPopMatrix;
  265. end;
  266.  
  267. procedure TMyFont.ScaleFont;
  268. const
  269.   BASE_SIZE = 10;
  270. var
  271.   x,y,z: double;
  272. begin
  273.   // ich nehme eine Fontgröße von 10 als Standard an
  274.   x := FFontSize / BASE_SIZE;
  275.   y := FFontSize / BASE_SIZE;
  276.   z := FFontSize / BASE_SIZE;
  277.   glScaled (x,y,z);
  278. end;
  279.  
  280. procedure TMyFont.Init;
  281. begin
  282.   FFontSize := 36;
  283.   FFontWidth := 10;
  284.   FFontThickness := 1;
  285.   FFontItalic := 0;
  286.   FFontUnderline := 0;
  287.   FFontStrikeout := 0;
  288.   FFontWeight := 400;  // im bereich von 0-100 normal, 700 = bold
  289.   FColor.alpha := 1.0;
  290.   FColor.red := 0.0;
  291.   FColor.green := 0.0;
  292.   FColor.blue := 0.0;
  293.  
  294. end;
  295.  
  296. procedure Register;
  297. begin
  298.   RegisterComponents('OpenGL',[TMyFont]);
  299. end;
  300.  
  301. end.
  302.  


Diese Komponente ist Teil meines Kamerabeispiels, welches Ihr unter http://files.delphigl.com/Download/kamera_heyroth.zip
herunterladen könnt. Das sollte wohl genug Code sein.

Andree


Zuletzt geändert von Andyh am Mi Okt 18, 2006 11:50, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Fonts
BeitragVerfasst: Di Okt 17, 2006 20:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Andyh hat geschrieben:
Entschuldigung, Entschuldigung,

da drückt man sich mal etwas ungenau aus und wird direkt abgemahnt.

Bitte? Mal bloß nicht überragieren. Habe nur gesagt, dass BitmapFonts und PolygonFonts anders sind. Wenn ich irgendwie jemanden "abmahne" dann hört man das sehr deutlich. Das war nicht mal ne Kritik. ;-) Nur ein Hinweis, dass die unterschiedlich sind. Mehr nicht. Also es gibt keinen Grund warum du dich angemacht fühlen musst. Außer höchstens, weil ich vielleicht manchmal ein bisschen arogant bin. :roll:

Jetzt aber mal zu dem Fontproblem. Habe es gerade selber mal ausprobiert und hat sofort mit 2 Fonts geklappt. Habe da so auch keinen Unterschied entdeckt bis auf Eines. Ich rufe bei mir kein SelectObject (DC, 0) auf. Also ich setze das Font einfach so. Evtl verschuckt er sich ja daran. Der Rest ist im Groben und Ganzen ziemlich gleich. Kannst dir ja auch mal in meiner Unit glText die Klasse TglPolygonText anschauen. Alles recht unspektakulär und ziemlich genau so wie bei dir.

Ich traue es mich ja fast nicht zu sagen. :twisted: Aber in deinem Code ist etwas was man normal nicht macht. Bzw nicht machen muss. Und zwar einen Pointertyp auf eine Klasse. Das ist doppel gemoppelt und somit schon wieder unnötig gefährlich. Klassen sind bereits Pointer. Somit ist es völlig legal, wenn die einfach so benutzt. Bei Records und den veralteten Object (die ich kategorisch ablehne) braucht man wieder einen Pointertyp. Aber auch nicht immer. Aber ich glaube ich schweife ab.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Text-Verständnis
BeitragVerfasst: Mi Okt 18, 2006 05:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Jaja, das ist schon schwierig aus einem Text Emotionen abzulesen.

Weder Du noch ich haben es harsch, böse oder auch sonst nur im mindesten negativ gemeint, was wir geschrieben haben. Aber je nachdem wie man den Text liest, kann man ihn so oder so verstehen. Man könnte es ja auch als witzig gemeint auffassen.

Also: ich bin ein gaaaanz lieber...

Ich werde mir das mal näher anschauen. Danke erst einmal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: habe ich ausprobiert aber...
BeitragVerfasst: Mi Okt 18, 2006 07:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
:D Hallo Lossy, :D

habe Deinen Tip mal ausprobiert und die Zeile mit dem SelectObject sieht jetzt so aus:

//SelectObject(glFontDC, 0); // delete previously assignment

:idea: Damit sollte diese Anweisung nicht mehr ausgeführt werden (wird sie natürlich auch nicht).

Ich kann aber auch jetzt in der Init-Methode von TMyFont die Größe des Fonts einstellen wie ich will, es ändert sich nichts. :?:


P.S.:

wie Du siehst, habe ich versucht meine Aussagen mit Emoticons zu versehen, damit keine Unstimmigkeiten mehr aufkommen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Text-Verständnis
BeitragVerfasst: Mi Okt 18, 2006 08:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Andyh hat geschrieben:
Also: ich bin ein gaaaanz lieber...

Ja schon klar. "Er will nur spielen." Aber okay. So viel zu missverständlichen Äußerungen und ihre Wirkungen. ;-)

Wo erstellst du denn deine Fonts? Evtl ist das ja eine Stelle die nicht so glücklich ist. Konnte wie gesagt keinen Unterschied zwischen deiner Erstellung und meiner finden.

Bzw. Polygonfonts haben immer eine Höhe von 1! Egal welche Größe du angibst. Die Größe wird sich nur bei den Zeichen äußern, da die teilweise etwas unterschiedlich sein können in anderen Größen. Aber die OpenGL Höhe von 1 dient dazu um die späteren Positionierungen und Berechnungen damit zu vereinfachen. Vielleicht funktioniert es ja nur du gehst davon aus, dass sie eine Höhe von 16 oder so haben.

PS: Smileys. Oh mein Gott. Was habe ich angerichtet. :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: 1/2 verstanden
BeitragVerfasst: Mi Okt 18, 2006 11:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Folgendes habe ich bisher akzeptiert:

lege ich mit wglUseFontOutlines einen Font an, hat der die Größe 1 und muss von mir entsprechend der erforderlichen Größe in meiner Szene skaliert werden um sich der Umgebung anzupassen. Das ist ja auch weiter nicht schwierig, muss halt nur in der Printmethode der Komponente programmiert werden. Da habe ich ja die gewünschte Fontgröße und kann die Ausgabe des Texts mit glScaled oder glScalef anpassen.

(ich habe meinen Beispielcode oben angepasst und ausprobiert. es klappt wunderbar. Danke)

Folgendes Problem besteht immer noch:

habe ich mit meiner Komponente einen Font angelegt, hängt der am DC, der als Parameter glFontDC an die Methode Buildfont übergeben wurde. Will ich diesen Font jetzt durch einen anderen ersetzen, mache ich ein Free auf den aktuellen Font und lege einen neuen an, der auch wieder an den DC gebunden wird. Da das Free ein Killfont ausführt gehe ich davon aus, dass der DC jetzt ohne Font dasteht. Dem scheint aber nicht so zu sein. Ich kann so viele Fonts freigeben und wieder neu anlegen wie ich will, der zuerst an den DC gebundene Font bleibt. Habe ich als ersten Font z.B. Arial gewählt, mache ein Free und lege dann einen neuen Font an der Times New Roman ist, so sehe ich dann trotzdem noch die Schrift in Arial.

Die Frage ist: sollte das grundsätzlich so gehen wie ich mir das vorstelle?
Wenn Nein: wie geht es dann?
Wenn Ja: wo ist der Fehler verborgen?

Danke,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 18, 2006 12:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja das ist eine gute Frage. Also ich lösche sie erst ganz zum Schluss. Zur Not probiere mal aus wie es aussieht, wenn du das andere Font einfach erstellst und als neues Objekt für den DC auswählst. Ohne noch einmal irgendetwas anderes auszuwählen. Aber ich wüsste so jetzt nichts, dass man da irgendwie etwas ganz speziell machen muss.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Danke, Danke, Danke...
BeitragVerfasst: Do Okt 19, 2006 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
So einfach geht das. Man muss nur jemand kennen, der einen kennt...

Der Tipp war super, es klappt. Ich lasse die Fonts jetzt bestehen und selektiere einfach einen neuen für den DC. Wenn das Programm beendet wird, mache ich alle weg.

Ich hatte mich so in die Idee verannt, dass man den Font erst vom DC lösen muss um einen neuen darnzukleben, dass ich richtig riesig große Scheuklappen um die Augen hatte.

Bis zur nächsten Frage,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 15:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Keine falschen Hoffnungen. Ich kenne mich damit auch nicht aus. Also, dass ein SelectObject mit 0 zu einem einfriehren führt war mir auch neu. Ich kenne es nur so, dass man bei einem SelectObject das vorherige Sichert (den Rückgabewert von SelectObject) und nach getaner arbeit dann SelectObject mit diesem Wert aufruft. Evtl könntest du das bei dir ja auch so machen. Dann könntest du dein Font auch gefahlos frei geben.

Code:
  1. procedure BuildFont ...
  2. begin
  3.   OldHandle := SelectObject(DC, NewHandle);
  4.  
  5.   wglUseFontOutlines(...);
  6.  
  7.   SelectObject(DC, OldHandle);
  8. end;


PS: So im nachhinein überlegt hätte ich das auch früher sagen können :roll: Aber da kann ich mir vertrauensvoll meine eigene Signatur unter die Nase halte. :twisted:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 19, 2006 15:34 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
[OT] Wobei die Fähigkeit zur Selbstkritik durchaus ein Zeichen von Intelligenz ist.[/OT]

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 14 Queries | GZIP : On ]