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

Aktuelle Zeit: Fr Jul 18, 2025 14:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Viertelkreis-Ring
BeitragVerfasst: So Aug 10, 2008 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Apr 04, 2008 17:24
Beiträge: 30
Hallo! :D

Ich möchte ein Simulationsspiel ähnlich wie Locomotion schreiben nur in 3d. Ich bekomme aber gewisse Probleme beim berechnen eines Viertelkreises.

Mein Code:
Code:
  1.  
  2. var
  3.   alpha, Steps,              // Alpha = Winkel, Steps: Die Schritte bzw. die Genauigkeit der Berechnung
  4.   RadI, RadA: TGLFloat; // Radien (RadI = Innen, RadA = Außen)
  5. begin
  6.   ///
  7.   /// Variabeln Werte zuordnen
  8.   RadI := 1.5;
  9.   RadA := 3.5;
  10.   Steps := 1;
  11.  
  12.   glBegin( GL_POLYGON );
  13.  
  14.       ///
  15.       /// Außenkreis ( gegen Uhrzeigersinn berechnet )
  16.       alpha := 90;
  17.       while alpha >= 0 do
  18.         begin
  19.           Phoenix3D.Point( ( cos( DegToRad(alpha) )*RadA ), ( sin( DegToRad(alpha) )*RadA ), 0, 0, 0 );
  20.           alpha := alpha - Steps;
  21.         end;
  22.  
  23.       ///
  24.       /// Innenkreis ( mit Uhrzeigersinn berechnet )
  25.       alpha := 90;
  26.       while alpha >= 0 do
  27.         begin
  28.           Phoenix3D.Point( ( sin( DegToRad(alpha) )*RadI ), ( cos( DegToRad(alpha) )*RadI ), 0, 0, 0 );
  29.           alpha := alpha - Steps;
  30.         end;
  31.  
  32.  
  33.     glEnd;
  34.  


Das Problem ist, dass er den Innenkreis nicht vollständig zeichnet. Er lässt einfach Punkte weg, egal wie hoch die Steps eingestellt sind.
Vielen Dank für die Hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 00:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Folgendes sollte korrekt und um einiges performanter sein.
Code:
  1. glBegin( GL_TRIANGLE_STRIP );
  2. alpha := 90;
  3. while alpha >= 0 do
  4. begin
  5.   x:=cos( DegToRad(alpha) );
  6.   y:=sin( DegToRad(alpha) );
  7.   Phoenix3D.Point( ( x*RadA ), ( y*RadA ), 0, 0, 0 );
  8.   Phoenix3D.Point( ( x*RadI ), ( y*RadI ), 0, 0, 0 );
  9.   alpha := alpha - Steps;
  10. end;
  11. glEnd();
  12.  

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 14:54 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
glPolygon ist afaik nur für konvexe Polygone definiert.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 16:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Völlig korrekt, mehr dazu kannst du im Wiki finden, wenn du glBegin suchst.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 20:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Apr 04, 2008 17:24
Beiträge: 30
Hi! Danke für die Antowrten! Ich verwende jetzt ein GL_QUAD_STRIP:

Code:
  1.  
  2. glBegin( GL_QUAD_STRIP );
  3.     alpha := 90;
  4.       while alpha >= 0 do
  5.         begin
  6.           Point( ( cos( DegToRad(alpha) )*RadI ), ( sin( DegToRad(alpha) )*RadI ), 0, 0, 0 ); // Diese Funktion setzt einfach nur einen Punkt mit glVertex3f.
  7.           Point( ( cos( DegToRad(alpha) )*RadA ), ( sin( DegToRad(alpha) )*RadA ), 0, 0, 0 );
  8.           alpha := alpha - Steps;
  9.         end;
  10. glEnd;
  11.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

funktioniert auch mit gluPartialDisk :)

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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 ]