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

Aktuelle Zeit: Fr Jul 04, 2025 07:09

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Compilierungsprobleme
BeitragVerfasst: Sa Dez 14, 2002 16:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 16:05
Beiträge: 2
Wohnort: Budenheim
Servus

ich hoffe das mir einer helfen kann, und zwar bin ich noch ein totaler Anfänger was OpenGL angeht.
Ich habe ganz einfach mal ein Dreieck programiert und mir anzeigen lassen. Und das geht auch. Aber wenn ich Delphi dann schließe und neu öffne, zeigt er mir beim Compelieren immer nur ein graues Bild.
Komisch! Bitte um Hilfe!!

Thx


Quelltext:
Code:
  1. nit main;
  2.  
  3.  
  4.  
  5. interface
  6.  
  7.  
  8.  
  9. uses
  10.  
  11.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  12.  
  13.   Dialogs,GL,GLU;
  14.  
  15.  
  16.  
  17. ...
  18.  
  19.  
  20.  
  21. implementation
  22.  
  23.  
  24.  
  25. {$R *.dfm}
  26.  
  27.  
  28.  
  29. procedure TForm1.SetDCPixelFormat(Handle:HDC);
  30.  
  31.  var
  32.  
  33.   pfd:TPixelFormatDescriptor;
  34.  
  35.   nPixelFormat:Integer;
  36.  
  37.  begin
  38.  
  39.   FillChar(pfd, SizeOf(pfd), 0);
  40.  
  41.  
  42.  
  43.   with pfd do
  44.  
  45.   begin
  46.  
  47.    nSize := sizeof(pfd);
  48.  
  49.    nVersion :=1;
  50.  
  51.    dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL;
  52.  
  53.    iPixelType := PFD_TYPE_RGBA;
  54.  
  55.    cColorBits := 24;
  56.  
  57.    cDepthBits := 32;
  58.  
  59.    iLayerType := PFD_MAIN_PLANE;
  60.  
  61.   end;
  62.  
  63.   nPixelFormat := ChoosePixelFormat(Handle, @pfd);
  64.  
  65.   SetPixelFormat(Handle, nPixelFormat, @pfd);
  66.  
  67.  end;
  68.  
  69. procedure TForm1.Zeichnung;
  70.  
  71.  begin
  72.  
  73.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  74.  
  75.   glbegin(GL_TRIANGLES);
  76.  
  77.    glVertex2f(-0.9,0.0);
  78.  
  79.    glVertex2f(-0.7,0.9);
  80.  
  81.    glVertex2f(-0.5,0.0);
  82.  
  83.   glEnd;
  84.  
  85.  end;
  86.  
  87. procedure TForm1.FormCreate(Sender: TObject);
  88.  
  89.  begin
  90.  
  91.   SetDCPixelFormat(Canvas.Handle);
  92.  
  93.   hrc:= wglCreateContext(Canvas.Handle);
  94.  
  95.  end;
  96.  
  97.  
  98.  
  99. procedure TForm1.FormDestroy(Sender: TObject);
  100.  
  101. begin
  102.  
  103. wglDeleteContext(hrc);
  104.  
  105. end;
  106.  
  107.  
  108.  
  109. procedure TForm1.FormPaint(Sender: TObject);
  110.  
  111. begin
  112.  
  113. wglMakeCurrent(Canvas.Handle, hrc);
  114.  
  115. Zeichnung;
  116.  
  117. wglMakeCurrent(0,0);
  118.  
  119. end;
  120.  
  121.  
  122.  
  123. end.

<span style='color:red'>Bitte, wenn ihr Quellcodes postet, lasst ersichtlich unwichtiges weg und benutzt bitte wenn möglich die uploadfunktion auf der Seite - Delphic</span>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 14, 2002 18:12 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
an deinem Code fällt mir auf die schnelle nichts ungewöhnliches auf, welches Betriebssystem benutzt du, welche Graka und Treiberversion? Und zeigt das Prog die gleiche Macke auf anderen Rechnern?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 14, 2002 18:20 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 16:05
Beiträge: 2
Wohnort: Budenheim
Ich benutze WinXP und Graka hab ich GeForce II Ultra treiberversion:
Anbieter: ASUS Tek
Version: 2.1.8.1

Ob es auf anderen PC's läuft kann ich nicht sagen, da ich das für die schule mache, und ich keinen anderen rechener zuhause habe, auf dem delphi ist


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: re
BeitragVerfasst: Sa Dez 14, 2002 20:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn das dein ganzer Quellcode ist, dann fallen mir spotan einige Dinge auf die falsch gemacht wurden :

Nummer 1:
Benutze auf keinen Fall den OnPaint-Event des Fensters zum Zeichnen deiner OpenGLSzene.Dieser wird nicht regelmäßig aufgerugen, sondern z.B. nur dann, wenn sich die Fenstergröße ändert.
Besser wäre es, den Idle-Event des Programms zum Zeichnen deiner Szene zu nutzen!

Nummer 2:
Du musst deinem OpenGL-Renderkontext irgendwo eine Größe zuordnen...z.B. die Clientgröße deines Fensters...das fehlt bei dir gänzlich und sollte in etwa so aussehen (DC=DeviceContext,RC=RenderContext):
Code:
  1.  
  2.  
  3. procedure TForm1.FormResize(Sender: TObject);
  4.  
  5. begin
  6.  
  7. if (HandleAllocated) and (DC > 0) and (RC > 0) then
  8.  
  9.  begin
  10.  
  11.  ActivateRenderingContext(DC, RC);
  12.  
  13.  glViewport(0, 0, ClientWidth, ClientHeight);
  14.  
  15.  glMatrixMode(GL_PROJECTION);
  16.  
  17.  glLoadIdentity;
  18.  
  19.  gluPerspective(45, ClientWidth/ClientHeight, 1, 100);
  20.  
  21.  DeactivateRenderingContext;
  22.  
  23.  end;
  24.  
  25. end;
  26.  
  27.  

Damit wird ausserdem auch deine Clippingplane festgelegt, eine sehr wichtige Sache um OpenGL mitzuteilen wie "weit" auf der Z-Achse gezeichnet werden soll.

Nummer 3:
Setz mal glClearColor(0,0,0,0)...wenn dann dein Hintergrund auf einmal schwarz wird, dann musst du deinen Viewport noch transformieren.
Anhand deiner Koordinaten für dein Dreieck kann ich erkennen, das es hinter dem Betrachter liegt, und deshalb also auf keinen Fall sichtbar ist!
Setz vor deine Zeichenbefehle mal noch eine Transformation :
Code:
  1.  
  2.  
  3. glTranslatef(0,0,-5)
  4.  
  5.  


BTW : Kleiner Tipp für alle OGL-Anfänger : Zieht euch das RedBook (gibts ja hier auf DGL als DL)...das beantwortet viele Frage und ist für alle die die OGL coden wollen unerlässlich!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 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.007s | 14 Queries | GZIP : On ]