Autor Beitrag
Sebo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 14.12.03 19:27 
Hi Leute
kann mir jemand sagen wieviel vertices ich für eine 3d Kugel nehmen sollte, und wie ich die koordinaten für die einzelnen vertices ermittle...
in delphi und mit den directx 8 header dateien von jedi
thx Sebo


Zuletzt bearbeitet von Sebo am So 14.12.03 19:36, insgesamt 1-mal bearbeitet
Lhid
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 831



BeitragVerfasst: So 14.12.03 19:32 
Meinung und mich grundlegend verändert.--> Beiträge gelöscht


Zuletzt bearbeitet von Lhid am Sa 26.09.09 10:48, insgesamt 1-mal bearbeitet
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 14.12.03 21:08 
habe von DirectX programmierung keine Ahnung...
wieviele Vertices du nehmen soltlest hängt davon ab, wie gut diene Kugel aussehen soll und wie schnell das ganze sein soll ;)
beim Aussehen kann man durch die BEleuchtung auch noch was ausgleichen..

um die VertexPositionen zu ermitteln musst du ein bißchen mit schleifen (du brauchst 2 Stück und sin bzw cos rumspielen ;) )
wenn dus nicht hinbekommst, nachdem du es versucht hast (!), dann kann ich dir noch mehr helfen :)
Sebo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 14.12.03 21:16 
hab schon versucht hab aber nur eine röhre hinbekommen ;(
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 14.12.03 21:27 
habs grad leider nur für ne Halbkugel da, aber dass sollte sich erweitern lassen und dann brauch ich mir jetzt nicht die Mühe machen ;) :mrgreen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  for i := 0 to 19 do
    for k := 0 to 19 do
    begin
      xrot := 90 * ((i + 1) / 20);
      YRot := 360 * ((k + 1) / 20);
      Skydome[i, k][0] := cos(degtorad(yrot - 90)) * cos(degtorad(xrot)) * 5;
      Skydome[i, k][1] := -sin(degtorad(xrot)) * 5 + 1;
      Skydome[i, k][2] := -cos(degtorad(yrot)) * cos(degtorad(xrot)) * 5;
    end;

Skydome ist ein 2-Dimensionales Array, in dem die Werte gespeichert werden, weil die bei jedem Renderdurchlauf neu zu errechnen unnötiger Ressourcenverbrauch wäre...

zeichnen zue ich das wie folgt (3Vertices werden jeweils als 3Eck dargestellt...)




ausblenden volle Höhe Delphi-Quelltext
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:
 glBegin(GL_TRIANGLES);
  for i := 0 to 19 do
    for k := 0 to 19 do
    begin
         if k <> 19 then glVertex3f(Skydome[i, k + 1,0], Skydome[i, k + 1,1], Skydome[i, k + 1][2])
      else
        glVertex3f(Skydome[i, 0,0], Skydome[i, 0,1], Skydome[i, 0,2]);

      glVertex3f(Skydome[i, k,0], Skydome[i, k,1], Skydome[i, k,2]);

        if i <> 19 then glVertex3f(Skydome[i + 1,k,0], Skydome[i + 1,k,1],          Skydome[i + 1,k,2])
      else
        glVertex3f(Spitze[0], Spitze[1], Spitze[2]);


      if i <> 19 then glVertex3f(Skydome[i + 1,k,0], Skydome[i + 1,k,1],
          Skydome[i + 1,k,2])
      else
        glVertex3f(Spitze[0], Spitze[1], Spitze[2]);


      if (i <> 19) AND (k <> 19) then glVertex3f(Skydome[i + 1,k + 1][0],
          Skydome[i + 1,k + 1,1], Skydome[i + 1,k + 1,2])
      else
      begin
        if i = k then  glVertex3f(Skydome[0,0][0], Skydome[0,0][1], Skydome[0,0,2])
        else if k = 19 then   glVertex3f(Skydome[i + 1,0,0], Skydome[i + 1,0,1],
            Skydome[i + 1,0,2])
        else
          glVertex3f(Skydome[0,k + 1,0], Skydome[0,k + 1][1], Skydome[0,k + 1,2]);
      end;

       if (k <> 19) then glVertex3f(Skydome[i, k + 1,0], Skydome[i, k + 1,1],Skydome[i, k + 1,2])
      else
        glVertex3f(Skydome[i, 0,0], Skydome[i, 0,1], Skydome[i, 0,2]);
    end;
glEnd();


ich weiß nicht mehr inwieweit die verschachtelung nötig war... kommt mir im Moment etwas kompliziert vor :-/
Spitze ist übrigens so definiert:
ausblenden Delphi-Quelltext
1:
2:
const
  Spitze : array[0..2] of Integer = (0,1,0);