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

Aktuelle Zeit: Fr Jul 18, 2025 00:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Mär 09, 2006 18:25 
Offline
DGL Member

Registriert: Di Feb 10, 2004 14:55
Beiträge: 28
Wohnort: Gelsenkirchen
Hi Leute,

ich arbeite mich gerade durch das Tutorial aus dem Wiki. Ich habe jetzt ein Dreieck gezeichnet, was ich auch auf der X- und Y-Achse verschieben kann. Wenn ich es allerdings mit sehr geringen Werten (kleiner 1) auf der Z-Achse verschiebe sieht man nichts. Wenn ich es mit Werten (größer 1) auf der Z-Achse verschiebe verschwindet es. Ich poste mal den Code hier in der Hoffnung ihr könnt mir sagen, was ich falsch gemacht habe:

//Edit Ich hab mal versucht das Dreieck direkt 5 Einheiten auf der Z-Achse versetzt zu erzeugen. Dann sieht man ebenfalls nichts.

Code:
  1. unit UFrmMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, dglOpenGl,
  7.   AppEvnts, ExtCtrls;
  8.  
  9. type
  10.   TFrmMain = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure FormResize(Sender: TObject);
  14.     procedure OnIdle(sender:TObject; var done:boolean);
  15.     procedure Render;
  16.   private
  17.     { Private-Deklarationen }
  18.   public
  19.     { Public-Deklarationen }
  20.   end;
  21.  
  22. var
  23.   DC, RC : HDC;
  24.   FrmMain: TFrmMain;
  25.  
  26. implementation
  27.  
  28. {$R *.DFM}
  29.  
  30. procedure TFrmMain.FormCreate(Sender: TObject);
  31. begin
  32.   InitOpenGl;  //Intialisierung von OpenGL
  33.   DC := GetDC(Handle);  //Ermittel des GeräteKontext, Festlegen, wohin gezeichnet wird
  34.   RC := CreateRenderingContext(DC,[opDoubleBuffered],32,24,0,0,0,0);  //Erstellen des Zeichenkontext
  35.   ActivateRenderingContext(DC,RC);  //Aktivieren des Zeichenkontext
  36.   Application.OnIdle := OnIdle;  //OnIdle-Ereignis wird durch eigene Methode ersetzt
  37.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  //Farwerte und Tiefenwerte aus den Puffern löschen
  38. end;
  39.  
  40. procedure TFrmMain.FormDestroy(Sender: TObject);
  41. begin
  42.   DestroyRenderingContext(RC);  //Freigeben des Zeichenkontext
  43.   ReleaseDC(Handle,DC);  //Freiegebn des Gerätekontext
  44. end;
  45.  
  46. procedure TFrmMain.FormResize(Sender: TObject);
  47. begin
  48.   glViewport(0,0,Clientwidth,Clientheight);  //Die Größe der Zeichenfläche auf die Größe des Fensters abstimmen
  49. end;
  50.  
  51. procedure TFrmMain.OnIdle(sender: TObject; var done: boolean);
  52. begin
  53.   Render;  //Zeichen-Methode wird aufgerufen
  54. end;
  55.  
  56. procedure TFrmMain.Render;
  57. begin
  58.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  59.   glLoadIdentity;
  60.   glBegin(GL_TRIANGLES);
  61.     glColor3f(1,0,0); glVertex3f(-1,-1,0);
  62.     glColor3f(0,1,0); glVertex3f(1,-1,0);
  63.     glColor3f(0,0,1); glVertex3f(0,1,0);
  64.   glEnd;
  65.   SwapBuffers(DC);
  66. end;
  67.  
  68. end.

_________________
Behaupten ist sicherer als Beweisen.
Meine OGL-Projekte


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 19:58 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Hi! Ich bin zwar auch erst beim lernen, aber ich hatte glaub ich genau den gleichen "Fehler" am Anfang. Du musst nämlich als erstes eine Perspektive setzen, bevor du die Z-Koordinate richtig verwenden kannst. hab ich zwar nicht genau kapiert warum, aber danach gings plötzlich. Du musst also für 3D diesen befehl verwenden: http://wiki.delphigl.com/index.php/gluPerspective

Bsp:
[Initialisierungs-code]
Code:
  1.    
  2.     glMatrixMode(GL_PROJECTION); { Verändern der Perspektive }
  3.     glLoadIdentity(); { Position zurücksetzen }
  4.     { Beispiel Werte, 45 steht für 45°, der Winkel der Perspektive, Breite des Fensters durch Höhe des Fensters ergibt hier den richtigen Wert (frag mich nicht warum ^^) und 1.0, 100.0 sind die min. und max. Koordinaten der Z-Achse }
  5.     gluPerspective(45.0, WinWidth / WinHeight, 1.0, 100.0);


Bin noch total frisch hinter den Ohren, kann sein, dass ich totalen Blödsinn grad verzapfe, aber probiers mal aus dann funtzt es hoffentlich :lol:

PS: Du könntest auch mal die Tutorials von NeHe(wohl einige der bekanntesten Tuts für OpenGl) probieren [http://nehe.gamedev.net/] es ist zwar in C++ geschrieben, der Delphi-Code ist allerdings ganz unten als Anhang zum Download dabei und die OpenGl Syntax ist ja immer die gleiche!

ACHTUNG! Dort wo du dein Dreieck renderst musst du glMatrixMode(GL_MODELVIEW); aufrufen, ansonsten ist OpenGL immer noch im GL_PROJECTION Modus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
ist völlig richtig du solltest per gluPerspective die Projection Matrix setzen, das tust du am besten so selten wie nötig, reicht meistens einmal beim program-start.

Dark_Ruler hat geschrieben:
ACHTUNG! Dort wo du dein Dreieck renderst musst du glMatrixMode(GL_MODELVIEW); aufrufen, ansonsten ist OpenGL immer noch im GL_PROJECTION Modus.


auch richtig, nur is es nich nötig das jedes mal beim rendern der dreiecke zu tuen, sondern nachdem du an der Projektion rumgeschraubt hast einmal wieder per glMatrixMode auf MODELVIEW gehen und das wars.

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 22:42 
Offline
DGL Member

Registriert: Di Feb 10, 2004 14:55
Beiträge: 28
Wohnort: Gelsenkirchen
Jetzt funzt es, danke sehr :D

_________________
Behaupten ist sicherer als Beweisen.
Meine OGL-Projekte


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 10, 2006 14:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Und noch ein hinweis:
Das selbe verhalten kann dir später nocheinmal über den Weg laufen. Und zwar wenn deine Objekte der Far- bzw. Near-Clippingplane begegnen. Dann werden sie auch abgeschnitten. Diese beiden Clippingebenen stellst du ein, wenn du die Perspektive (gluPerspective, glOrtho) festlegst.

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


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