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

Aktuelle Zeit: Mo Jul 07, 2025 13:28

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Aug 28, 2008 11:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

langsam komm ich mir wie der blutigste Anfänger vor, hab schon wieder irgendein sinnloses Problem, was ich mir nich erklären kann:
Ich bin grad dabei mir ein Menü zu basteln. Mit Farbselektion such ich mir den Button raus, der gerade selektiert ist. Hab 3 Buttons: Einloggen, Optionen und Beenden. Farbeselektion wird mit ClearColor(1,0,0,1); und grün abgestuften Buttons gerendert und dann ausgelesen. Sobald ich aber sowas wie ein Label ("Hauptmenü") über den Buttons ausgeben will, dann werden die Farben bei der Farbselektion dunkler. Dann hab ich ma n bisl rum probiert und rausgefunden, das wenn ich in das label "TEST" rein schreib, das die Farben wieder normal sind?? Ich blick einfach nich mehr durch. kann mir da jmd helfen?

Code:
  1. fMenuFont: TFont;
  2.  
  3. procedure TMainMenu.Render;
  4. var i:Integer;
  5. begin
  6.   if not((fFlashScreenCounter < FlashScreenVisTime) or (fFlashScreenAlpha > 0)) then
  7.     fSelection := Selected(fMenu);       //Farbselektion  
  8.   //Form1.Caption := IntToStr(fSelection);
  9.  
  10.   glClearColor(0,0,0,1);  //ClearColor setzen
  11.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  12.  
  13.   glMatrixMode(GL_PROJECTION);
  14.   glLoadIdentity;
  15.  
  16.   gluPerspective(45, Form1.ClientWidth/Form1.ClientHeight, NearClipping, FarClipping);
  17.  
  18.   glMatrixMode(GL_MODELVIEW);
  19.   glLoadIdentity;
  20.  
  21.   glTranslatef(0,0,-10);
  22.  
  23.   if (fFlashScreenCounter < FlashScreenVisTime) or (fFlashScreenAlpha > 0) then  //FlashScreen anzeigen
  24.     begin
  25.       fFontBig.SetColor(fFlashScreenAlpha,fFlashScreenAlpha,fFlashScreenAlpha,1);
  26.       fFontSmall.SetColor(fFlashScreenAlpha,fFlashScreenAlpha,fFlashScreenAlpha,1);
  27.       fFontBig.TextOut('Freind Hotel',0,0,10,2,TS_ALIGN_CENTER);
  28.       fFontSmall.TextOut('by Bergmann',0,1.2,8,2,TS_ALIGN_RIGHT);
  29.     end
  30.   else
  31.     begin
  32.       for i := 0 to High(fActiveMenu.fButton) do //von 0 bis ButtonAnzahl-1
  33.         begin
  34.           glPushMatrix;
  35.             if i = fSelection then glTranslatef(sin(fSinCount/2)/5,sin(fSinCount)/10,0); //Wenn Selektion = ButtonNr dann bewege Button
  36.             fMenuFont.SetColor(fActiveMenu.fButton[i].Color[0],   //FontColor setzen
  37.                                fActiveMenu.fButton[i].Color[1],
  38.                                fActiveMenu.fButton[i].Color[2],
  39.                                fActiveMenu.fButton[i].Color[3]);
  40.             fMenuFont.TextOut( fActiveMenu.fButton[i].Text,    //Textausgabe
  41.                                fActiveMenu.fButton[i].X,
  42.                               -fActiveMenu.fButton[i].Y,
  43.                                fActiveMenu.fButton[i].Width,
  44.                                fActiveMenu.fButton[i].Height,
  45.                                TS_ALIGN_CENTER);
  46.           glPopMatrix;
  47.         end;
  48.       fMenuFont.SetColor(0.7,0.7,0.7,1);        //FontColor setzen
  49.       fMenuFont.TextOut('TEST',0,-2,5,1,TS_ALIGN_CENTER);  //Textausgabe, hier liegt der fehler...so gehts aber wenn ich z.b: "abc" ausgeb,
  50.                                                           //dann werden die farben der farbselektion wieder dunkler!
  51.     end;
  52. end;
  53.  
  54. function TMainMenu.Selected(Menu: TMenu): Integer;
  55. var PixelColor: record r,g,b,a: glFloat; end;
  56. var i,Max:Integer;
  57. var Width, Height: Real;
  58. begin
  59.   glClearColor(0,0,1,0);
  60.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  61.  
  62.   glMatrixMode(GL_PROJECTION);
  63.   glLoadIdentity;
  64.  
  65.   gluPerspective(45, Form1.ClientWidth/Form1.ClientHeight, NearClipping, FarClipping);
  66.  
  67.   glMatrixMode(GL_MODELVIEW);
  68.   glLoadIdentity;
  69.  
  70.   glTranslatef(0,0,-10);
  71.  
  72.   max := High(fActiveMenu.fButton);  //von 0 bis ButtonAnzahl-1
  73.   for i := 0 to Max do
  74.     begin
  75.       Width  := fActiveMenu.fButton[i].Width;  //Buttons rendern
  76.       Height := fActiveMenu.fButton[i].Height;
  77.       glPushMatrix;
  78.         glTranslatef(fActiveMenu.fButton[i].X,fActiveMenu.fButton[i].Y,0);
  79.         glBegin(GL_QUADS);
  80.           glColor4f(0,(i+1)/(max+1),0,1);    //Selektions-Farbe festlegen  
  81.           glVertex3f(-Width/2, Height/2, 0);
  82.           glVertex3f(-Width/2,-Height/2, 0);
  83.           glVertex3f( Width/2,-Height/2, 0);
  84.           glVertex3f( Width/2, Height/2, 0);
  85.         glEnd;
  86.  
  87.       glPopMatrix;
  88.     end;
  89.  
  90.  
  91.   //Buffer auslesen
  92.   glReadPixels(Mouse.CursorPos.X-Form1.Left,Form1.Height-(Mouse.CursorPos.Y-Form1.Top),1,1,GL_RED,GL_FLOAT,@PixelColor.r);
  93.   glReadPixels(Mouse.CursorPos.X-Form1.Left,Form1.Height-(Mouse.CursorPos.Y-Form1.Top),1,1,GL_GREEN,GL_FLOAT,@PixelColor.g);
  94.   glReadPixels(Mouse.CursorPos.X-Form1.Left,Form1.Height-(Mouse.CursorPos.Y-Form1.Top),1,1,GL_BLUE,GL_FLOAT,@PixelColor.b);
  95.   glReadPixels(Mouse.CursorPos.X-Form1.Left,Form1.Height-(Mouse.CursorPos.Y-Form1.Top),1,1,GL_ALPHA,GL_FLOAT,@PixelColor.a);
  96.  
  97.   if PixelColor.b > 0.5 then result := -1  //result berechnen
  98.                         else result := round(PixelColor.g*(Max+1))-1;
  99. end;
  100.  
  101. procedure TFont.TextOut(Text: String; X,Y,Width,Height: Single; Align: Cardinal);
  102. begin
  103.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  104.   glEnable(GL_BLEND);
  105.  
  106.   glPushMatrix;
  107.     glScalef(0.01,-0.01,0.01);
  108.     glColor4fv(@fColor);
  109.     tsSetParameteri(TS_ALIGN, Align);
  110.     tsTextBeginBlock(round((X*100)-(Width*50)),
  111.                      round((Y*100)-(Height*50)),
  112.                      round(Width*100),
  113.                      round(Height*100),
  114.                      TS_BLOCKFLAG_WORD_WRAP);
  115.       tsFontBind(fFontID);
  116.       tsTextOutA(PAnsiChar(Text));
  117.     tsTextEndBlock;
  118.   glPopMatrix;
  119.  
  120.   glDisable(GL_BLEND);
  121. end;
  122.  
  123. constructor TFont.Create(FontContextID: tsContextID; FontFileName: String; FontWidth: Integer; Style: Cardinal);
  124. begin
  125.   inherited Create;
  126.  
  127.   fColor[0] := 0;
  128.   fColor[1] := 0;
  129.   fColor[2] := 0;
  130.   fColor[3] := 1;
  131.  
  132.   fFileName := FontFileName;
  133.   fWidth    := FontWidth;
  134.   fStyle    := Style;
  135.  
  136.   tsContextBind(FontContextID);
  137.  
  138.   tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL); CheckError;
  139.   tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI); CheckError;
  140.   tsFontCreateCreator(pAnsiChar(fFileName), fWidth, fStyle, TS_DEFAULT, TS_DEFAULT, @fFontID); CheckError;
  141.   tsPostAddShadow4f(1,0,0,1,1,1,0);
  142. end;


Wenn Code fehlt oder wenn ihr noch Bilder braucht sagt bescheid...

MfG & Thx Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2008 14:21 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Die Farbselektion ist normalerweise ein neuer Renderschritt, da du dann andere Farben nehmen kannst.
Somit lässt du im Renderschritt die Schrift und sonstige Texturen weg.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2008 16:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hab ich doch gemacht, wird bloß im normalen Renderschritt aufgerufen (ich weiß is n bisl blöd).
Auf jedenfall wird erst alles gelöscht, dann kommt die Farbselektion und dann wird nochma alles gelöscht und die normale Szene wird gerendert, und am Ende ausgegeben.

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 06, 2008 15:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Keine Ahnung ob du das Problem immer noch hast. Aber ich hoffe du denkst daran, dass die Texte durch Texturen erstellt werden und sobald der Text gerendert wurde bleiben die Texturen weiterhin gebunden und aktiv. Das kann unter Umständen deine Farben verändern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 17, 2008 15:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

hab'sch net dran gedacht^^
hab jetzt nach der Textausgabe glBindTexture(GL_TEXTURE_2D,0); aufgerufen und siehe da: es geht xD
DANKE!

MfG Bergmann.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]