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

Aktuelle Zeit: Fr Jul 18, 2025 04:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Blackscreen bei einigen PCs
BeitragVerfasst: Mi Jan 25, 2006 08:01 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Hi @all,

ich habe mal wieder ein Problem was ich nicht nach voll ziehen kann. Und zwar will ich Sound-Wiedergabe mit Hilfe der bass.dll grafisch darstellen und OpenGL darstellen. Unter meinen 3 Testrechner funktionierte alles tadellos (ein 95-Rechner, ein XP-Home und ein XP-Prof.-Rechner). Allerdings habe ich später von 2 anderen die Rückmeldung bekommen, dass die nur einen schwarzen Bildschirm haben (bei einem anderem wieerum funktioniert es, flackerte jedoch, was bei meinen ganzen Testsystemen nicht der Fall war*). Woran könnte es liegen (Musikdatei ist vorhanden)? Und was könnte ich noch alles verbessern?

Code:
  1. unit VisualisierungsForm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms,
  7.   Dialogs, dglOpenGL, ExtCtrls, StdCtrls, Bass, Math;
  8.  
  9. type
  10.   TGLForm = class(TForm)
  11.     Timer1: TTimer;
  12.     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  13.       Shift: TShiftState; X, Y: Integer);
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  17.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  18.   private
  19.     { Private-Deklarationen }
  20.   public
  21.  
  22.   end;
  23.  
  24. type
  25.   TFFTData = array [0..4095] of Single;
  26.  
  27. type
  28.   TWaveData = array [ 0..4095] of DWORD;
  29.  
  30. var
  31.   Form1: TGLForm;
  32.   Channel: DWORD;
  33.   FallOfFFTData: array[0..4095] of Single;
  34.   PeacHighFacor: Integer=15;
  35.   PeacNumber: Integer=1024;
  36.   VisKind: Byte;
  37.   FontBase: GLuint;
  38.   RC: HGLRC;
  39.   DC: HDC;
  40.   Time: Cardinal=0;
  41.   Count: Cardinal=0;
  42.  
  43. const
  44.   Dateinamen='Test.mp3';
  45.  
  46. implementation
  47.   uses Textausgabe;
  48.  
  49. {$R *.dfm}
  50.  
  51. procedure TGLForm.FormDestroy(Sender: TObject);
  52. begin
  53.   DeactivateRenderingContext;
  54.   wglDeleteContext(RC);
  55.   ReleaseDC(Handle, DC);
  56. end;
  57.  
  58. procedure TGLForm.FormClose(Sender: TObject; var Action: TCloseAction);
  59. begin
  60.   Bass_Free;
  61. end;
  62.  
  63. procedure Draw;
  64. var
  65.   FFTData: TFFTData;
  66.   WaveData: TWaveData;
  67.   i: integer;
  68.   PeacHigh: Single;
  69.   PeacPartNumber: Integer;
  70.   R, L, R2, L2: SmallInt;
  71. begin
  72.   glMatrixMode(GL_PROJECTION);
  73.   glLoadIdentity;
  74.   glViewPort(0, 0, Form1.Width, Form1.Height);
  75.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  76.   glOrtho(0, 0, Form1.Width, Form1.Height, 0, 0);
  77.   if BASS_ChannelIsActive(Channel)<>BASS_ACTIVE_PLAYING then
  78.   begin
  79.     Channel:=BASS_StreamCreateFile(FALSE, PChar(DateiNamen), 0, 0, 0);
  80.     BASS_ChannelPlay(Channel, true);
  81.   end;
  82.   case VisKind of
  83.      0: begin
  84.           BASS_ChannelGetData(Channel, @FFTData, BASS_DATA_FFT4096);
  85.           PeacPartNumber:=PeacNumber div 2;
  86.           glBegin(GL_QUADS);
  87.           for i:=0 to PeacNumber do
  88.           begin
  89.             PeacHigh:=Abs(FFTData[i]*PeacHighFacor);
  90.             if PeacHigh>2 then PeacHigh:=2;
  91.             if PeacHigh>FallOfFFTData[i] then FallOfFFTData[i]:=PeacHigh
  92.                                          else FallOfFFTData[i]:=FallOfFFTData[i]-0.008;
  93.             if FallOfFFTData[i]<0 then FallOfFFTData[i]:=0;
  94.  
  95.             //Balken
  96.             glColor3f(0, 0, 1);
  97.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0);
  98.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0);
  99.             glColor3f(1, 0, 1);
  100.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+PeacHigh);
  101.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+PeacHigh);
  102.  
  103.             //Punkt
  104.             glColor3f(1, 0, 0);
  105.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+FallOfFFTData[i]);
  106.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+FallOfFFTData[i]);
  107.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+FallOfFFTData[i]+(1/PeacPartNumber));
  108.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+FallOfFFTData[i]+(1/PeacPartNumber));
  109.           end;
  110.           glEnd;
  111.         end;
  112.      1: begin
  113.           BASS_ChannelGetData(Channel, @FFTData, BASS_DATA_FFT4096);
  114.           PeacPartNumber:=PeacNumber div 2;
  115.           glBegin(GL_LINE_STRIP);
  116.           for i:=0 to PeacNumber do
  117.           begin
  118.             PeacHigh:=Abs(FFTData[i]*PeacHighFacor);
  119.             if PeacHigh>2 then PeacHigh:=2;
  120.             if PeacHigh>FallOfFFTData[i] then FallOfFFTData[i]:=PeacHigh
  121.                                          else FallOfFFTData[i]:=FallOfFFTData[i]-0.008;
  122.             if FallOfFFTData[i]<0 then FallOfFFTData[i]:=0;
  123.  
  124.             //Balken
  125.             glColor3f(0, 1, 0);
  126.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+PeacHigh);
  127.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+PeacHigh);
  128.  
  129.           end;
  130.           glEnd;
  131.         end;
  132.      {2: begin
  133.           BASS_ChannelGetData(Channel, @WaveData, PeacNumber*4);
  134.           PeacPartNumber:=PeacNumber div 2;
  135.           glBegin(GL_LINE_STRIP);
  136.           for i:=0 to PeacNumber-1 do
  137.           begin
  138.             R:=SmallInt(LoWord(WaveData[i]));
  139.             L:=SmallInt(HiWord(WaveData[i]));
  140.             if abs(PeacHigh)>1 then PeacHigh:=Sign(PeacHigh);
  141.             //Balken
  142.             glColor3f(0, 0, 1);
  143.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), 0);
  144.             glVertex2d(-1.0+(i/PeacPartNumber)      , 0);
  145.             glColor3f(1, 0, 1);
  146.             glVertex2d(-1.0+(i/PeacPartNumber)      , Trunc(((R + L) / (2 * 65535))*10));
  147.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), Trunc(((R + L) / (2 * 65535))*10));
  148.           end;
  149.           glEnd;
  150.         end;}
  151.   end;
  152.   inc(Count);
  153.   if Time+500<GetCurrentTime then
  154.   begin
  155.     FPS:=round(Count/(GetCurrentTime-Time)*1000);
  156.     Time:=GetCurrentTime;
  157.     Count:=0;
  158.   end;
  159.   ShowText;
  160.   SwapBuffers(DC);
  161. end;
  162.  
  163. procedure TGLForm.OnIdle(Sender: TObject; var Done: Boolean);
  164. begin
  165.   Draw;
  166.   Done:=false
  167. end;
  168.  
  169. procedure TGLForm.FormCreate(Sender: TObject);
  170. begin
  171.   ShowWindow(Form1.Handle, SW_MAXIMIZE);
  172.   Form1.BorderStyle:=bsNone;
  173.   FillChar(FallOfFFTData[0], 4096, 0);
  174.  
  175.   InitOpenGL;
  176.   DC:=GetDC(Handle);
  177.   RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  178.   ActivateRenderingContext(DC, RC);
  179.   glDepthFunc(GL_NEVER);
  180.   glClearColor(0,0,0,0);
  181.   BuildFont('Times New Roman');
  182.   BASS_Init(-1, 44100, 0, Application.Handle, nil);
  183.   VisKind:=0;
  184.   Application.OnIdle:=OnIdle;
  185. end;
  186.  
  187. procedure TGLForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  188.   Shift: TShiftState; X, Y: Integer);
  189. begin
  190.   inc(VisKind);
  191.   if VisKind>1 then VisKind:=0
  192. end;
  193.  
  194. end.


