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

Aktuelle Zeit: Di Jul 22, 2025 05:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 09:15 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 09:07
Beiträge: 3
Hi,
erstmal bin ich neu hier, hoffe das ich das richtige forum dafür getroffen hab...

also ich habe mit der 4. Lektion von den TUTs auf delphigl.com ein Problem... ich habe irgendwo in meinem quelltext 'nen Fehler, weiß aber nicht wo ! Vielleicht könnte mir ja jemand helfen. Hier mein Quellcode


Code:
  1.  
  2.  
  3. {
  4. --==## VCL Template ##==--
  5. Source by: BlueToby
  6. Visit us: http://www.delphigl.com/
  7. }
  8. unit Unit1;
  9.  
  10. interface
  11.  
  12. uses
  13.   Windows, Messages, ExtCtrls, Classes, AppEvnts, Graphics, Controls, Forms, Dialogs,
  14.   OpenGL12, Glaux, Glu, Textures, Math, SysUtils;
  15.  
  16. type
  17.   TDemoForm = class(TForm)
  18.     ApplicationEvents: TApplicationEvents;
  19.     FramesTimer: TTimer;
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure SetPixelFormat;
  22.     procedure StartGl;
  23.     procedure SetupGL;
  24.     procedure FormShow(Sender: TObject);
  25.     procedure FormDestroy(Sender: TObject);
  26.     procedure FormResize(Sender: TObject);
  27.     procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  28.     procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  29.       Y: Integer);
  30.     procedure FramesTimerTimer(Sender: TObject);
  31.   private
  32.     { Private-Deklarationen }
  33.   public
  34.     { Public-Deklarationen }
  35.   end;
  36.  
  37. const
  38.   WinCaption = 'VCL Template '; // Der Titel unseres Fensters
  39.   NearClipping = 1; // Sollte immer >= 1 sein
  40.   FarClipping = 256; // Ab diesem Entfernung, werden deine Objekte nicht mehr dargestellt
  41.  
  42. var
  43.   DemoForm: TDemoForm;
  44.   IsOpenGLInit: Boolean;  // Fürs Init von OpenGL
  45.   RenderContext: HGLRC;   // OpenGL Rendering Context
  46.   Frames, Frame: Integer; // Frames fürs durchzählen, Fame zum Speichern
  47.   rx, ry, rz: integer;    // Rotationsvariablen
  48.   taste: char;            // tastendruck
  49. implementation
  50.  
  51. {$R *.DFM}
  52.  
  53. // Zeichenprozedur
  54. procedure TDemoForm.ApplicationEventsIdle(Sender: TObject;
  55.   var Done: Boolean);
  56.   var x:integer;
  57.       outrot:integer;
  58.       texture1: PTAUX_RGBImageRec;
  59.       tex: TGLuint;
  60.  
  61. begin
  62.   if not IsOpenGLInit then
  63.    exit;                        // Falls OpenGL noch nicht initialisiert ist, erstmal garnix tun
  64.   Done := false;                // Wichtig, damit immer was getan wird
  65.   inc(Frames, 1);               // Frames zählen
  66.  
  67.   glClearColor(0, 0, 0, 0.5);   // Löschen der Farbe
  68.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT); // Leeren des Speichers
  69.  
  70.  BEGIN;
  71.  
  72.   texture1 := auxDIBImageLoadA('./texture/wall.bmp');
  73.     glGenTextures(1, @tex);
  74.     glBindTexture(GL_TEXTURE_2D, tex);
  75.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_Linear);
  76.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_Linear);
  77.     glTexImage2D(GL_TEXTURE_2D, 0, 3,
  78.                         texture1^.sizeX, texture1^.sizeY, 0,
  79.                         GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  80.  
  81.  
  82.         IF NOT Assigned( texture1 ) THEN
  83.         BEGIN;
  84.          MessageBox(0,'Texturenpfad oder Dateiname falsch!',
  85.                         'Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
  86.             Halt;
  87. END;
  88.  
  89. glloadidentity;
  90. gltranslatef(0,0,-20);
  91. glBindTexture(GL_TEXTURE_2D, tex);
  92.   x:=x+1;
  93.   outrot:=outrot+2;
  94.  
  95. glPushMatrix;
  96.      glTranslatef(0,sin(x/50),0);
  97.      glRotatef(x,0,1,0);
  98.      glMatrixMode(GL_TEXTURE);
  99.      glloadidentity;
  100.      glColor3f(1,1,1);
  101.      glTranslatef(0,-(x/100),0);
  102.      glMatrixMode(GL_MODELVIEW);
  103.  
  104.     glBegin(GL_TRIANGLES);
  105.      glVertex3f(-1,-1,1);
  106.      glVertex3f(0,1,0);
  107.      glVertex3f(1,-1,1);
  108.      glEnd();
  109.  
  110.      glBegin(GL_TRIANGLES);
  111.      glTexCoord2f(0,0);glVertex3f(1,-1,1);
  112.      glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  113.      glTexCoord2f(1,0);glVertex3f(1,-1,-1);
  114.      glEnd();
  115.  
  116.      glBegin(GL_TRIANGLES);
  117.      glTexCoord2f(0,0);glVertex3f(1,-1,-1);
  118.      glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  119.      glTexCoord2f(1,0);glVertex3f(-1,-1,-1);
  120.      glEnd();
  121.  
  122.      glBegin(GL_TRIANGLES);
  123.      glTexCoord2f(0,0);glVertex3f(-1,-1,-1);
  124.      glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  125.      glTexCoord2f(1,0);glVertex3f(-1,-1,1);
  126.      glEnd();
  127.  
  128.      glbegin(GL_QUADS);
  129.       glvertex3f(-1,-1,1);
  130.       glvertex3f(1,-1,1);
  131.       glvertex3f(1,-1,-1);
  132.       glvertex3f(-1,-1,-1);
  133.      glend();
  134.  
  135. glPopMatrix;
  136.  
  137. glEnable(GL_BLEND);
  138. glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  139. glDisable(GL_DEPTH_TEST);
  140.  
  141.  
  142. glPushMatrix;
  143.     glRotatef(x,0,1,0);
  144.     glScalef(2,2,2);
  145.  
  146.  &nbsp; &nbsp;IF Sin(x/50)<0.9 THEN glColor4f(1,1,1,0.4)
  147.  &nbsp; &nbsp;ELSE glColor4f(1,0.3,0.3,0.5);
  148.  
  149.  &nbsp; &nbsp;glBegin(GL_TRIANGLES);
  150.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(-1,-1,1);
  151.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  152.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(1,-1,1);
  153.  &nbsp; &nbsp; glEnd();
  154.  
  155.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  156.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,1);
  157.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  158.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(1,-1,-1);
  159.  &nbsp; &nbsp; glEnd();
  160.  
  161.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  162.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,-1);
  163.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  164.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,-1);
  165.  &nbsp; &nbsp; glEnd();
  166.  
  167.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  168.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(-1,-1,-1);
  169.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  170.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,1);
  171.  &nbsp; &nbsp; glEnd();
  172.  
  173.  &nbsp; &nbsp; glbegin(GL_QUADS);
  174.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,1);
  175.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,1);
  176.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,-1);
  177.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,-1);
  178.  &nbsp; &nbsp; glend();
  179.  
  180. glPopMatrix;
  181.  
  182.  &nbsp; &nbsp;// Blaue äußere Pyramide
  183.  &nbsp; &nbsp;glPushMatrix;
  184.  &nbsp; &nbsp; &nbsp; &nbsp; glColor4f(0.3,0.3,0.8,0.8);
  185.  &nbsp; &nbsp; &nbsp; &nbsp; glRotatef(outrot,0,1,0);
  186.  &nbsp; &nbsp; &nbsp; &nbsp; glTranslatef(5,0,0);
  187.  &nbsp; &nbsp; &nbsp; &nbsp; glRotatef(outRot,-0.5,1,0);
  188.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  189.  &nbsp; &nbsp; glVertex3f(-1,-1,1);
  190.  &nbsp; &nbsp; glVertex3f(0,1,0);
  191.  &nbsp; &nbsp; glVertex3f(1,-1,1);
  192.  &nbsp; &nbsp; glEnd();
  193.  
  194.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  195.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,1);
  196.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  197.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(1,-1,-1);
  198.  &nbsp; &nbsp; glEnd();
  199.  
  200.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  201.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,-1);
  202.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  203.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,-1);
  204.  &nbsp; &nbsp; glEnd();
  205.  
  206.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  207.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(-1,-1,-1);
  208.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  209.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,1);
  210.  &nbsp; &nbsp; glEnd();
  211.  
  212.  &nbsp; &nbsp; glbegin(GL_QUADS);
  213.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,1);
  214.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,1);
  215.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,-1);
  216.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,-1);
  217.  &nbsp; &nbsp; glend();
  218.  &nbsp; &nbsp;glPopMatrix;
  219.  
  220.  &nbsp; &nbsp;// Grüne äußere Pyramide
  221.  &nbsp; &nbsp;glPushMatrix;
  222.  &nbsp; &nbsp; &nbsp; &nbsp; glColor4f(0.3,0.8,0.3,0.8);
  223.  &nbsp; &nbsp; &nbsp; &nbsp; glRotatef(outrot,0,1,0);
  224.  &nbsp; &nbsp; &nbsp; &nbsp; glTranslatef(-5,0,0);
  225.  &nbsp; &nbsp; &nbsp; &nbsp; glRotatef(OutRot,0.5,1,0);
  226.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  227.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(-1,-1,1);
  228.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  229.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(1,-1,1);
  230.  &nbsp; &nbsp; glEnd();
  231.  
  232.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  233.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,1);
  234.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  235.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(1,-1,-1);
  236.  &nbsp; &nbsp; glEnd();
  237.  
  238.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  239.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(1,-1,-1);
  240.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  241.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,-1);
  242.  &nbsp; &nbsp; glEnd();
  243.  
  244.  &nbsp; &nbsp; glBegin(GL_TRIANGLES);
  245.  &nbsp; &nbsp; glTexCoord2f(0,0);glVertex3f(-1,-1,-1);
  246.  &nbsp; &nbsp; glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  247.  &nbsp; &nbsp; glTexCoord2f(1,0);glVertex3f(-1,-1,1);
  248.  &nbsp; &nbsp; glEnd();
  249.  
  250.  &nbsp; &nbsp; glbegin(GL_QUADS);
  251.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,1);
  252.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,1);
  253.  &nbsp; &nbsp; &nbsp;glvertex3f(1,-1,-1);
  254.  &nbsp; &nbsp; &nbsp;glvertex3f(-1,-1,-1);
  255.  &nbsp; &nbsp; glend();
  256.  &nbsp; &nbsp;glPopMatrix;
  257.  
  258.  &nbsp;x:=x+1;
  259.  &nbsp;outrot:=outrot+2;
  260.  
  261.  &nbsp;SwapBuffers(Canvas.Handle); // Und anzeigen
  262.  
  263. end;
  264. end;
  265.  
  266. procedure glBindTexture(Target: TGLenum; Texture: TGLuint);
  267.  external opengl32; // Funktion für Texturen
  268.  
  269. procedure TDemoForm.FormCreate(Sender: TObject);
  270. begin
  271.  if not InitOpenGL then &nbsp; &nbsp;// Wichtig für OpenGL >= 1.2
  272.  &nbsp;Halt(100);
  273.  IsOpenGLInit := false; &nbsp; &nbsp;// OpenGL ist noch nicht initialisiert
  274. end;
  275.  
  276. procedure TDemoForm.SetPixelFormat;
  277. var
  278.  &nbsp;PixelFormat: TGLuint; // Das PixelFormat
  279.  &nbsp;PFD: PIXELFORMATDESCRIPTOR; // Die "Beschreibung" dazu
  280. begin
  281.  with PFD do // Für die "Beschreibung" verändern wir:
  282.  begin
  283.  &nbsp;nSize := SizeOf(PIXELFORMATDESCRIPTOR); // Die Größe ist die eines PIXELFORMATDESCRIPTORS
  284.  &nbsp;nVersion := 1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Version ist 1
  285.  &nbsp;dwFlags := PFD_DRAW_TO_WINDOW &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Einige wichtige Einstellungen
  286.  &nbsp; or PFD_SUPPORT_OPENGL
  287.  &nbsp; or PFD_DOUBLEBUFFER;
  288.  &nbsp;iPixelType := PFD_TYPE_RGBA; // Pixeltyp
  289.  &nbsp;cColorBits := 32; &nbsp; // Farbtiefe
  290.  &nbsp;cRedBits := 0; &nbsp; &nbsp; &nbsp;// Einige Einstellungen zu den Farben. Bei 0 belassen
  291.  &nbsp;cRedShift := 0;
  292.  &nbsp;cGreenBits := 0;
  293.  &nbsp;cBlueBits := 0;
  294.  &nbsp;cBlueShift := 0;
  295.  &nbsp;cAlphaBits := 0; &nbsp; &nbsp;// Das gleiche mit der Transparenz
  296.  &nbsp;cAlphaShift := 0;
  297.  &nbsp;cAccumBits := 0; &nbsp; &nbsp; &nbsp; // Nochmal mit dem AccumBuffer
  298.  &nbsp;cAccumRedBits := 0;
  299.  &nbsp;cAccumGreenBits := 0;
  300.  &nbsp;cAccumBlueBits := 0;
  301.  &nbsp;cAccumAlphaBits := 0;
  302.  &nbsp;cDepthBits := 16; &nbsp; &nbsp; &nbsp; // Z-Buffer Tiefe, 16bit ist GraKa Standard
  303.  &nbsp;cStencilBits := 0; &nbsp; &nbsp; &nbsp;// Stencil Bits, bei 0 belassen
  304.  &nbsp;cAuxBuffers := 0; &nbsp; &nbsp; &nbsp; // Anzahl der AuxBuffers, auch 0 lassen
  305.  &nbsp;iLayerType := PFD_MAIN_PLANE; &nbsp;// Layertyp, so lassen, wie es ist
  306.  &nbsp;bReserved := 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Einfach 0 lassen
  307.  &nbsp;dwLayerMask := 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Verschiedene Masken, auch bei 0 lassen
  308.  &nbsp;dwVisibleMask := 0;
  309.  &nbsp;dwDamageMask := 0
  310.  end;
  311.  PixelFormat := ChoosePixelFormat(Canvas.Handle, @pfd); // Das Pixelformat übergeben
  312.  if PixelFormat = 0 then // Bei Fehler Fehlermeldungen ausgeben
  313.  &nbsp;Application.MessageBox('Kein passendes PixelFormat gefunden!', 'Fehler', MB_ICONERROR or MB_OK);
  314.  if not Windows.SetPixelFormat(Canvas.Handle,PixelFormat,@pfd) then
  315.  &nbsp;Application.MessageBox('Pixelformat kann nicht gesetzt werden!', 'Fehler', MB_ICONERROR or MB_OK);
  316. end;
  317.  
  318. procedure TDemoForm.StartGl;
  319. begin
  320.  RenderContext := wglCreateContext(Canvas.Handle); // Den RenderContext erstellen
  321.  if RenderContext = 0 then // Wenn er doch nicht erstellt wurde, Fehlermeldungen
  322.  begin
  323.  &nbsp;Application.MessageBox('RenderContext kann nicht erstellt werden!', 'Fehler', MB_ICONERROR or MB_OK);
  324.  &nbsp;Halt(100);
  325.  end;
  326.  if not wglMakeCurrent(Canvas.Handle, RenderContext) then
  327.  begin
  328.  &nbsp;Application.MessageBox('RenderContext kann nicht aktiviert werden!', 'Fehler', MB_ICONERROR or MB_OK);
  329.  &nbsp;Halt(100);
  330.  end;
  331. end;
  332.  
  333. procedure TDemoForm.SetupGL;
  334. begin
  335.  glEnable(GL_DEPTH_TEST); &nbsp;// Den Z-Buffer-Test aktivieren (3D)
  336.  glDepthFunc(GL_LESS); &nbsp; &nbsp; // Typ des Z-Buffers festlegen &nbsp; &nbsp;
  337.  glEnable(GL_TEXTURE_2D); &nbsp;// Texturen aktivieren
  338.  glShadeModel(GL_SMOOTH) &nbsp; // Die Modelle weich zeichnen
  339. end;
  340.  
  341. procedure TDemoForm.FormShow(Sender: TObject);
  342. begin
  343.  &nbsp;RenderContext := 0; // RenderContext erst mal auf Null setzten
  344.  &nbsp;SetPixelFormat; // Das Format setzen
  345.  &nbsp;StartGL; &nbsp; &nbsp; &nbsp; &nbsp;// OpenGL starten
  346.  &nbsp;ClearExtensions; // OpenGL Extensions löschen ...
  347.  &nbsp;ReadExtensions; &nbsp;// Und auslesen
  348.  &nbsp;SetupGL; &nbsp; &nbsp; &nbsp; &nbsp; // Letzte Einstellungen
  349.  &nbsp;IsOpenGLInit := true; // Initalisierung komplett
  350. end;
  351.  
  352. procedure TDemoForm.FormDestroy(Sender: TObject);
  353. begin
  354.  IsOpenGLInit := False; // OpenGL ist nicht mehr initialisiert
  355.  if RenderContext <> 0 then // Wenn der RenderContext gesetzt werden konnte
  356.  begin &nbsp;// Jetzt versuchen wir, ihn zu löschen
  357.  &nbsp;if not wglMakeCurrent(Canvas.Handle, 0) then
  358.  &nbsp; Application.MessageBox('Fehler beim Leeren der Contexts!','Fehler', MB_ICONERROR or MB_OK);
  359.  &nbsp;if not wglDeleteContext(RenderContext) then
  360.  &nbsp; Application.MessageBox('Fehler beim Leeren des RenderContexts!','Fehler', MB_ICONERROR or MB_OK);
  361.  &nbsp;end;
  362.  &nbsp;RenderContext := 0; // Und jetzt noch leeren
  363. end;
  364.  
  365. procedure TDemoForm.FormResize(Sender: TObject);
  366. begin
  367.  glViewport(0, 0, ClientWidth, ClientHeight); // Blickfeld für das Fenster einstellen
  368.  glMatrixMode(GL_PROJECTION); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // In Projektionsmodus wechseln
  369.  glLoadIdentity; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Nullpunkt laden &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  370.  gluPerspective(45, ClientWidth/ClientHeight, NearClipping, FarClipping);
  371.  &nbsp;// Berechnung der Relation zwischen Breite und Höhe
  372.  glMatrixMode(GL_MODELVIEW); // Zurück zum ModelviewMatrixMode
  373.  glLoadIdentity; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Und den Nullpunkt wieder laden
  374. end;
  375.  
  376. procedure TDemoForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  377.  &nbsp;Y: Integer);
  378. begin
  379.  // Wenn der Cursor im Fenster ist ...
  380.  if (X > DemoForm.Left) and (Y > DemoForm.Top) and (X < DemoForm.Left + DemoForm.Width) and (Y < DemoForm.Top + DemoForm.Height) then
  381.  &nbsp;ShowCursor(true) // Zeige ihn nicht
  382.  else
  383.  &nbsp;ShowCursor(True); // Ist er nicht im Fenster, zeige ihn
  384. end;
  385.  
  386. procedure TDemoForm.FramesTimerTimer(Sender: TObject);
  387. begin
  388.  Frame := Frames; // Speichern der aktuellen Anzahl Renderdurchläufen
  389.  Frames := 0; // Wieder auf 0 setzten
  390.  DemoForm.Caption := WinCaption + '[' + IntToStr(Frame) + ' fps]'; // Und ausgeben
  391. end;
  392.  
  393. end.
  394.  
  395.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 10:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Erst mal willkommen auf DGL !

