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

Aktuelle Zeit: Fr Jul 18, 2025 05: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: Wieder einmal Terrain
BeitragVerfasst: Di Feb 04, 2003 17:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
Ich hätte wieder einmal eine generelle Frage zu Terrains:
Wie generiere ich direkt in meinem Programm ein Terrain? Es sollte natürlich immer noch realistisch aussehen, d.h. ich möchte nicht einfach für jeden Punkt in meinem Terrain als Höhe einen Zufallswert nehmen (das wäre ja idiotisch).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 04, 2003 18:11 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
<a href='http://www.robot-frog.com/3d/hills/index.html' target='_blank'>http://www.robot-frog.com/3d/hills/index.html</a>

ist ganz gut, aber es gibt auch viele andere schöne algos, wie perlin noise, etc.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 06, 2003 16:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
Das mit den Bergen klappt jetzt. Aber ich habe jetzt ein neues Problem:
Um die ganzen Berge zu einem Terrain zusammenzufassen muss ich von den einzelnen Bergen jeweils an den Koordinaten x,y den höchsten Wert nehmen. Das mache ich so:

Code:
  1. var punkt:array [1..30,1..100,1..100] of TGLFloat;
  2.  
  3.  &nbsp; &nbsp; punktfertig:array[1..100,1..100] of TGLFloat;
  4.  
  5.  
  6.  
  7. procedure max;
  8.  
  9. var berg,i,j:Integer;
  10.  
  11. begin
  12.  
  13. for berg := 1 to 30 do
  14.  
  15. begin
  16.  
  17.  for i := 1 to 100 do
  18.  
  19.  &nbsp;begin
  20.  
  21.  &nbsp; for j := 1 to 100 do
  22.  
  23.  &nbsp; &nbsp;begin
  24.  
  25.  &nbsp; &nbsp; if punkt[berg,i,j] > punkt[berg-1,i,j] then punktfertig[i,j] := punkt[berg,i,j]
  26.  
  27.  &nbsp; &nbsp; else punktfertig[i,j] := punkt[berg-1,i,j];
  28.  
  29.  &nbsp; &nbsp; &nbsp; end;
  30.  
  31.  &nbsp;end;
  32.  
  33. end;
  34.  
  35. end;

Im Array Punkt habe ich alle Höhenwerte des Gitters gespeichert, der erste Wert gibt an, zu welchem Berg die Werte gehören, in diesem Fall habe ich also 30 Berge. Im Array punktfertig sollen dann die endgültigen Werte, also jeweils der Höchste für jeden Koordinatenpunkt stehen. Allerdings klappt das nicht so ganz, das Programm berücksichtigt nicht alle Berge. Hat jemand eine Ahnung an was das liegt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 06, 2003 20:01 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Was passiert, wenn Du den else - Zweig wegläßt? Hier sieht es für mich so aus, als ob du zuvor eingetragene Max-Werte durch eventuelle niedrigere überschreibst.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 06, 2003 20:26 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
irgendwie verstehe ich nicht so ganz, was du da machst - soll das eine variante des algorithmus sein, dessen link ich geposted hab? verstehe ich richtig, was du in deinem codeabschnitt tust:
du hast eine reihe von bergen und suchst jetzt den berg, der an der stelle i,j am höchsten ist? 1. das hättest du falsch gemacht, denn du schaust blos, welcher der letzten beiden berge grösser ist(oder ich verstehe dein programm nicht).... in der algorithmusbeschreibung steht alerdings, du sollst die höhenwerte aller berge zusammenzählen und in dem entstehendem 2D Array den grössten und kleinsten Wert suchen:
Zitat:
To generate a complete terrain, then, we need to repeatedly add a number of hills. Two things must be kept in mind when we're doing this. First, we ignore negative height values. The equation shown above will yield a negative result if the point being calculated is farther from the centerpoint than the radius. When this happens, we ignore it. Second, two hills overlap, we add their heights to each other. This gives nice amorphous lumps instead of obvious perfectly round bumps. The following images show a terrain being gradually built up as more and more hills are added.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 07, 2003 14:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
@Kidpaddle:
Wenn ich den else-Zweig weglasse passiert auch nichts.

@DelphiC:
Zitat:
das hättest du falsch gemacht, denn du schaust blos, welcher der letzten beiden berge grösser ist

Ja, genau das ist das Problem. Könntest du mir erklären was ich ändern muss damit das Programm schaut, welcher Berg von allen am größten ist?
Ich bin zwar eigentlich der Meinung das Programm müsste das schon machen, es scheint aber irgendwie doch nicht so zu sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 01, 2005 13:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
vll. mal so versuchen:
Code:
  1.   if punkt[berg,i,j] > punktfertig[i,j] then punktfertig[i,j] := punkt[berg,i,j]
  2.  


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 9 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.008s | 14 Queries | GZIP : On ]