Code:
  1. unit Textausgabe;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms,
  7.   Dialogs, dglOpenGL, ExtCtrls, StdCtrls, Bass, Math, VisualisierungsForm;
  8.  
  9. var
  10.   FPS: Byte=0;
  11.  
  12. procedure BuildFont(pFontName : String);
  13. procedure ShowText;
  14.  
  15. implementation
  16.  
  17. procedure BuildFont(pFontName : String);
  18. var
  19.   Font: HFONT;
  20. begin
  21.   FontBase:=glGenLists(96);
  22.   Font:=CreateFont(16, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  23.                    ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(pFontName));
  24.   SelectObject(DC, Font);
  25.   wglUseFontBitmaps(DC, 0, 256, FontBase);
  26.   DeleteObject(Font)
  27. end;
  28.  
  29. procedure PrintText(pX,pY : Integer; const pText : String);
  30. begin
  31.   if (pText='') then exit;
  32.   glPushAttrib(GL_LIST_BIT);
  33.     glRasterPos2i(pX, pY);
  34.     glListBase(FontBase);
  35.     glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  36.   glPopAttrib;
  37. end;
  38.  
  39.  
  40. procedure ShowText;
  41. begin
  42.   glMatrixMode(GL_PROJECTION);
  43.   glLoadIdentity;
  44.   glOrtho(0,Form1.Width,Form1.Height,0, -1,1);
  45.  
  46.   glMatrixMode(GL_MODELVIEW);
  47.   glLoadIdentity;
  48.   PrintText(5,15, IntToStr(FPS)+' fps');
  49. end;
  50.  
  51. end.