Wenn du einen Link auf das ganze gezippte Projekt postest (bitte auch mit folgenden Units dabei: OpenGL12, Glaux, Glu, Textures), sodass man nicht mordsmäßig umständlich den Code rumkopieren muss, bevor man das Ganze starten kann, schaue ich es mir gerne an.
Außerdem bin ich sicher, dass auch andere potentielle Helfer viel motivierter wären, wenn nicht einfach die ganze Codewurst hier gepostet wird (glaubst du wirklich, dass das jemand liest ??).

Eine etwas exaktere Fehlerbeschreibung (Programm lässt sich nicht compilieren/ macht nicht das was ich will (was macht es statt dessen ?)/ formatiert regelmäßig meine Festplatte) wäre auch wünschenswert.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 10:38 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
So beim Drüberscrollen sind folgende Codezeilen sowieso Blödsinn:
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>if</span> (X > DemoForm.Left) <span class='reserved'>and</span> (Y > DemoForm.Top) <span class='reserved'>and</span> (X < DemoForm.Left + DemoForm.Width) <span class='reserved'>and</span> (Y < DemoForm.Top + DemoForm.Height) <span class='reserved'>then</span>
ShowCursor(true) // Zeige ihn nicht
<span class='reserved'>else</span>
ShowCursor(True); // Ist er nicht im Fenster, zeige ihn
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

