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

Aktuelle Zeit: Do Jul 10, 2025 20:05

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Sphere generator
BeitragVerfasst: Mo Jun 12, 2006 09:57 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Hi,

ich bräuchte einen offenen Code womit man eine Spere erzeugen kann( Den eigentlichen Code ).
Habe in Google dannach gesucht, allerdings nichts gefunden( Vielleicht leide ich ja an einer Sehschwäche? 8) ).

Da dachte ich das zumindestens eine Person wissen würde wo man sowas findet.

thx im Vorraus

mfg

Speedmaster

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 10:00 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Unser Wiki ist allwissend. Das sollte sich eigentlich rumgesprochen haben. ;)

http://wiki.delphigl.com/index.php/Techniken_und_Algorithmen#Geometrie_Objekte

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 10:34 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Flash hat geschrieben:
Unser Wiki ist allwissend. Das sollte sich eigentlich rumgesprochen haben. ;)

http://wiki.delphigl.com/index.php/Techniken_und_Algorithmen#Geometrie_Objekte


:oops: Allerdings sehe ich das es zumindestens atm noch nicht allwissend ist! Interresse an einem Torus Generator?? Kenne die Quelle leider nicht mehr.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 11:33 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Wie Enabled man den das Culling per Normal? Dummerweisse ist meine Sphere nämlich falsch rum.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 12:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Für die Außenseite der Sphere musst du nur die Cullface ändern:
Setz einfach vor die Procedure
glCullFace(GL_FRONT);
und danach wieder glCullFace(GL_BACK);
Ist zwar net so ne tolle Lösung, müsste aber funktionieren.

Zu der Torus-procedure: Ja, wäre nützlich :wink:

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 12:45 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
MatReno hat geschrieben:
Für die Außenseite der Sphere musst du nur die Cullface ändern:
Setz einfach vor die Procedure
glCullFace(GL_FRONT);
und danach wieder glCullFace(GL_BACK);
Ist zwar net so ne tolle Lösung, müsste aber funktionieren.

Zu der Torus-procedure: Ja, wäre nützlich :wink:


Zwar würde es funktionieren, aber da würde ich mir vorher jeden Finger einzelln brechen bevor ich das mache. :shock:

