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

Aktuelle Zeit: Fr Jul 18, 2025 16:33

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Mär 26, 2006 14:39 
Offline
DGL Member

Registriert: So Mär 26, 2006 14:34
Beiträge: 2
Wohnort: Lübeck
Hallo,
ich hatte zuerst ein OpenGL teil in Delphi geschrieben der auch Lief und habe hinterher die Form mit einem Pannel und einigen Buttons verändert und den Timer auf dem ich Rendere ebenso auf nen ButtonClick gelegt. Jetzt wird die Form zwar Schwarz aber er zeichnet die Linien nicht ein. Ich finde den Fehler einfach nicht, villeicht kann mir ja einer von euch weiter helfen, wäre echt klasse.

LG Seele

Code:
  1.  
  2. unit xy;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, opengl,
  8.   ExtCtrls, Buttons, StdCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     GroupBox1: TGroupBox;
  13.     Edit1: TEdit;
  14.     Label1: TLabel;
  15.     Label2: TLabel;
  16.     Label3: TLabel;
  17.     Button1: TButton;
  18.     Button2: TButton;
  19.     Button3: TButton;
  20.     Image1: TImage;
  21.     Label4: TLabel;
  22.     Timer1: TTimer;
  23.     Edit2: TEdit;
  24.     Edit3: TEdit;
  25.     procedure FormCreate(Sender: TObject);
  26.     procedure FormDestroy(Sender: TObject);
  27.     procedure FormResize(Sender: TObject);
  28.     procedure Button1Click(Sender: TObject);
  29.     procedure Button3Click(Sender: TObject);
  30.     procedure Timer1Timer(Sender: TObject);
  31.  
  32.   private
  33.     { Private-Deklarationen }
  34.    myDC : HDC;
  35.    myRC : HGLRC;
  36.    myPalette : HPALETTE;
  37.    procedure SetupPixelFormat;
  38.   public
  39.     { Public-Deklarationen }
  40.   end;
  41.  
  42. var
  43.   Form1: TForm1;
  44.   mode : integer = 1;
  45.  
  46. implementation
  47.  
  48. {$R *.DFM}
  49. procedure TForm1.SetupPixelFormat;
  50. var    hHeap: THandle;
  51.   nColors, i: Integer;
  52.   lpPalette : PLogPalette;
  53.   byRedMask, byGreenMask, byBlueMask: Byte;
  54.   nPixelFormat: Integer;
  55.   pfd: TPixelFormatDescriptor;
  56. begin
  57.   FillChar(pfd, SizeOf(pfd), 0);
  58.   with pfd do begin
  59.     nSize     := sizeof(pfd);               // Länge der pfd-Struktur
  60.     nVersion  := 1;                         // Version
  61.     dwFlags   := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
  62.                  PFD_DOUBLEBUFFER;          // Flags
  63.     iPixelType:= PFD_TYPE_RGBA;             // RGBA Pixel Type
  64.     cColorBits:= 24;                        // 24-bit color
  65.     cDepthBits:= 32;                        // 32-bit depth buffer
  66.     iLayerType:= PFD_MAIN_PLANE;            // Layer Type
  67.   end;
  68.   nPixelFormat:= ChoosePixelFormat(myDC, @pfd);
  69.   SetPixelFormat(myDC, nPixelFormat, @pfd);
  70.                                             // Farbpalettenoptimierung wenn erforderlich
  71.   DescribePixelFormat(myDC, nPixelFormat,
  72.                       sizeof(TPixelFormatDescriptor),pfd);
  73.   if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin
  74.     nColors  := 1 shl pfd.cColorBits;
  75.     hHeap    := GetProcessHeap;
  76.     lpPalette:= HeapAlloc
  77.        (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry)));
  78.     lpPalette^.palVersion := $300;
  79.     lpPalette^.palNumEntries := nColors;
  80.     byRedMask  := (1 shl pfd.cRedBits) - 1;
  81.     byGreenMask:= (1 shl pfd.cGreenBits) - 1;
  82.     byBlueMask := (1 shl pfd.cBlueBits) - 1;
  83.     for i := 0 to nColors - 1 do begin
  84.       lpPalette^.palPalEntry[i].peRed  :=
  85.         (((i shr pfd.cRedShift)  and byRedMask)  *255)DIV byRedMask;
  86.       lpPalette^.palPalEntry[i].peGreen:=
  87.         (((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask;
  88.       lpPalette^.palPalEntry[i].peBlue :=
  89.         (((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask;
  90.       lpPalette^.palPalEntry[i].peFlags:= 0;
  91.     end;
  92.     myPalette:= CreatePalette(lpPalette^);
  93.     HeapFree(hHeap, 0, lpPalette);
  94.     if (myPalette <> 0) then begin
  95.       SelectPalette(myDC, myPalette, False);
  96.       RealizePalette(myDC);
  97.     end;
  98.   end;
  99. end;
  100.  
  101. procedure render;
  102. begin
  103.  
  104.  GlLineWidth(2);
  105.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farb und Tiefenpuffer löschen
  106.  glLoadIdentity;                         // World Matrix zurücksetzen
  107.  
  108. //glTranslatef(-1.5, 0,-6);
  109.  
  110.  glBegin(gl_lines);
  111.  glcolor3f(1,1,1);
  112.  glvertex3f(-10,0,-2);
  113.  glcolor3f(1,1,1);
  114.  glvertex3f(10,0,-2);
  115.  glcolor3f(1,1,1);
  116.  glvertex3f(0,-10,-2);
  117.  glcolor3f(1,1,1);
  118.  glvertex3f(0,10,-2);
  119.  glEnd;
  120.  
  121.  
  122.  SwapBuffers(form1.myDC);
  123. end;
  124.  
  125. procedure TForm1.FormCreate(Sender: TObject);
  126. begin
  127. form1.myDC:= GetDC(Handle);
  128. SetupPixelFormat;
  129. myRC:= wglCreateContext(myDC);
  130. wglMakeCurrent(myDC, myRC);
  131. glEnable(GL_DEPTH_TEST);
  132. glLoadIdentity;
  133. end;
  134.  
  135.  
  136. procedure TForm1.FormDestroy(Sender: TObject);
  137. begin
  138. wglmakecurrent(0,0);
  139. wgldeletecontext(mydc);
  140. releasedc(handle,mydc);
  141. end;
  142.  
  143. procedure TForm1.FormResize(Sender: TObject);
  144. begin
  145. glViewport(0, 0, Width, Height);    // Setzt den Viewport für das OpenGL Fenster
  146. glMatrixMode(GL_PROJECTION);        // Matrix Mode auf Projection setzen
  147. glLoadIdentity();                   // Reset View
  148. gluPerspective(45.0, Width/Height, 1, 100.0);  // Perspektive den neuen Maßen anpassen.
  149. glMatrixMode(GL_MODELVIEW);         // Zurück zur Modelview Matrix
  150. glLoadIdentity();
  151. end;
  152.  
  153.  
  154. procedure TForm1.Button1Click(Sender: TObject);
  155. begin
  156. Timer1.Enabled:=True;
  157. Label4.Visible:=True;
  158.  
  159. Image1.Canvas.MoveTo(51,5);
  160. Image1.Canvas.LineTo(51,100);
  161. Image1.Canvas.MoveTo(5,51);
  162. Image1.Canvas.LineTo(100,51);
  163. Image1.Canvas.MoveTo(80,48);
  164. Image1.Canvas.LineTo(80,55);
  165. Image1.Canvas.MoveTo(25,48);
  166. Image1.Canvas.LineTo(25,55);
  167. Image1.Canvas.MoveTo(48,80);
  168. Image1.Canvas.LineTo(55,80);
  169. Image1.Canvas.MoveTo(48,25);
  170. Image1.Canvas.LineTo(55,25);
  171. Image1.Canvas.TextOut(75,57,edit2.text);
  172. Image1.Canvas.TextOut(20,57,'-'+edit2.text);
  173. Image1.Canvas.TextOut(57,75,'-'+edit3.text);
  174. Image1.Canvas.TextOut(57,20,edit3.text);
  175. Image1.Canvas.TextOut(53,53,'0');
  176.  
  177.  
  178. end;
  179.  
  180. procedure TForm1.Button3Click(Sender: TObject);
  181. begin
  182. Application.Terminate;
  183. end;
  184.  
  185. procedure TForm1.Timer1Timer(Sender: TObject);
  186. begin
  187. render;
  188. end;
  189.  
  190. end.
  191.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 27, 2006 10:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was machst du denn da? Wieso matscht du denn das schöne OGL mit nem Canvas zusammen? Linien kann man doch genausogut in OGL zeichnen (siehe glBegin ). Und wenns nur ist, weil du 2D brauchst gibts glOrtho.

Heißt soviel wie: vielleicht wehrt sich dein Prog ja zurecht. ;) Aber erzähl mal was du erreichen willst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 27, 2006 11:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was mir auch gerade aufgefallen ist. Im Resize benutzt die Width und Height. Wenn dein Fenster aber noch einen Rand und eine Titelleiste hat, dann solltest die besser ClientWidth und ClientHeight benutzen. Height ist gesammthöhe des Fensters. Also normal sollte man immer Client* benutzen, da es so flexibler ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 27, 2006 13:48 
Offline
DGL Member

Registriert: So Mär 26, 2006 14:34
Beiträge: 2
Wohnort: Lübeck
Also das ganze soll ein Koordinatenkreuz werden, wo später ein graf eingezeichnet werden soll, da ich in opengl nicht beschriften kann habe ich das in canvas gemacht mit einem kleinen fenster, weil da das beschriften sehr einfach ist.

ich habe nun auch ClientWhite/ClientHight benutzt, dennoch wird im eigentlich fenster die beiden Lines nicht angezeit... und das eine image mit dem canvas bmp drin dürfte daran doch wohl nicht schuld sein oder?

ich bin absolut ratlos...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 27, 2006 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also das ganze Canvasgedöhns lässte mal bitte weg. Beschriftungen etc sind in OpenGL sehr einfach. Also du solltest auf jeden Fall nur mit OpenGL zeichnen. Sonst flackert es oder sieht einfach nur doof aus.

Also ich habe eine schlechte Nachricht. Bei mir sind die Linien vorhanden. Setze mal testweise mittels glClearColor eine andere Farbe und schau mal ob er das überhaupt nimmt. kann jetzt so nämlich nichts offensichtlich Falsches finden.


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 » OpenGL


Wer ist online?

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