wenn schon

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>if</span> (X >= DemoForm.Left) <span class='reserved'>and</span> (Y >= DemoForm.Top) <span class='reserved'>and</span> (X < DemoForm.Left + DemoForm.Width) <span class='reserved'>and</span> (Y < DemoForm.Top + DemoForm.Height) <span class='reserved'>then</span>
ShowCursor(False) // Zeige ihn nicht <-- Cursor ausschalten
<span class='reserved'>else</span>
ShowCursor(True); // Ist er nicht im Fenster, zeige ihn
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Ist zwar nicht tragisch, unter Windows gehört aber das linke obere Pixel ZU einem rechteckigen Zeichenbereich, das rechte untere hingegen NICHT!

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 14:36 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 09:07
Beiträge: 3
das mit dem cursor true hab ich nur zum testen gemacht... ich lad das projekt gleich hoch und geb dir dann den link...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 09:07
Beiträge: 3
<a href='http://schumacher_michael.bei.t-online.de/cytexX/pyra.zip' target='_blank'>hier</a> is der link für die zip... wär nett wenn mir jemand sagen könnte wo mein fehler liegt, das die animation nicht funktioniert...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 17:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Das Hauptproblem ist, dass du für deine Animation eine lokale Variable raufzählen willst, deren Inhalt natürlich bei jedem Prozeduraufruf wieder undefiniert ist.