Code:
  1. program Visualisierungstest;
  2.  
  3. uses
  4.   SysUtils,
  5.   Forms,
  6.   VisualisierungsForm in 'VisualisierungsForm.pas',
  7.   Textausgabe in 'Textausgabe.pas';
  8.  
  9. {$R *.res}
  10.  
  11. begin
  12.   if not FileExists(Dateinamen) then Application.MessageBox('Die Datei "'+Dateinamen+'" wurde nicht gefunden', 'Fehler', 16)
  13.   else
  14.   begin
  15.     Application.Initialize;
  16.     Application.CreateForm(TGLForm, Form1);
  17.   Application.Run;
  18.   end  
  19. end.


Und warum kann ich in der Prozesur ShowText die ersten3 Zeilen nicht entfernen (Schrift fehlt dann)? Eigentlich müsste es ja gehen, da ich vor der anderen Zeichenroutine das gleiche auch schon stehen habe... und es damit in meinen augen doppelt wäre.

*(95-Rechner konnte es nur stockend wieder geben, da die GraKa, keine OpenGL-Unterstützung besitzt).

mfg
Heiko


Zuletzt geändert von SunBlack am Fr Feb 10, 2006 16:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 25, 2006 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Für Alle die nicht ab und an im Delphi Forum unterwegs sind. Hier gibt auch einen Teil der Geschichte.

Zitat:
@glOrtho: Geht irgendwie nicht, sprich die Textausgabe in der anderen Unit funktioniert dann nicht mehr. Wieso muss denn sowieso zNear & zFear (-)1 haben und nicht 0 wie der Rest?

Also ein glOrtho mit zNear und zFar = 0 halte ich für gefährlich. Da du insgesammt eine Reichweite von 0 hast. Auch wenn alle deine Werte eine Tiefe von 0 haben würde ich sagen, dass du -1 und 1 benutzen solltest. Also genau so wie es bei dem Text zeichnen der Fall ist. Da könntest du dann aber das glOrtho UND das Löschen der Projectionsmatrix weglassen. Da in dem ShowText zu erst die Projektion gelöscht wird und anschließen wieder gesetzt wird. Wenn die aber sowieso gleich bleiben soll, dann kannst du sie auch weglassen.

Was ich auch gesehen habe war deine Tiefenfunktion. Es wäre sinnvoller, wenn du anstelle einer Tiefenfunktion (GL_NEVER) die niemals erfüllt wird lieber eine benutzt die Immer erfüllt wird. Also GL_ALWAYS oder du deaktivierst den Test am Besten. Man weiß auch nie ob der evtl. auf der ein oder anderen Implementation von Hause aus gesetzt ist. Das kann auch dazu führen, dass alles schwarz ist, da dann nichts durch den Tiefentest gerutscht ist.

