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

Aktuelle Zeit: Mo Jul 14, 2025 13:56

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: 1.Runde Objekte 2.Löcher
BeitragVerfasst: Do Okt 09, 2003 15:34 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
1.
Wie kann ich Kugeln, Kegel, Zylinder usw erzeugen? Gibts da Standartbefehle wie zb glSphere(Radius, Streckung) oder ähnliches?

2.
Wie kann ich "Löcher" also Durchgänge in Objekte einbauen. Gibt es sowas wie eine Eigenschaft "Loch" die ich einem Objekt zuweise und das mein Objekt dann durchsichtig und durchgehbar macht?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 15:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
zu 1. gluSphere sollte es geben.
zu 2. ich glaube das must du schon selbst programmieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 15:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Es gibt keine standart Möglichkeit um Teile eines Objektes zu entfernen :?: :(

Zu gluSphere. Ich hab das entsprechende Tutorial bei OnlineGL mal gebastelt. Es wird auch Compiled nur ich seh nix. Kann da mal jemand nen Blick drauf werfen?
Code:
  1. unit UTut4;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,OpenGL,
  7.   ExtCtrls, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure FormPaint(Sender: TObject);
  14.   private
  15.     { Private-Deklarationen }
  16.     hrc : HGLRC;
  17.     DC  : HDC;
  18.     procedure SetDCPixelFormat(Handle : HDC);
  19.     procedure Render;
  20.   public
  21.     { Public-Deklarationen }
  22.   end;
  23.  
  24. var
  25.   Form1: TForm1;
  26.   obj  : GLUQuadricOBJ;
  27.  
  28. implementation
  29.  
  30. {$R *.DFM}
  31.  
  32. procedure TForm1.SetDCPixelFormat(Handle : HDC);
  33. var pfd          : TPixelFormatDescriptor;
  34.     nPixelFormat : Integer;
  35. begin
  36.     {Feld wird mit 0en gefuellt}
  37.     FillChar(pfd,SizeOf(pfd),0);
  38.     with pfd do
  39.     begin
  40.          nSize       := SizeOf(pfd);
  41.          nVersion    := 1;
  42.          dwFlags     := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL;
  43.          iPixelType  := PFD_TYPE_RGBA;
  44.          cColorBits  := 24;
  45.          cDepthBits  := 32;
  46.          iLayerType  := PFD_MAIN_PLANE;
  47.     end;
  48.     nPixelFormat := ChoosePixelFormat(Handle, @pfd);
  49.     SetPixelFormat(Handle, nPixelFormat, @pfd);
  50. end;
  51.  
  52. procedure TForm1.FormCreate(Sender: TObject);
  53. begin
  54.      DC := GetDC(Form1.Handle);
  55.      SetDCPixelFormat(DC);
  56.      hrc:=wglCreateContext(DC);
  57.      Obj:=gluNewQuadric;
  58.      gluQuadricDrawStyle(Obj, GL_Fill);
  59. end;
  60.  
  61. procedure TForm1.FormDestroy(Sender: TObject);
  62. begin
  63.      wglDeleteContext(hrc);
  64.      gluDeleteQuadric(Obj);
  65. end;
  66.  
  67. procedure TForm1.Render;
  68. begin
  69. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  70. glTranslatef(0,0,-50);
  71. glColor3f(1.0,0,0);
  72. gluSphere(Obj, 0.2, 16, 16);
  73. SwapBuffers(DC);
  74. end;
  75.  
  76.  
  77. procedure TForm1.FormPaint(Sender: TObject);
  78. begin
  79.      wglMakeCurrent(DC, hrc);
  80.      render;
  81.      wglMakeCurrent(0, 0);
  82. end;
  83.  
  84. end.


Das die Initialisierung noch nicht zu 100% komplett ist, liegt daran, dass bei OnlineGL die Initalisierung von Tut zu Tut vervollständigt wird...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 16:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@"Löcher" :
Google mal nach CSG (Constructive Solid Geometry).Damit kann man Objekte boolean mit anderen Objekten verknüpfen.Ist allerdings recht fortgeschritten.

@Programm :
Bitte mach dich doch erstmal mit den Grundlagen von OpenGL vertraut (siehe dazu unsere Templates).Deine Renderprozedur wird nämlich nicht aufgerufen.Verleg diese am besten ins OnIdle-Event deiner Form.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 16:15 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
OnIdle? Ähm...Ich habs jetzt nochma explizit aufgerufen und jetzt gehts...Du hattest recht...Ich hatte als Basis ein Programm gewählt welches man über einen Butten hat zeichnen lassen. (Und der hat jetzt gefehlt :oops: )

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 19:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Man kann mit OpenGL über den Stencilbuffer relativ einfach CSG-Geometrie darstellen (z.B. mittels einer Kugel ein Loch in einen Würfel bohren) - dies ist aber langsamer, als wenn man das mittels CSG-Operatoren definierte Mesh vorberechnet hätte und einfach dessen Dreiecke darstellen würde.

Mittels OpenGL könnte dies so funktionieren (Beispiel schneidet eine Kugel aus einem Würfel heraus):

Würfel zeichnen
Kugel nur in Stencilbuffer zeichnen, Stencilbuffer bei ZFail inkrementieren
Stenciltest definieren, sodass nur bei gesetztem Stencilbit gezeichnet wird
nur Rückseiten darstellen lassen
Kugel zeichnen

Immerhin kann man auf diese Weise in Echtzeit (!) animierte CSG-Geometrie darstellen, was schon beeindruckend aussehen kann - insbesondere wenn der Betrachter nicht weiß, was für ein fauler Trick da eigentlich dahintersteckt :wink: .

Ein System für CSG-Geometrie sollte folgende Möglichkeiten bieten, zwei Objekte A und B zu kombinieren:

A ohne B
B ohne A
Durchschnitt von A und B
Vereinigung von A und B
Vereinigung von A und B ohne Durchschnitt von A und B

Wemm dir das aus der Mengenlehre bekannt vorkommt - es kommt halt alles wieder im Leben :D .

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 09, 2003 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zu der von Mars angesprochenen Technik gibt es bei Delphi3D eine Demo http://www.delphi3d.net/download/stencilcsg.zip.


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: Google [Bot] und 5 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.008s | 15 Queries | GZIP : On ]