Ersetze
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>// Zeichenprozedur
<span class='reserved'>procedure</span> TDemoForm.ApplicationEventsIdle(Sender: TObject;
<span class='reserved'>var</span> Done: Boolean);
<span class='reserved'>var</span> x:integer;
outrot:integer;
texture1: PTAUX_RGBImageRec;
tex: TGLuint;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

durch

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>// Zeichenprozedur
<span class='reserved'>var</span> x:integer = <span class='integer'>0</span>;
<span class='reserved'>procedure</span> TDemoForm.ApplicationEventsIdle(Sender: TObject;
<span class='reserved'>var</span> Done: Boolean);
<span class='reserved'>var</span>
outrot:integer;
texture1: PTAUX_RGBImageRec;
tex: TGLuint;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Das Demo schaut übrigens nett aus, dennoch schwächelt der Code noch an mehreren Ecken und Enden:

1) Die Textures.pas benötigt GL.pas und GLU.pas, ersetze dies in der Textures durch OpenGL12, um zu vermeiden, dass dein Code durch das mehrfache Einbinden der selben Routinen aus den OpenGL DLLs unnötig aufgebläht wird

2) Deine Formatierung ist - lassen wir das, ich gehe mal davon aus, dass die etwas willkürlichen begin/end Marken durch die bisherige Fehlersuche entstanden sind.

