Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Spiele-/Grafikprogrammierung ::  Triangulierung einer Kugel     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Webo
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.05.2012
Beiträge: 1
Beitrag Webo Mitglied 19:14:37 27.05.2012   Titel:   Triangulierung einer Kugel            Zitieren

Hallo zusammen,

ich sitze gerade an meiner Aufgabe und komme irgendwie nicht weiter.

Man soll eine Kugel/Sphäre als Dreiecknetz darstellen. Dazu ist diese http://dl.dropbox.com/u/7305802/triangles.PNG Skizze gegeben und die Formel zur Berechnung des Sphärenradius für gegebene Kugelkoordinaten.

Das vorgegebene Programmgerüst

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
glBegin(GL_POINTS);
  // {
  float c = 0.0f;
 
  for (float theta = 0.0f; theta < 2.0f*M_PI; theta += a, c += a/2.0f)
    for (float phi = 0.0f; phi < 2.0f*M_PI; phi += a)
    {
      // Here something is missing...
 
      float p_1[3] = {sin(theta)*cos(phi+c),
                      sin(theta)*sin(phi+c),
                      cos(theta)};
      glVertex3f(p_1[0], p_1[1], p_1[2]);
 
      // Here something is missing...
 
      // Compute a color value instead of hardware lighting
      if (g_compute_lighting == 1)
      {
        // Here something is missing...
      }
    }
  // }
  glEnd();


Woraus ich jetzt erstmal
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void sp_r(float theta, float phi, float* tochange)
{
    tochange[0] = sin(theta) * cos(phi);
    tochange[1] = sin(theta) * sin(phi);
    tochange[2] = cos(theta);                  
}
 
[...]
 
float c = 0.0f;
    int b = 0;
 
    for (float theta = 0.0f; theta < 2.0f*M_PI; theta += a, c += a/2.0f, b++)
    {
        for (float phi = 0.0f; phi < 2.0f*M_PI; phi += a)
        {
            float p_1[3];
            float p_2[3];
            float p_3[3];
            float p_4[3];
 
            if (b % 2 != 0)
            {
                sp_r(theta + a, phi, p_1);
                sp_r(theta , phi + a/2.0f, p_2);
                sp_r(theta + a, phi + a, p_3);
                sp_r(theta , phi + a + a/2.0f, p_4);
 
            } else
            {                  
                sp_r(theta, phi, p_1);
                sp_r(theta + a, phi + a/2.0f, p_2);
                sp_r(theta, phi + a, p_3);
                sp_r(theta + a, phi + a + a/2.0f, p_4);            
            }
           
            glBegin(GL_TRIANGLES);
                    glVertex3f(p_1[0], p_1[1], p_1[2]);
                    glVertex3f(p_2[0], p_2[1], p_2[2]);
                    glVertex3f(p_3[0], p_3[1], p_3[2]);
 
               
                    glVertex3f(p_2[0], p_2[1], p_2[2]);
                    glVertex3f(p_3[0], p_3[1], p_3[2]);
                    glVertex3f(p_4[0], p_4[1], p_4[2]);
                glEnd();
 
            // Here something is missing...
 
            // Compute a color value instead of hardware lighting
            if (g_compute_lighting == 1)
            {
                // Here something is missing...
            }
        }
        // }
    }

gemacht hab. Allerdings funktioniert das jetzt nur halb. Es fehlen zwischendurch Dreiecke.

Könnte mir bitte jemand auf die Sprünge helfen?


Grüße

Webo
Die erinnerung
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.10.2010
Beiträge: 337
Beitrag Die erinnerung Mitglied 17:55:40 28.05.2012   Titel:              Zitieren

Ne Idee für ne Lösung wäre:

Dir ist bekannt, aus wie vielen Dreiecken die Kugel besteht? Oder hast du zumindest die Möglichkeit herrauszufinden?

Wenn ja ist meine Lösung:
Finde herraus, wie viele Eckpunkte du hast (sind glaube ich genau so viele, wie Dreiecke). Dann verteile diese gleichmäßig über die Kugeloberfläche und mache daraus Dreiecke.

Wäre meine Idee...

_________________
Ich bin icht perfekt!

Aber meistens!
c++.de :: Spiele-/Grafikprogrammierung ::  Triangulierung einer Kugel   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.