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

Aktuelle Zeit: Mi Jul 16, 2025 12:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ein Dreieck verschwindet!
BeitragVerfasst: Mi Feb 15, 2006 20:46 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Hallo Leute,

ich habe ein Programm geschrieben, welches 2 Dreiecke erzeugt. Das 1. rotiert um die eigene Achse und das zweite um das Große. Das Problem ist, dass das 2. nach kurzer Zeit verschwindet! Schaut euch mal bitte den Quellcode an, ob ihr das Problem findet, Danke! (Rot1 und Rot2 sind die Rotationsfaktoren.)

Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.     procedure Render;
  15.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  16.     procedure GoToFullScreen(pWidth, pHeight, pBPP, pFrequency : Word);
  17.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  18.   private
  19.     { Private declarations }
  20.  
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.   DC, RC :HDC;
  28.   Rot1,Rot2 :real;
  29.   Zeitfaktor :double;
  30.   Berechnungszeit :longword;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35.  
  36. procedure TForm1.GoToFullScreen(pWidth, pHeight, pBPP, pFrequency : Word);
  37. var
  38.  dmScreenSettings : DevMode;
  39. begin
  40. // Fenster vor Vollbild vorbereiten
  41. WindowState := wsMaximized;
  42. BorderStyle := bsNone;
  43. ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
  44. with dmScreenSettings do
  45.  begin
  46.  dmSize              := SizeOf(dmScreenSettings);
  47.  dmPelsWidth         := pWidth;                    // Breite
  48.  dmPelsHeight        := pHeight;                   // Höhe
  49.  dmBitsPerPel        := pBPP;                      // Farbtiefe
  50.  dmDisplayFrequency  := pFrequency;                // Bildwiederholfrequenz
  51.  dmFields            := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
  52.  end;
  53. if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then
  54.  begin
  55.  MessageBox(0, 'Konnte Vollbildmodus nicht aktivieren!', 'Error', MB_OK or MB_ICONERROR);
  56.  exit
  57.  end;
  58. end;
  59.  
  60.  
  61. procedure TForm1.FormCreate(Sender: TObject);
  62. begin
  63. GoToFullscreen(1024, 768, 32, 75);
  64. InitOpenGL;
  65.  
  66. DC:=GetDC(Handle);
  67.  
  68. RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  69. ActivateRenderingContext(DC, RC);
  70. //Hintergrundfarbe einstellen:
  71. glClearColor(0.0, 0.0, 0.0, 0.0);
  72. Application.OnIdle:=Onidle;
  73. Rot1:=0;
  74. Rot2:=0;
  75. end;
  76.  
  77. procedure TForm1.FormDestroy(Sender: TObject);
  78. begin
  79. DeactivateRenderingContext;
  80. DestroyRenderingContext(RC);
  81. ReleaseDC(Handle,DC);
  82. ChangeDisplaySettings(devmode(nil^), 0);
  83. end;
  84.  
  85. procedure TForm1.Render;
  86. begin
  87.   glMatrixMode(GL_PROJECTION);
  88.   glLoadIdentity;
  89.   glViewport(0, 0, ClientWidth, ClientHeight);
  90.   gluPerspective(60, ClientWidth/ClientHeight,1, 128);
  91.   glMatrixMode(GL_Modelview);
  92.   glLoadIdentity;
  93.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  94.   glTranslatef(0, 0,-5);
  95.   glpushMatrix;
  96.         Rot1:= Rot1 +(Zeitfaktor/1)*20;
  97.         glrotatef(Rot1,0,1,0);
  98.         //Zeichnen
  99.         glBegin(GL_TRIANGLES);
  100.         glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);
  101.         glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  102.         glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  103.         glEnd;
  104.   glPoPMatrix;
  105.         Rot2:= Rot2 +(Zeitfaktor/1)*20;
  106.         glrotatef(Rot2,0,1,0);
  107.         glTranslateF(2,0,0);
  108.          glBegin(GL_TRIANGLES);
  109.          glColor3f(1, 0, 0); glVertex3f(-0.5,-0.5, 0);
  110.          glColor3f(0, 0, 1); glVertex3f( 0.5,-0.5, 0);
  111.          glColor3f(0, 1, 0); glVertex3f( 0, 0.5, 0);
  112.          glEnd;
  113.   GLPushMatrix;
  114.  
  115.  
  116.  
  117. SwapBuffers(DC);
  118. end;
  119.  
  120. procedure TForm1.Onidle(Sender: TObject; var Done: Boolean);
  121. const Frequenz = 1000;
  122. var aktuellezeit :longword;
  123.  begin
  124. aktuellezeit:=GetTickCount();
  125. Zeitfaktor:=(aktuelleZeit - Berechnungszeit)/Frequenz;
  126. Render;
  127. Berechnungszeit:=aktuellezeit;
  128. Done:=false;
  129. end;
  130. procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
  131. begin
  132. close;
  133. end;
  134.  
  135. end.
  136.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 21:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Versuch mal das Backface-Culling[glCullFace] zu deaktivieren (hab mir den Quelltext nicht angeguckt, aber hört sich dannach an)

Code:
  1. gldisable(GL_CULL_FACE);

_________________
Bevor du definierst, was etwas ist, versichere dich seiner Existenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 22:40 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
nope, das Prob liegt beim Matrix-Stack. Du Pushst ohne zu Popen. Irgendwann (nach 32 oder so) is der Stack voll, und dann wars das.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 22:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jo..das letzte Push gehört weg.

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


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

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Autsch, da hätte ich auch selber drauf kommen können, danke Jungs!


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 8 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.009s | 14 Queries | GZIP : On ]