3) du berechnest die FpS über eine Timer - das ist ok. Schön wäre es, wenn du diesen Wert in die Animation einfließen lassen würdest (sodass das Ganze auf jedem Rechner gleich schnell ist).

4) Glaux sollte nur in Notfällen verwendet werden (wenn grad nichts anderes zur Hand ist) - ziemlich buggy und unflexibel, außerdem initialisierst du OpenGL soweit ich gesehen habe ohnehin über die OpenGL12.

Das Wichtigste ist meiner Ansicht aber Punkt 1: schreibe die Textures.pas so um, dass sie mit der OpenGL12 zufrieden ist (OpenGL12 beinhält bereits die nötigen GLU Aufrufe)

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2003 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
noch ein Tipp, zu deinem Code daoben...
du musst nicht für jedes Dreieck ein neues
Code:
  1. glbegin(GL_TRIANGLES);

benutzen....
du kannst die Punkte auch alle nacheinander angeben und OpenGL nimmt dann immer drei zusammen zu einem Dreieck...
das ganze ist dann jedenfalls um einiges schneller, was natürlich bei deinem Projekt zur Zeit noch nicht wichtig ist... aber für später mal ;)

Code:
  1. glbegin(GL_TRIANGLES);
  2.  &nbsp; &nbsp;glTexCoord2f(0,0);glVertex3f(1,-1,1);
  3.  &nbsp; &nbsp;glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  4.  &nbsp; &nbsp;glTexCoord2f(1,0);glVertex3f(1,-1,-1);
  5.  &nbsp; &nbsp;
  6.  &nbsp; &nbsp;glTexCoord2f(0,0);glVertex3f(1,-1,-1);
  7.  &nbsp; &nbsp;glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  8.  &nbsp; &nbsp;glTexCoord2f(1,0);glVertex3f(-1,-1,-1);
  9.  &nbsp; &nbsp;
  10.  &nbsp; &nbsp;glTexCoord2f(0,0);glVertex3f(-1,-1,-1);
  11.  &nbsp; &nbsp;glTexCoord2f(0.5,1);glVertex3f(0,1,0);
  12.  &nbsp; &nbsp;glTexCoord2f(1,0);glVertex3f(-1,-1,1);
  13. glEnd;


Fiji-Fighter

_________________
. . .


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


Wer ist online?

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