Hier der Code:
Code:
  1.  
  2.         #region Torus Knot Objects
  3.         private struct glCoord
  4.         {
  5.             public float x, y, z;
  6.         }
  7.         private struct glColors
  8.         {
  9.             public float r, g, b;
  10.         }
  11.         private class myObject
  12.         {
  13.             public int numfaces, numverts, numsides;
  14.             public int[] faces;           //numfaces*numsides
  15.             public glCoord[] vertices;     //numverts
  16.             public glColors[] colors;      //numverts
  17.         }
  18.         #endregion
  19.  
  20.         public static VertexBuffer<CustomVertex.PositionColored> TorusKnot(int scalingfactor1, int scalingfactor2, float radius1, int radius2, int radius3)
  21.         {
  22.  
  23.            
  24.             myObject Knot = new myObject();
  25.             float Alpha = 0f, Beta = 0f, Distance = 0f, MinDistance = 0f, Rotation = 0f;
  26.             float X = 0f, Y = 0f, Z = 0f, dx = 0f, dy = 0f, dz = 0f;
  27.             float Value = 0f, modulus = 0f, dist = 0f;
  28.             int index1 = 0, index2 = 0;
  29.            
  30.             Knot.numsides = 4;
  31.             Knot.numverts = 0;
  32.             Knot.numfaces = 0;
  33.  
  34.             Knot.vertices = new glCoord[scalingfactor1 * scalingfactor2];  //myObject.numverts);
  35.             Knot.colors = new glColors[scalingfactor1 * scalingfactor2];  //Knot.numverts);
  36.             Knot.faces = new int[scalingfactor1 * scalingfactor2 * 4 * 4];  //Knot.numfaces*Knot.numsides);
  37.  
  38.             Alpha = 0;
  39.             for (int Count2 = 0; Count2 < scalingfactor2; Count2++)
  40.             {
  41.                 Alpha = (float)(Alpha + 2*Math.PI / scalingfactor2);
  42.                 X = (float)(radius2 * Math.Cos(2 * Alpha) + radius1 * Math.Sin(Alpha));
  43.                 Y = (float)(radius2 * Math.Sin(2 * Alpha) + radius1 * Math.Cos(Alpha));
  44.                 Z = (float)(radius2 * Math.Cos(3 * Alpha));
  45.                 dx = (float)(-2 * radius2 * Math.Sin(2 * Alpha) + radius1 * Math.Cos(Alpha));
  46.                 dy = (float)(2 * radius2 * Math.Cos(2 * Alpha) - radius1 * Math.Sin(Alpha));
  47.                 dz = (float)(-3 * radius2 * Math.Sin(3 * Alpha));
  48.                 Value = (float)(Math.Sqrt(dx * dx + dz * dz));
  49.                 modulus = (float)(Math.Sqrt(dx * dx + dy * dy + dz * dz));
  50.  
  51.                 Beta = 0;
  52.                 for ( int Count1 = 0; Count1 < scalingfactor1; Count1++)
  53.                 {
  54.                     Beta = (float)(Beta + 2 * Math.PI / scalingfactor1);
  55.  
  56.                     Knot.vertices[Knot.numverts].x = (float)(X - radius3 * (Math.Cos(Beta) * dz - Math.Sin(Beta) * dx * dy / modulus) / Value);
  57.                     Knot.vertices[Knot.numverts].y = (float)(Y - radius3 * Math.Sin(Beta) * Value / modulus);
  58.                     Knot.vertices[Knot.numverts].z = (float)(Z + radius3 * (Math.Cos(Beta) * dx + Math.Sin(Beta) * dy * dz / modulus) / Value);
  59.  
  60.  
  61.                     dist =
  62.                     (float)(Math.Sqrt(Knot.vertices[Knot.numverts].x*Knot.vertices[Knot.numverts].x) +
  63.                     Knot.vertices[Knot.numverts].y*Knot.vertices[Knot.numverts].y +
  64.                     Knot.vertices[Knot.numverts].z*Knot.vertices[Knot.numverts].z);
  65.  
  66.                     Knot.colors[Knot.numverts].r = (float)(((2/dist)+(0.5*Math.Sin(Beta)+0.4))/2.0);
  67.                     Knot.colors[Knot.numverts].g = (float)(((2/dist)+(0.5*Math.Sin(Beta)+0.4))/2.0);
  68.                     Knot.colors[Knot.numverts].b = (float)(((2/dist)+(0.5*Math.Sin(Beta)+0.4))/2.0);
  69.  
  70.                     Knot.numverts++;
  71.                 }
  72.             }
  73.  
  74.             for (int Count1 = 0; Count1 < scalingfactor2; Count1++)
  75.             {
  76.                 index1 = Count1 * scalingfactor1;
  77.                 index2 = index1 + scalingfactor1;
  78.                 // MOD ersetzt
  79.                 index2 = index2 % Knot.numverts;
  80.                 Rotation = 0;
  81.                 MinDistance = (Knot.vertices[index1].x - Knot.vertices[index2].x) * (Knot.vertices[index1].x - Knot.vertices[index2].x) +
  82.                               (Knot.vertices[index1].y - Knot.vertices[index2].y) * (Knot.vertices[index1].y - Knot.vertices[index2].y) +
  83.                               (Knot.vertices[index1].z - Knot.vertices[index2].z) * (Knot.vertices[index1].z - Knot.vertices[index2].z);
  84.                 for (int Count2 = 0; Count2 < scalingfactor1; Count2++)
  85.                 {
  86.                     index2 = Count2 + index1 + scalingfactor1;
  87.                     if (Count1 == scalingfactor2 - 1) index2 = Count2;
  88.                     Distance = (Knot.vertices[index1].x - Knot.vertices[index2].x) * (Knot.vertices[index1].x - Knot.vertices[index2].x) +
  89.                                (Knot.vertices[index1].y - Knot.vertices[index2].y) * (Knot.vertices[index1].y - Knot.vertices[index2].y) +
  90.                                (Knot.vertices[index1].z - Knot.vertices[index2].z) * (Knot.vertices[index1].z - Knot.vertices[index2].z);
  91.                     if (Distance < MinDistance)
  92.                     {
  93.                         MinDistance = Distance;
  94.                         Rotation = Count2;
  95.                     }
  96.                 }
  97.  
  98.                 for (int Count2 = 0; Count2 < scalingfactor1; Count2++)
  99.                 {
  100.                     Knot.faces[4 * (index1 + Count2) + 0] = index1 + Count2;
  101.  
  102.                     index2 = Count2 + 1;
  103.                     // Mod ersetzt
  104.                     index2 = index2 % scalingfactor1;
  105.                     Knot.faces[4 * (index1 + Count2) + 1] = index1 + index2;
  106.  
  107.                     index2 = (int)Math.Round(Count2 + Rotation + 1);
  108.                     // Mod ersetzt
  109.                     index2 = index2 % scalingfactor1;
  110.                     // Mod ersetzt
  111.                     Knot.faces[4 * (index1 + Count2) + 2] = (index1 + index2 + scalingfactor1) % Knot.numverts;
  112.  
  113.                     index2 = (int)Math.Round(Count2 + Rotation);
  114.  
  115.                     // Mod ersetzt
  116.                     index2 = index2 % scalingfactor1;
  117.  
  118.                     // Mod ersetzt
  119.                     Knot.faces[4 * (index1 + Count2) + 3] = (index1 + index2 + scalingfactor1) % Knot.numverts;
  120.                     Knot.numfaces++;
  121.                 }
  122.  
  123.  
  124.  
  125.             }
  126.  
  127.             List<CustomVertex.PositionColored> vl = new List<CustomVertex.PositionColored>();
  128.             int j = Knot.numfaces * 4;
  129.             for (int i = 0; i < j; i++)
  130.             {
  131.                 int Count1 = Knot.faces[i];
  132.                 vl.Add(new CustomVertex.PositionColored(Knot.vertices[Count1].x,Knot.vertices[Count1].y,Knot.vertices[Count1].z,
  133.                                                         (byte)(Knot.colors[Count1].r * 2), (byte)(Knot.colors[Count1].g), (byte)(Knot.colors[Count1].b * 255), 255));
  134.             }
  135.  
  136.             Console.WriteLine("Faces: " + Knot.numfaces);
  137.             //Console.WriteLine("Sides: " + Knot.numsides);
  138.             //Console.WriteLine("Vertices: " + Knot.numverts);
  139.  
  140.             Console.WriteLine("Vertex Count: " + Knot.vertices.Length);
  141.             Console.WriteLine("Real Vertex Count: " + vl.Count);
  142.             Console.WriteLine("Vertex Size( Bytes ): " + vl[0].Size * vl.Count);
  143.             Console.WriteLine("Vertex Size( KiloBytes ): " + (vl[0].Size * vl.Count)/1024);
  144.             Console.WriteLine("Vertex Size( MegaBytes ): " + ((vl[0].Size * vl.Count) / 1024)/1024);
  145.  
  146.             Knot = null;
  147.             GC.Collect();
  148.  
  149.             return new VertexBuffer<CustomVertex.PositionColored>(vl.ToArray(),DrawMode.Quads);
  150.         }
  151.  

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 14:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Zitat:
Zwar würde es funktionieren, aber da würde ich mir vorher jeden Finger einzelln brechen bevor ich das mache. :shock:

Ja, kann ich verstehen, besonders elegant ist es net :wink:

Danke für den Torus-code, muss ich dann halt noch in delphi übersetzen, aber werd ich schon hinbekommen. 8)

_________________
http://texelviews.delphigl.com


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 » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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.010s | 14 Queries | GZIP : On ]