Normal genügt es vollkommen, wenn du in dem OnResize deines Formulars den ViewPort und die Projektion (glOrtho) setzt. Beim Render brauchst du dann nur noch den Framebuffer löschen und kannst gleich loslegen. So habe ich das in meinem Project VU Meter auch gemacht. Also nur im OnResize gesetzt und beim Rendern hatte ich dann weder mit meinem Daten noch mit meiner Schrift Probleme. Und bisher habe ich noch keine Klagen gehört. Evtl solltest du da mal in die Quellen schauen. Wobei ich da aber noch einen Tiefentest an habe. Was eigentlich nicht nötig wäre.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 10, 2006 16:28 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
ICh habe es jetzt mal mit deinem Grundgerüst probiert, allerdings habe ich da schon bei mir Probleme ;). Und zwar funktioniert gl_Quads nicht mehr (gl_Quad_Strip funktioniert aber und andere auch):

Code:
  1. unit VisualisierungsForm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms,
  7.   Dialogs, dglOpenGL, ExtCtrls, StdCtrls, Bass, Math, glBitmap, glText;
  8.  
  9. type
  10.   TGLForm = class(TForm)
  11.     procedure FormResize(Sender: TObject);
  12.     procedure FormShow(Sender: TObject);
  13.     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  14.       Shift: TShiftState; X, Y: Integer);
  15.     procedure FormCreate(Sender: TObject);
  16.     procedure FormDestroy(Sender: TObject);
  17.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  18.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  19.   protected
  20.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  21.   private
  22.     { Private-Deklarationen }
  23.   public
  24.  
  25.   end;
  26.  
  27. type
  28.   TFFTData = array [0..2047] of Single;
  29.  
  30. type
  31.   TWaveData = array [ 0..1023] of DWORD;
  32.  
  33. var
  34.   Form1: TGLForm;
  35.   Channel: DWORD;
  36.   FallOfFFTData: array[0..2047] of Single;
  37.   PeacHighFacor: Integer=15;
  38.   PeacNumber: Integer=1024;
  39.   VisKind: Byte;
  40.   FontBase: GLuint;
  41.   FRC: HGLRC;
  42.   FDC: HDC;
  43.   Time: Cardinal=0;
  44.   Count: Cardinal=0;
  45.   FFont: TglBitmapText;
  46.   FInitialized: Boolean;
  47.  
  48. const
  49.   Dateinamen='Test.mp3';
  50.  
  51. implementation
  52.  
  53. {$R *.dfm}
  54.  
  55. procedure TGLForm.FormDestroy(Sender: TObject);
  56. begin
  57.   DeactivateRenderingContext;
  58.   wglDeleteContext(FRC);
  59.   ReleaseDC(Handle, FDC);
  60. end;
  61.  
  62. procedure TGLForm.FormClose(Sender: TObject; var Action: TCloseAction);
  63. begin
  64.   Bass_Free;
  65. end;
  66.  
  67. procedure Draw;
  68. var
  69.   FFTData: TFFTData;
  70.   i: integer;
  71.   PeacHigh: Single;
  72.   PeacPartNumber: Integer;
  73. begin
  74.   glMatrixMode(GL_PROJECTION);
  75.   glLoadIdentity;
  76.   glViewPort(0, 0, Form1.Width, Form1.Height);
  77.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  78.   glOrtho(0, 0, Form1.Width, Form1.Height, -1, 1);
  79.   if BASS_ChannelIsActive(Channel)<>BASS_ACTIVE_PLAYING then
  80.   begin
  81.     Channel:=BASS_StreamCreateFile(FALSE, PChar(DateiNamen), 0, 0, 0);
  82.     BASS_ChannelPlay(Channel, true);
  83.   end;
  84.   case VisKind of
  85.      0: begin
  86.           BASS_ChannelGetData(Channel, @FFTData, BASS_DATA_FFT4096);
  87.           PeacPartNumber:=PeacNumber div 2;
  88.  
  89.           glBegin(GL_QUADS);
  90.           for i:=0 to PeacNumber do
  91.           begin
  92.             PeacHigh:=Abs(FFTData[i]*PeacHighFacor);
  93.             if PeacHigh>2 then PeacHigh:=2;
  94.             if PeacHigh>FallOfFFTData[i] then FallOfFFTData[i]:=PeacHigh
  95.                                          else FallOfFFTData[i]:=FallOfFFTData[i]-0.008;
  96.             if FallOfFFTData[i]<0 then FallOfFFTData[i]:=0;
  97.  
  98.             //Balken
  99.             glColor3f(0, 0, 1);
  100.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0);
  101.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0);
  102.             glColor3f(1, 0, 1);
  103.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+PeacHigh);
  104.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+PeacHigh);
  105.  
  106.             //Punkt
  107.             glColor3f(1, 0, 0);
  108.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+FallOfFFTData[i]);
  109.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+FallOfFFTData[i]);
  110.             glVertex2d(-1.0+(i/PeacPartNumber)      , -1.0+FallOfFFTData[i]+(1/PeacPartNumber));
  111.             glVertex2d(-1.0+((i+0.5)/PeacPartNumber), -1.0+FallOfFFTData[i]+(1/PeacPartNumber));
  112.           end;
  113.           glEnd;
  114.         end;
  115.      1: begin
  116.           BASS_ChannelGetData(Channel, @FFTData, BASS_DATA_FFT4096);
  117.           PeacPartNumber:=PeacNumber div 2;
  118.           glBegin(GL_LINE_STRIP);
  119.           for i:=0 to PeacNumber do
  120.           begin
  121.             PeacHigh:=Abs(FFTData[i]*PeacHighFacor);
  122.             if PeacHigh>2 then PeacHigh:=2;
  123.             glColor3f(PeacHigh, 0, 1-PeacHigh/2);
  124.             glVertex2d(-1.0+(i/PeacPartNumber), -1.0+PeacHigh);
  125.           end;
  126.           glEnd;
  127.         end;
  128.   end;
  129.   inc(Count);
  130.   {if Time+500<GetCurrentTime then
  131.   begin
  132.     FPS:=round(Count/(GetCurrentTime-Time)*1000);
  133.     Time:=GetCurrentTime;
  134.     Count:=0;
  135.   end;
  136.   PrintText(5, 15, FloatToStr(FPS));}
  137.   SwapBuffers(FDC);
  138. end;
  139.  
  140. procedure TGLForm.OnIdle(Sender: TObject; var Done: Boolean);
  141. begin
  142.   Draw;
  143.   Done:=false
  144. end;
  145.  
  146. procedure TGLForm.FormCreate(Sender: TObject);
  147. begin
  148. {  ShowWindow(Form1.Handle, SW_MAXIMIZE);
  149.   Form1.BorderStyle:=bsNone;}
  150.   FillChar(FallOfFFTData[0], 4096, 0);
  151. end;
  152.  
  153. procedure TGLForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  154.   Shift: TShiftState; X, Y: Integer);
  155. begin
  156.   inc(VisKind);
  157.   if VisKind>1 then VisKind:=0
  158. end;
  159.  
  160. procedure TGLForm.FormShow(Sender: TObject);
  161. var
  162.   PixelFormat: Integer;
  163.   pfd: PIXELFORMATDESCRIPTOR;
  164. begin
  165.   InitOpenGL;
  166.  
  167.   // Pixelformatdescription leeren
  168.   ZeroMemory(@pfd, SizeOf(pfd));
  169.  
  170.   // pfd initialisieren
  171.   pfd.nSize:=SizeOf(PIXELFORMATDESCRIPTOR); // Die Größe vom pfd
  172.   pfd.nVersion:=1;                             // version
  173.   pfd.dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  174.   pfd.iPixelType:=PFD_TYPE_RGBA;                 // RGBA color format
  175.   pfd.cColorBits:=32;                            // Farbtiefe
  176.   pfd.cDepthBits:=16;                            // Tiefenbuffer
  177.  
  178.   FDC:=GetDC(Handle);
  179.  
  180.   // richtiges Pixelformat suchen
  181.   PixelFormat:=ChoosePixelFormat(FDC, @pfd);
  182.   if (PixelFormat=0) then begin
  183.     MessageBox(0, 'Unable to find a suitable pixel format', 'Error', MB_OK or MB_ICONERROR);
  184.     Exit;
  185.   end;
  186.  
  187.   DescribePixelFormat(FDC, PixelFormat, SizeOf(pfd), pfd);
  188.  
  189.   // Pixelformat auf den DC zuweisen
  190.   if (not SetPixelFormat(FDC, PixelFormat, @pfd)) then begin
  191.     MessageBox(0, 'Unable to set the pixel format', 'Error', MB_OK or MB_ICONERROR);
  192.     Exit;
  193.   end;
  194.  
  195.   // OpenGL Rendercontext setzen.
  196.   FRC:=wglCreateContext(FDC);
  197.   if (FRC=0) then begin
  198.     MessageBox(0, 'Unable to create an OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
  199.     Exit;
  200.   end;
  201.  
  202.   // Den Rendercontext auswählen
  203.   if (not wglMakeCurrent(FDC, FRC)) then begin
  204.     MessageBox(0, 'Unable to activate OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
  205.     Exit;
  206.   end;
  207.  
  208.   ReadExtensions;
  209.   ReadImplementationProperties;
  210.  
  211.   FInitialized:=True;
  212.  
  213.   FormResize(Self);
  214.  
  215.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
  216.     glDepthFunc(GL_LEQUAL);
  217.     glEnable(GL_DEPTH_TEST);
  218.     glEnable(GL_CULL_FACE);
  219.     glDepthMask(True);
  220.   glClearDepth(1);
  221.   glDisable(GL_BLEND);
  222.   glDisable(GL_ALPHA_TEST);
  223.   glEnable(GL_COLOR_MATERIAL);
  224.  
  225.   FFont:=TglBitmapText.Create(FDC);
  226.   FFont.Font.Name:='Times New Roman';
  227.   FFont.Font.Size:=12;
  228.   FFont.BuildFont;
  229.  
  230.   BASS_Init(-1, 44100, 0, Application.Handle, nil);
  231.   VisKind:=0;
  232.   Application.OnIdle:=OnIdle;
  233. end;
  234.  
  235. procedure TGLForm.FormResize(Sender: TObject);
  236. var
  237.   VP: array[0..1] of Integer;
  238.   newWidth, newHeight: Integer;
  239. begin
  240.   if (FInitialized) then
  241.   begin
  242.     // Set the viewport for the OpenGL window
  243.     glGetIntegerv(GL_MAX_VIEWPORT_DIMS, @VP);
  244.  
  245.     // Dont make the Window to large
  246.     newWidth:=Min(VP[0], ClientWidth);
  247.     newHeight:=Min(VP[1], ClientHeight);
  248.  
  249.     // Viewport von OpenGL setzen
  250.     glViewport((ClientWidth div 2)-(newWidth div 2),
  251.                (ClientHeight div 2)-(newHeight div 2),
  252.                 newWidth,
  253.                 newHeight);
  254.  
  255.     // Projection matrix
  256.     glMatrixMode(GL_PROJECTION);
  257.     glLoadIdentity();
  258.  
  259.     // Perspektive setzen
  260.     glOrtho(0, ClientWidth, ClientHeight, 0, -1, 1);
  261.  
  262.     // Modelview Matrix
  263.     glMatrixMode(GL_MODELVIEW);
  264.     glLoadIdentity();
  265.   end;
  266. end;
  267.  
  268. procedure TGLForm.WMEraseBkgnd(var Message: TWMEraseBkgnd);
  269. begin
  270.   Message.Result:=Integer(True);
  271. end;
  272.  
  273. end.
[/code]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 10, 2006 18:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Finde es merkwürdig, da gl_quads ja nun mal direkt aus der dglopengl.pas kommt. Und das schon seit OpenGL1.0.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 10, 2006 19:33 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Finde ich auch. Das ist auch das erste mal, dass ich so ein Problem habe bezüglich von Körpern/Flächen :(.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 11, 2006 17:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was soll denn nicht gehen? Kommt eine Fehlermeldung, oder sieht was blöd aus, oder was? Eventuell ist die reihenfolge der Coordinaten fehlerhaft (Es gibt da nämlich einen beträchtlichen unterschied zwischen QuadStrips und Quads wie man bei glBegin im Wiki sehen kann.)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 11, 2006 18:26 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Bei glQuads habe ich eine leer schwarze Fläche. Und an der Reihenfolge liegt es auch nicht aus mehreren Gründen ;).
1. die gleiche Koodinatenreihenfolge hat auch schon einmal funktioniert (beim altem Grundgerüst) und ich habe daran ja nichts verändert
2. ist die Reihenfolge auch durchdacht, da ich den Anfängerfehler des nicht durchdenkens der Reihenfolge schon lange nicht mehr mache ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 19, 2006 20:02 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Ich habe das Grundgerüst nocheinmal neu übernommen (für ein anderes Projekt). Dort geht es jetzt ;).


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.015s | 16 Queries | GZIP : On ]