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

Aktuelle Zeit: Mi Jul 16, 2025 21:34

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Render Problem
BeitragVerfasst: Sa Mär 05, 2005 17:32 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
Also, Ich lade 3ds dateien mit Noeskas Loader.
Ich verwende mehrere TAll3dsMesh Objekte.
Ich kann das Objekt Start anzeigen. Sobald ich versuche das Objekt Optionen anzuzeigen bekomme ich keine Fehlermeldung, es wird aber auch nicht das Entsprechende Objekt angezeigt. Wenn ich es über Start lade, wird es angezeigt.
Hier mal der bisherige Programmtext:

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, gl3ds, dglopengl, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Timer1: TTimer;
  12.     Label1: TLabel;
  13.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  14.     procedure Timer1Timer(Sender: TObject);
  15.     procedure FormPaint(Sender: TObject);
  16.     procedure FormResize(Sender: TObject);
  17.     procedure FormDestroy(Sender: TObject);
  18.     procedure FormCreate(Sender: TObject);
  19.     procedure Initalisieren;
  20.   private
  21.     { Private-Deklarationen }
  22.    myDC : HDC;
  23.    myRC : HGLRC;
  24.    myPalette : HPALETTE;
  25.  
  26.   public
  27.     { Public-Deklarationen }
  28.     procedure glinit();
  29.   end;
  30.   T3DFiguren = class
  31.    private
  32.    public
  33.      Meshes : TAll3dsMesh;
  34.      x1,x2,x3,x4,y1,y2,y3,y4 : Integer;
  35.    ausgewaehlt : boolean;
  36.    auswahl : Integer;
  37.   end;
  38.   T3DSpielfeld = class
  39.    private
  40.    public
  41.     Meshes : TAll3dsMesh;
  42.     xpos,ypos:Integer;
  43.   end;  
  44.   TMenue = class
  45.    private
  46.    public
  47.     Auswahl : Integer;
  48.     Aktiv : Boolean;
  49.    
  50.    end;
  51.  
  52. var
  53.   Form1: TForm1;
  54.   scale : single = 1; //Für die Skalierung
  55.   rotation : integer = 0; //Zahl in °, um die gedreht wird
  56.   move : single = 0; //Größe der Bewegung
  57.   scaledir : boolean; //Richtung der Skalierung (größer / kleiner)
  58.   movedir : boolean; //Richtung der Bewegung (rauf / runter)
  59.   Spielfeld : T3dSpielfeld;
  60.   Rot : T3DFiguren;
  61.   Blau : T3DFiguren;
  62.   Gruen : T3DFiguren;
  63.   Gelb : T3DFiguren;
  64.   Auswahl : T3DFiguren;
  65.   Menue : TMenue;
  66.   zpos,ypos,xpos : Integer;                //Z-Position
  67.  
  68.   Optionen : TAll3dsMesh;
  69.   Start : TAll3dsMesh;
  70.   Hilfe : TAll3dsMesh;
  71.   Ende : TAll3dsMesh;
  72.   Hintergrund: TAll3dsMesh;
  73.   Pfeile : TAll3dsMesh;
  74.  
  75.  
  76. implementation
  77.  
  78. {$R *.dfm}
  79.  
  80. procedure Tform1.glInit();
  81. begin
  82.   glClearColor(0.3, 0.3, 0.3, 0.0);       // Black Background
  83.   glShadeModel(GL_SMOOTH);                 // Enables Smooth Color Shading
  84.   glClearDepth(1.5);                       // Depth Buffer Setup
  85.   glEnable(GL_DEPTH_TEST);
  86.   glDepthFunc (GL_LEQUAL);
  87. //  glEnable( GL_CULL_FACE );
  88. //  glCullFace( GL_FRONT );
  89.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   //Realy Nice perspective calculations
  90.   glEnable(GL_TEXTURE_2D);                     // Enable Texture Mapping
  91.   wglSwapIntervalEXT(0);
  92. end;
  93.  
  94.  
  95.  
  96. procedure Render;
  97. begin
  98.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  99.   glLoadIdentity;
  100.  
  101.   glTranslatef(0,0,-2);
  102.  
  103.  
  104.   SwapBuffers(form1.myDC);
  105. end;
  106.  
  107. procedure RenderMenue;
  108. begin
  109.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  110.   glLoadIdentity;
  111.  
  112.   glTranslatef(0,0,-50);
  113.  
  114.   Hintergrund.Render;
  115.   Pfeile.Render;
  116. {  case Menue.Auswahl of
  117.     1 : Start.Render;
  118.     2 : Optionen.Render;
  119.     3 : Hilfe.Render;
  120.     4 : Ende.Render;
  121.   end;    }
  122.   Start.Render;
  123.   SwapBuffers(form1.myDC);
  124. end;
  125.  
  126. procedure TForm1.Initalisieren;
  127. begin
  128.  mydc := getdc(handle);
  129. InitOpenGL();
  130. myrc := CreateRenderingContext(mydc,[opDoublebuffered],32,24,0,0,0,0);
  131. ActivateRenderingContext(mydc, myrc);
  132. glInit();
  133.  
  134.  { Gruen := T3dFiguren.Create;
  135.   Gruen.Meshes := TAll3dsMesh.Create(nil);
  136.   Gruen.Meshes.TexturePath:='files';
  137.   Gruen.Meshes.LoadFromFile('files\grün.3ds');
  138.   Gruen.Meshes.BuildDisplayList;
  139.  
  140.   Blau := T3dFiguren.Create;
  141.   Blau.Meshes := TAll3dsMesh.Create(nil);
  142.   Blau.Meshes.TexturePath:='files';
  143.   Blau.Meshes.LoadFromFile('files\blau.3ds');
  144.   Blau.Meshes.BuildDisplayList;
  145.  
  146.   Gelb := T3dFiguren.Create;
  147.   Gelb.Meshes := TAll3dsMesh.Create(nil);
  148.   Gelb.Meshes.TexturePath:='files';
  149.   Gelb.Meshes.LoadFromFile('files\gelb.3ds');
  150.   Gelb.Meshes.BuildDisplayList;
  151.  
  152.   Rot := T3dFiguren.Create;
  153.   Rot.Meshes := TAll3dsMesh.Create(nil);
  154.   Rot.Meshes.TexturePath:='files';
  155.   Rot.Meshes.LoadFromFile('files\rot.3ds');
  156.   Rot.Meshes.BuildDisplayList;
  157.  
  158.   Auswahl := T3dFiguren.Create;
  159.   Auswahl.Meshes := TAll3dsMesh.Create(nil);
  160.   Auswahl.Meshes.TexturePath:='files';
  161.   Auswahl.Meshes.LoadFromFile('files\Auswahl.3ds');
  162.   Auswahl.Meshes.BuildDisplayList;
  163.  
  164.   Spielfeld :=T3dSpielfeld.Create;
  165.   Spielfeld.Meshes := TAll3dsMesh.Create(nil);
  166.   Spielfeld.Meshes.TexturePath:='files';
  167.   Spielfeld.Meshes.LoadFromFile('files\Spielfeld.3ds');
  168.   Spielfeld.Meshes.BuildDisplayList;      }
  169.  
  170.   Menue := TMenue.Create;
  171.  
  172.  
  173.  
  174.   Start := TAll3dsMesh.Create(nil);
  175.   Start.TexturePath:='files';
  176.   Start.LoadFromFile('files\Menüd1.3ds');
  177.   Start.BuildDisplayList;
  178.  
  179.  { Optionen := TAll3dsMesh.Create(nil);
  180.   Optionen.TexturePath:='files';
  181.   Start.LoadFromFile('files\Menüd2.3ds');
  182.   Optionen.BuildDisplayList;
  183.  
  184.  
  185.  
  186.   Hilfe := TAll3dsMesh.Create(nil);
  187.   Hilfe.TexturePath:='files';
  188.   Start.LoadFromFile('files\Menüd3.3ds');
  189.   Hilfe.BuildDisplayList;
  190.  
  191.   Ende := TAll3dsMesh.Create(nil);
  192.   Ende.TexturePath:='files';
  193.   Start.LoadFromFile('files\Menüd4.3ds');
  194.   Ende.BuildDisplayList;        }
  195.  
  196.   Hintergrund := Tall3dsMesh.Create(nil);
  197.   Hintergrund.TexturePath:='files';
  198.   Hintergrund.LoadFromFile('files\Hintergrund.3ds');
  199.   Hintergrund.BuildDisplayList;
  200.  
  201.   Pfeile := TAll3dsMesh.Create(nil);
  202.   Pfeile.TexturePath:='files';
  203.   Pfeile.LoadFromFile('files\Pfeile.3ds');
  204.   Pfeile.BuildDisplayList;
  205.  
  206.   Menue.Auswahl:=1;
  207.  
  208.   Menue.Aktiv:=True;
  209. end;
  210.  
  211. procedure TForm1.FormCreate(Sender: TObject);
  212. begin
  213. ypos:=0;
  214. xpos:=0;
  215. zpos:=-50;
  216. Form1.Initalisieren;
  217.  
  218.  
  219. end;
  220.  
  221. procedure TForm1.FormDestroy(Sender: TObject);
  222. begin
  223.  DeactivateRenderingContext;
  224. DestroyRenderingContext(myrc);
  225. releasedc(handle,mydc);
  226. end;
  227.  
  228. procedure TForm1.FormResize(Sender: TObject);
  229. begin
  230. if Height=0 then Height:=1;
  231.  
  232.   glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
  233.   glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
  234.    glLoadIdentity();                   // Reset View
  235.     gluPerspective(45.0, Width/Height, 1.0, 1000.0);  // Do the perspective calculations. Last value = max clipping depth
  236.  
  237.   glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  238.    glLoadIdentity();                   // Reset View
  239.  
  240.    //if needed a faster feedback
  241.    OnPaint(self);
  242. end;
  243.  
  244.  
  245.  
  246. procedure TForm1.FormPaint(Sender: TObject);
  247. begin // this is only an alternative....OnIdle for intensiv drawing
  248. render;
  249. end;
  250.  
  251. procedure TForm1.Timer1Timer(Sender: TObject);
  252.  
  253. begin
  254.   if Menue.Aktiv then
  255.    rendermenue
  256.    else
  257.   render;
  258. end;
  259.  
  260. procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
  261. begin
  262.   if (GetAsyncKeyState(VK_ESCAPE))<>0 then Close;
  263.   if key='X' then ypos:=ypos-1;
  264.   if key='Y' then ypos:=Ypos+1;
  265. end;
  266.  
  267. end.

Kann mir jemand helfen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 07, 2005 12:34 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also...hm...als erstes muss der entsprechende Code auskommentiert sein....OK,OK, ich weiß das du das wusstest ;)
Is dir nebenbei aufgefallen, dass selbst im options teil nicht Options.LoadFromFile sondern Start.LoadFromFile steht? Sollten das deine letzten änderungen sein, würde ich dich bitten mal die Codeversion zu posten wo du am ehesten denkst, dass sie funktionieren sollte. (Bei solchen "Ich hab alles mögliche schon probiert"-Codes sehen wir auch net durch.)

Nochwas allgemeinses. Ich glaube nicht, dass es so doll ist 3DS-Meshs als Menüs zu verwenden. Vorallem, da du die wirklich einfach per Hand im Orthomodus machen kannst. Und dabei (im Orthomodus) ist die Selektion nun wirklichd as absolute Kinderspiel. Da brauchst du noch netmal die OpenGLSelektion für.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 07, 2005 13:28 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
Flash hat geschrieben:
Is dir nebenbei aufgefallen, dass selbst im options teil nicht Options.LoadFromFile sondern Start.LoadFromFile steht?


Nee, noch net! Danke! Das war der Fehler... :oops:


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


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]