Wer hilft mir eine Icosphere zu programmieren? Bezahle auch! :)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Wer hilft mir eine Icosphere zu programmieren? Bezahle auch! :)

      Hallo an alle schlauen Köpfe hier,

      wisst ihr was eine Icosphere ist? Wenn man in 3d eine Kugel generieren möchte, kann man entweder eine UV-Sphere machen oder eine Ico- oder auch Icosasphere machen.

      DIe UV-Sphere hat den Nachteil, das die Texture an den Polen verzerrt und zusammengedrückt aussehen. Und man hat Probleme wenn man die UV-Sphere deformieren will.
      Ich möchte einen Planeten generieren mit Täler und Bergen. Habe schon ein Skript geschrieben, welches mit Spheremapping in Kombination mit Perlin Noise einen schönen, realistischen Planeten erzeugt. Als ich meine Funktion auf eine UV-Sphere anwandte, musste ich feststellen, dass die Vertexe nicht mehr zusammenhängend waren. Es geht schlicht einfach nicht mit so einer Kugel. Was ich brauche ist eine Icosphere, die die Eigenschaft hat das alle Vertexte gleich groß sind. Hier könnt ihr sehen wie sowas aussieht:

      Links die Icosphere und rechts seht ihr eine "normale" Kugel, wie es sie standartmäßig im Game Maker gibt.



      Ich habe im Internet eine Anleitung gefunden wie man (ich glaube in C++) so eine geomtrische Figur erzeugt.
      Das Prinzip ist, dass man jedes Dreick teil und aus einem Vertex vier macht. Und das kann man so oft tun wie man, bis eine schöne runde Form ensteht.

      Hab versucht das nach meiner Vorstellung zu prgrammieren aber es klappt nicht. Diese Anleitung hilft mir auch nicht viel, weil ich diese Sprache nicht ganz vertsehe.
      Vielleicht kann jemand dabei helfen das in GML zu übersetzen.

      Als kleinen Anreiz würde ich demjenigen der mir hilft 10 EUR per Paypal überweisen, wenn wir das Ding zum "laufen" bringen.
      Es übersteigt einfach mein logisches Denkvermögen und meine mathematischen Kenntnisse.

      Ich weiß zwar wie man Primitives macht und auch die Normalen und Textur Koordinaten berechnet aber ich check nicht wie man die Verschachtelung in einer Schleifen angehen muss.
      Ziel wäre ein Skript das eine Icosphere erzsugt und man einstellen kann wie oft die Vertexe zerteilt werden und neue Vertexe entstehen.

      Da mir schon keiner bei meinem Bumpmapping Shader helfen kann oder mag, hoffe ich dass hier jemand weiter weiss.

      Also Bezahlung entweder 10 Euro oder wenn das Planet Asset fertig ist, kriegt er es umsont. Ich habe vor, dass wenn es klappt, die Skripte für 15 $ zuverkaufen. (Inhalt wäre dann Shader für Licht und Lichtreflexion, eventuel Bumpmapping, Landschaftsgenerator via Perlin Noise, Grid und sphere mapping. Und eine Physic dass man auf dem Plaeten laufen kann mit Schwerkraft und so.

      Ran an den Braten! ^^
    • Ich hab mich mal rangesetzt und etwas Nettes geschrieben. Habe dabei alles ohne Anleitung gemacht:

      GML-Quellcode

      1. ///d3d_model_icosphere(subdivisions, size);
      2. var s = (1+sqrt(5))/2;
      3. var t = sqrt(1+s*s);
      4. s = s/t;
      5. t = 1/t;
      6. var v, faces;
      7. v[0, 0] = s; v[0, 1] = t; v[0, 2] = 0;
      8. v[1, 0] = -s; v[1, 1] = t; v[1, 2] = 0;
      9. v[2, 0] = s; v[2, 1] = -t; v[2, 2] = 0;
      10. v[3, 0] = -s; v[3, 1] = -t; v[3, 2] = 0;
      11. v[4, 0] = t; v[4, 1] = 0; v[4, 2] = s;
      12. v[5, 0] = t; v[5, 1] = 0; v[5, 2] = -s;
      13. v[6, 0] = -t; v[6, 1] = 0; v[6, 2] = s;
      14. v[7, 0] = -t; v[7, 1] = 0; v[7, 2] = -s;
      15. v[8, 0] = 0; v[8, 1] = s; v[8, 2] = t;
      16. v[9, 0] = 0; v[9, 1] = -s; v[9, 2] = t;
      17. v[10, 0] = 0; v[10, 1] = s; v[10, 2] = -t;
      18. v[11, 0] = 0; v[11, 1] = -s; v[11, 2] = t;
      19. var v_number = 12;
      20. faces[0, 0] = 0; faces[0, 1] = 8; faces[0, 2] = 4;
      21. faces[1, 0] = 0; faces[1, 1] = 5; faces[1, 2] = 10;
      22. faces[2, 0] = 2; faces[2, 1] = 4; faces[2, 2] = 9;
      23. faces[3, 0] = 2; faces[3, 1] = 11; faces[3, 2] = 5;
      24. faces[4, 0] = 1; faces[4, 1] = 6; faces[4, 2] = 8;
      25. faces[5, 0] = 1; faces[5, 1] = 10; faces[5, 2] = 7;
      26. faces[6, 0] = 3; faces[6, 1] = 9; faces[6, 2] = 6;
      27. faces[7, 0] = 3; faces[7, 1] = 7; faces[7, 2] = 11;
      28. faces[8, 0] = 0; faces[8, 1] = 10; faces[8, 2] = 8;
      29. faces[9, 0] = 1; faces[9, 1] = 8; faces[9, 2] = 10;
      30. faces[10, 0] = 2; faces[10, 1] = 9; faces[10, 2] = 11;
      31. faces[11, 0] = 3; faces[11, 1] = 11; faces[11, 2] = 9;
      32. faces[12, 0] = 4; faces[12, 1] = 2; faces[12, 2] = 0;
      33. faces[13, 0] = 5; faces[13, 1] = 0; faces[13, 2] = 2;
      34. faces[14, 0] = 6; faces[14, 1] = 1; faces[14, 2] = 3;
      35. faces[15, 0] = 7; faces[15, 1] = 3; faces[15, 2] = 1;
      36. faces[16, 0] = 8; faces[16, 1] = 6; faces[16, 2] = 4;
      37. faces[17, 0] = 9; faces[17, 1] = 4; faces[17, 2] = 6;
      38. faces[18, 0] = 10; faces[18, 1] = 5; faces[18, 2] = 7;
      39. faces[19, 0] = 11; faces[19, 1] = 7; faces[19, 2] = 5;
      40. var f_number = 20;
      41. var v1, v2, v3, dis;
      42. repeat(argument0)
      43. {
      44. for(i = 0; i < f_number; i++)
      45. {
      46. v1 = faces[i, 0];
      47. v2 = faces[i, 1];
      48. v3 = faces[i, 2];
      49. //Flächen hinzufügen
      50. faces[i, 0] = v_number; faces[i, 1] = v_number + 1; faces[i, 2] = v_number + 2;
      51. faces[f_number + i * 3, 0] = v1; faces[f_number + i * 3, 1] = v_number; faces[f_number + i * 3, 2] = v_number + 2;
      52. faces[f_number + i * 3 + 1, 0] = v2; faces[f_number + i * 3 + 1, 1] = v_number + 1; faces[f_number + i * 3 + 1, 2] = v_number;
      53. faces[f_number + i * 3 + 2, 0] = v3; faces[f_number + i * 3 + 2, 1] = v_number + 2; faces[f_number + i * 3 + 2, 2] = v_number + 1;
      54. //Vertexe hinzufügen
      55. v[v_number, 0] = (v[v1, 0] + v[v2, 0]) * 0.5;
      56. v[v_number, 1] = (v[v1, 1] + v[v2, 1]) * 0.5;
      57. v[v_number, 2] = (v[v1, 2] + v[v2, 2]) * 0.5;
      58. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      59. v[v_number, 0] /= dis;
      60. v[v_number, 1] /= dis;
      61. v[v_number, 2] /= dis;
      62. v_number++;
      63. v[v_number, 0] = (v[v2, 0] + v[v3, 0]) * 0.5;
      64. v[v_number, 1] = (v[v2, 1] + v[v3, 1]) * 0.5;
      65. v[v_number, 2] = (v[v2, 2] + v[v3, 2]) * 0.5;
      66. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      67. v[v_number, 0] /= dis;
      68. v[v_number, 1] /= dis;
      69. v[v_number, 2] /= dis;
      70. v_number++;
      71. v[v_number, 0] = (v[v3, 0] + v[v1, 0]) * 0.5;
      72. v[v_number, 1] = (v[v3, 1] + v[v1, 1]) * 0.5;
      73. v[v_number, 2] = (v[v3, 2] + v[v1, 2]) * 0.5;
      74. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      75. v[v_number, 0] /= dis;
      76. v[v_number, 1] /= dis;
      77. v[v_number, 2] /= dis;
      78. v_number++;
      79. }
      80. f_number *= 4;
      81. }
      82. var mdl_icosphere = d3d_model_create();
      83. d3d_model_primitive_begin(mdl_icosphere, pr_trianglelist);
      84. for(i = 0; i < f_number; i++)
      85. {
      86. v1 = faces[i, 0];
      87. v2 = faces[i, 1];
      88. v3 = faces[i, 2];
      89. d3d_model_vertex_normal_texture(mdl_icosphere, v[v1, 0] * argument1, v[v1, 1] * argument1, v[v1, 2] * argument1, v[v1, 0], v[v1, 1], v[v1, 2], 0, 0);
      90. d3d_model_vertex_normal_texture(mdl_icosphere, v[v2, 0] * argument1, v[v2, 1] * argument1, v[v2, 2] * argument1, v[v2, 0], v[v2, 1], v[v2, 2], 1, 0);
      91. d3d_model_vertex_normal_texture(mdl_icosphere, v[v3, 0] * argument1, v[v3, 1] * argument1, v[v3, 2] * argument1, v[v3, 0], v[v3, 1], v[v3, 2], 0, 1);
      92. }
      93. d3d_model_primitive_end(mdl_icosphere);
      94. return mdl_icosphere;
      Alles anzeigen


      Ich kann dir auch beim Bumpmapping helfen, weil ich schon so einen Shader geschrieben habe. Allerdings ist der Code nicht aufgräumt, wesshalb ich es noch nicht veröffentlicht habe.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Chris987 ()

    • You're awesome dude! :)

      Perfekt, das Skript macht genau das was es soll. Ich glaube dass hätte ich im Leben nicht hinbekommen.
      Ich hab dein Skript jetzt noch um meine Arbeit erweitert und jetzt kann man ganz schöne Planeten, oder eher Asteroiden kreieren:



      Das neue Skript schaut jetzt so aus:
      Spoiler anzeigen

      Quellcode

      1. ///d3d_model_planet_normal(subdivisions, size);
      2. var s = (1+sqrt(5))/2;
      3. var t = sqrt(1+s*s);
      4. s = s/t;
      5. t = 1/t;
      6. var v, faces;
      7. v[0, 0] = s; v[0, 1] = t; v[0, 2] = 0;
      8. v[1, 0] = -s; v[1, 1] = t; v[1, 2] = 0;
      9. v[2, 0] = s; v[2, 1] = -t; v[2, 2] = 0;
      10. v[3, 0] = -s; v[3, 1] = -t; v[3, 2] = 0;
      11. v[4, 0] = t; v[4, 1] = 0; v[4, 2] = s;
      12. v[5, 0] = t; v[5, 1] = 0; v[5, 2] = -s;
      13. v[6, 0] = -t; v[6, 1] = 0; v[6, 2] = s;
      14. v[7, 0] = -t; v[7, 1] = 0; v[7, 2] = -s;
      15. v[8, 0] = 0; v[8, 1] = s; v[8, 2] = t;
      16. v[9, 0] = 0; v[9, 1] = -s; v[9, 2] = t;
      17. v[10, 0] = 0; v[10, 1] = s; v[10, 2] = -t;
      18. v[11, 0] = 0; v[11, 1] = -s; v[11, 2] = t;
      19. var v_number = 12;
      20. faces[0, 0] = 0; faces[0, 1] = 8; faces[0, 2] = 4;
      21. faces[1, 0] = 0; faces[1, 1] = 5; faces[1, 2] = 10;
      22. faces[2, 0] = 2; faces[2, 1] = 4; faces[2, 2] = 9;
      23. faces[3, 0] = 2; faces[3, 1] = 11; faces[3, 2] = 5;
      24. faces[4, 0] = 1; faces[4, 1] = 6; faces[4, 2] = 8;
      25. faces[5, 0] = 1; faces[5, 1] = 10; faces[5, 2] = 7;
      26. faces[6, 0] = 3; faces[6, 1] = 9; faces[6, 2] = 6;
      27. faces[7, 0] = 3; faces[7, 1] = 7; faces[7, 2] = 11;
      28. faces[8, 0] = 0; faces[8, 1] = 10; faces[8, 2] = 8;
      29. faces[9, 0] = 1; faces[9, 1] = 8; faces[9, 2] = 10;
      30. faces[10, 0] = 2; faces[10, 1] = 9; faces[10, 2] = 11;
      31. faces[11, 0] = 3; faces[11, 1] = 11; faces[11, 2] = 9;
      32. faces[12, 0] = 4; faces[12, 1] = 2; faces[12, 2] = 0;
      33. faces[13, 0] = 5; faces[13, 1] = 0; faces[13, 2] = 2;
      34. faces[14, 0] = 6; faces[14, 1] = 1; faces[14, 2] = 3;
      35. faces[15, 0] = 7; faces[15, 1] = 3; faces[15, 2] = 1;
      36. faces[16, 0] = 8; faces[16, 1] = 6; faces[16, 2] = 4;
      37. faces[17, 0] = 9; faces[17, 1] = 4; faces[17, 2] = 6;
      38. faces[18, 0] = 10; faces[18, 1] = 5; faces[18, 2] = 7;
      39. faces[19, 0] = 11; faces[19, 1] = 7; faces[19, 2] = 5;
      40. var f_number = 20;
      41. var v1, v2, v3, dis;
      42. repeat(argument0)
      43. {
      44. for(i = 0; i < f_number; i++)
      45. {
      46. v1 = faces[i, 0];
      47. v2 = faces[i, 1];
      48. v3 = faces[i, 2];
      49. //Flächen hinzufügen
      50. faces[i, 0] = v_number; faces[i, 1] = v_number + 1; faces[i, 2] = v_number + 2;
      51. faces[f_number + i * 3, 0] = v1; faces[f_number + i * 3, 1] = v_number; faces[f_number + i * 3, 2] = v_number + 2;
      52. faces[f_number + i * 3 + 1, 0] = v2; faces[f_number + i * 3 + 1, 1] = v_number + 1; faces[f_number + i * 3 + 1, 2] = v_number;
      53. faces[f_number + i * 3 + 2, 0] = v3; faces[f_number + i * 3 + 2, 1] = v_number + 2; faces[f_number + i * 3 + 2, 2] = v_number + 1;
      54. //Vertexe hinzufügen
      55. v[v_number, 0] = (v[v1, 0] + v[v2, 0]) * 0.5;
      56. v[v_number, 1] = (v[v1, 1] + v[v2, 1]) * 0.5;
      57. v[v_number, 2] = (v[v1, 2] + v[v2, 2]) * 0.5;
      58. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      59. v[v_number, 0] /= dis;
      60. v[v_number, 1] /= dis;
      61. v[v_number, 2] /= dis;
      62. v_number++;
      63. v[v_number, 0] = (v[v2, 0] + v[v3, 0]) * 0.5;
      64. v[v_number, 1] = (v[v2, 1] + v[v3, 1]) * 0.5;
      65. v[v_number, 2] = (v[v2, 2] + v[v3, 2]) * 0.5;
      66. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      67. v[v_number, 0] /= dis;
      68. v[v_number, 1] /= dis;
      69. v[v_number, 2] /= dis;
      70. v_number++;
      71. v[v_number, 0] = (v[v3, 0] + v[v1, 0]) * 0.5;
      72. v[v_number, 1] = (v[v3, 1] + v[v1, 1]) * 0.5;
      73. v[v_number, 2] = (v[v3, 2] + v[v1, 2]) * 0.5;
      74. dis = sqrt(v[v_number, 0]*v[v_number, 0] + v[v_number, 1]*v[v_number, 1] + v[v_number, 2]*v[v_number, 2]);
      75. v[v_number, 0] /= dis;
      76. v[v_number, 1] /= dis;
      77. v[v_number, 2] /= dis;
      78. v_number++;
      79. }
      80. f_number *= 4;
      81. }
      82. var mdl_icosphere = d3d_model_create();
      83. d3d_model_primitive_begin(mdl_icosphere, pr_trianglelist);
      84. for(i = 0; i < f_number; i++)
      85. {
      86. v1 = faces[i, 0];
      87. v2 = faces[i, 1];
      88. v3 = faces[i, 2];
      89. scr_sphere_mapping(v[v1, 0] * argument1, v[v1, 1] * argument1, v[v1, 2] * argument1, v[v1, 0], v[v1, 1], v[v1, 2]);
      90. var h = height[# round(U * gridparts), round(V * gridparts)];
      91. r = sqrt(v[v1, 0]*v[v1, 0] + v[v1, 1]*v[v1, 1] + v[v1, 2]*v[v1, 2])
      92. angle = arctan(v[v1, 1] / v[v1, 0])
      93. pitch = arccos(v[v1, 2] / r)
      94. xup[0] = h * cos(degtorad(angle))*cos(degtorad(pitch));
      95. yup[0] = -h * sin(degtorad(angle))*cos(degtorad(pitch));
      96. zup[0] = h * sin(degtorad(pitch));
      97. scr_sphere_mapping(v[v2, 0] * argument1, v[v2, 1] * argument1, v[v2, 2] * argument1, v[v2, 0], v[v2, 1], v[v2, 2]);
      98. var h = height[# round(U * gridparts), round(V * gridparts)];
      99. r = sqrt(v[v2, 0]*v[v2, 0] + v[v2, 1]*v[v2, 1] + v[v2, 2]*v[v2, 2])
      100. angle = arctan(v[v2, 1] / v[v2, 0])
      101. pitch = arccos(v[v2, 2] / r)
      102. xup[1] = h * cos(degtorad(angle))*cos(degtorad(pitch));
      103. yup[1] = -h * sin(degtorad(angle))*cos(degtorad(pitch));
      104. zup[1] = h * sin(degtorad(pitch));
      105. scr_sphere_mapping(v[v3, 0] * argument1, v[v3, 1] * argument1, v[v3, 2] * argument1, v[v3, 0], v[v3, 1], v[v3, 2]);
      106. var h = height[# round(U * gridparts), round(V * gridparts)];
      107. r = sqrt(v[v3, 0]*v[v3, 0] + v[v3, 1]*v[v3, 1] + v[v3, 2]*v[v3, 2])
      108. angle = arctan(v[v3, 1] / v[v3, 0])
      109. pitch = arccos(v[v3, 2] / r)
      110. xup[2] = h * cos(degtorad(angle))*cos(degtorad(pitch));
      111. yup[2] = -h * sin(degtorad(angle))*cos(degtorad(pitch));
      112. zup[2] = h * sin(degtorad(pitch));
      113. var normal_x, normal_y, normal_z;
      114. normal_x = (v[v1, 1] * argument1 + yup[0] * v[v2, 2] * argument1 + zup[1]) - ( v[v1, 2] * argument1 + zup[0] - v[v2, 1] * argument1 + yup[1]);
      115. normal_y = - ( (v[v2, 2] * argument1 + zup[1] * v[v1, 0] * argument1 + xup[0]) - (v[v2, 0] * argument1 + xup[1] * v[v1, 2] * argument1 + zup[0]) );
      116. normal_z = (v[v1, 0] * argument1 + xup[0] * v[v2, 1] * argument1 + yup[1]) - (v[v1, 1] * argument1 + yup[0] * v[v2, 0] * argument1 + xup[1])
      117. scr_normalize_vector(normal_x, normal_y, normal_z, 0);
      118. normal_x = vx[0];
      119. normal_y = vy[0];
      120. normal_z = vz[0];
      121. d3d_model_vertex_normal_texture(mdl_icosphere, v[v1, 0] * argument1 + xup[0], v[v1, 1] * argument1 + yup[0], v[v1, 2] * argument1 + zup[0], normal_x, normal_y, normal_z, 0, 0);
      122. d3d_model_vertex_normal_texture(mdl_icosphere, v[v2, 0] * argument1 + xup[1], v[v2, 1] * argument1 + yup[1], v[v2, 2] * argument1 + zup[1], normal_x, normal_y, normal_z, 1, 0);
      123. d3d_model_vertex_normal_texture(mdl_icosphere, v[v3, 0] * argument1 + xup[2], v[v3, 1] * argument1 + yup[2], v[v3, 2] * argument1 + zup[2], normal_x, normal_y, normal_z, 0, 1);
      124. }
      125. d3d_model_primitive_end(mdl_icosphere);
      126. return mdl_icosphere;
      Alles anzeigen



      Wenn ihr diese Planetenfunktion verwenden wollt, braucht ihr auch noch folgende Skripte:

      Quellcode

      1. ///scr_sphere_mapping(ax,ay,az, bx,by,bz);
      2. scr_normalize_vector(argument0,argument1,argument2, 1);
      3. scr_normalize_vector(argument3,argument4,argument5, 2);
      4. scr_reflect(vx[1],vy[1],vz[1], vx[2],vy[2],vz[2]);
      5. var m = 2 * sqrt(power(vx_r, 2) + power(vy_r, 2) + power(vz_r + 1, 2));
      6. globalvar U, V;
      7. U = vx_r / m + 0.5;
      8. V = vy_r / m + 0.5;


      Quellcode

      1. ///scr_normalize_vector(vx,vy,vz, array index);
      2. var len = sqrt(argument0*argument0 + argument1*argument1 + argument2*argument2);
      3. globalvar vx, vy ,vz;
      4. vx[argument3] = argument0 / len;
      5. vy[argument3] = argument1 / len;
      6. vz[argument3] = argument2 / len;


      Quellcode

      1. ///scr_cross(ax, ay, az, bx, by, bz);
      2. var _ax = argument0;
      3. var _ay = argument1;
      4. var _az = argument2;
      5. var _bx = argument3;
      6. var _by = argument4;
      7. var _bz = argument5;
      8. globalvar vx_c, vy_c, vz_c;
      9. vx_c = _ay * _bz - _az * _by;
      10. vy_c = _az * _bx - _ax * _bz;
      11. vz_c = _ax * _by - _ay * _bx;
      Alles anzeigen


      Quellcode

      1. ///scr_dot(ax, ay, az, bx, by, bz);
      2. return argument0 * argument3 + argument1 * argument4 + argument2 * argument5;


      Quellcode

      1. ///scr_reflect(ax,ay,az, bx,by,vz);
      2. var _ax = argument0;
      3. var _ay = argument1;
      4. var _az = argument2;
      5. var _bx = argument3;
      6. var _by = argument4;
      7. var _bz = argument5;
      8. globalvar vx_r, vy_r, vz_r;
      9. vx_r = _ax - 2 * scr_dot(_ax,_ay,_az, _bx,_by,_bz) * _bx;
      10. vy_r = _ay - 2 * scr_dot(_ax,_ay,_az, _bx,_by,_bz) * _by;
      11. vz_r = _az - 2 * scr_dot(_ax,_ay,_az, _bx,_by,_bz) * _bz;
      Alles anzeigen


      Außerdem müsst ihr einen ds_grid mit den Namen "Height" erstellen, den ihr als Heightmap verwendet.
      Am Besten nutzt ihr Perlin Noise um die Höheninformationen zu erstellen.


      Jetzt ist da nur noch eine Sache... die Texturkoordinaten in deinem Skript sind ja so, dass jedes Polygon die ganze Textur abbildet. Also das sich die Textur wiederholt. Ich möchte aber mit der Hilfe der Heightmap mittels Surface eine Textur generieren. Mit Gras und da wo Berge sind mit einer Steintextur usw. Habe versucht die UVs mit meiner Spheremapping-Technik zuermitteln, aber da hab ich wohl was falsch gemacht, weil die Textur an manchen Stellen des Planeten verzerrt ist.

      Wie muss ich U und V berechnen?