Y-Koordinate kann nicht richtig ermittelt werden...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

crazy_down

Betreff: Y-Koordinate kann nicht richtig ermittelt werden...

BeitragDo, März 01, 2007 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, Ich lasse in einer Schleife 3D Objekte einlesen und will sie per Zufall setzen lassen.

Code: [AUSKLAPPEN]
;Zufallsseed setzen
SeedRnd MilliSecs()
;Platz für 20 Bäume schaffen
Dim tree(20)
;Masterbaum einlesen
Global mastertree=LoadAnimMesh("baum.3DS")

Function trees()
   ;Schleife einleiten
   For count = 1 To 20

      ;Baum vom Masterbaum kopieren
       tree(count)=CopyMesh(mastertree)

      ;X und Z Koordinaten per Zufall bestimmen
      x#=Rnd(50,max_terrain_xkoordinate)
      z#=Rnd(50,max_terrain_zkoordinate)

      ;Terrainhöhe der X/Z Koordinaten vom Terrain lesen
      y#=TerrainY#(terrain,x#,0,z#)

      ;Baum skalieren und an X/Z positionieren
      ScaleEntity tree(count),0.15,0.15,0.15
      PositionEntity tree(count),x#,y#,z#;RndSeed()

        
   Next
End Function


dann rufe ich die Funktion in der Hauptschleife auf.

Tue ich dies, ist der Baum außerhalb der Terrains genau an der ecke wo es beginnen soll auf einer Ebene die ich Erstellt habe.

Mache ich die schleife allerdings nciht in der Funktion sondern direkt in der Hauptschleife, werden die Bäme gesetzt. Allerdings nicht richtig.

Ergebniss soll sein: Das eine Kopie des Baumes erstellt wird vom Mastertree dann die Y Koordinate des Terrains ermittelt wird und zufällig eine Z und X koordinate. Damit soll der Baum auf meinem Hügeligem Terrain immer auf dem Boden bleiben. Die y-Koordinate wird nur einmal ermittel und zwar genau an der ecke. Die restlichen bäume werden mit dem selben Wert gesetzt.

Wo liegt der Fehler mit dem Wertz und der Funktion?

Danke schonmal greetz Ciryx.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 01, 2007 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus deinem Code kann ich jetzt spontan kein Fehler erkennen. Ich vermute mal, dass eventuell die Bäume plaziert werden, bevor Terrain Skalliert wurde. Kann das sein? Hast du auch überprüft, ob die Bäume ihren Koordinatenursprung auch unten beim Stamm/Wurzeln haben?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

crazy_down

BeitragDo, März 01, 2007 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich lasse meine Bäume erst nach dem Skalieren des Terrains setzen.

Wie ermittel ich den Koordinatenursprung des Objektes ?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 01, 2007 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Üblich wird der Koordinatenursprung mit einem Punkt oder ähnlichem bei einem 3D-Editor angezeigt.

Alternativ kannst du probehalber ein Baum laden und ihn per RotateEntity baum,rnd(0,360),rnd(0,360),rnd(0,360) rotieren lassen. Wenn die Wurzel in der mitte bleibt ist alles klar. Wenn der Baum sich aber in etwa seinem Schwerpunkt dreht - Meshmittelpunkt - so ist es nicht ok, und man sollte dies ändern oder unter Einsatz im Blitz mit berücksichtigen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

crazy_down

BeitragDo, März 01, 2007 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh Man ich habe ewig gebraucht bis er mal Rotiert hat.
Also der Koordinatenurspruing liegt genau an der Wurzel also wo er liegen soll.
Aber mir ist aufgefallen...

Ich konnte keinen der Kopierten Bäume drehen nur den Mastertree.
Also irgendwo muss ich da noch einen Fehler haben.

Edit:
Wenn ich den Mastertree verschiebe und nach der y Koordinate platzieren lasse, funktioniert es.
 

coldie

BeitragDo, März 01, 2007 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch doch mal die Koordinaten nach der Berechnung nochmal durch TformPoint zu schicken.


also so

Code: [AUSKLAPPEN]


[...]
      ;Baum vom Masterbaum kopieren
       tree(count)=CopyMesh(mastertree)

      ;X und Z Koordinaten per Zufall bestimmen
      x#=Rnd(50,max_terrain_xkoordinate)
      z#=Rnd(50,max_terrain_zkoordinate)

      ;Terrainhöhe der X/Z Koordinaten vom Terrain lesen
      y#=TerrainY#(terrain,x#,0,z#)

      TformPoint x#,y#,z#,terrain,0

      ;Baum skalieren und an X/Z positionieren
      ScaleEntity tree(count),0.15,0.15,0.15
      PositionEntity tree(count),tformedx#(),tformedy#(),tformedz#(),1;RndSeed()

 

crazy_down

BeitragFr, März 02, 2007 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Mhh funktioniert leider auch nicht.
Ich werde über das Wochenende noch weiter Probieren. Wenn es dann immer noch nicht geht, poste ich einfach mal den kompletten Code.
 

Omenaton_2

BeitragDi, März 06, 2007 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
versuch mal testweise ScaleEntity entweder wegzulassen, oder schon vor der Berechnungen gleich nach Laden des Objektes auszuführen.
 

crazy_down

BeitragMi, März 07, 2007 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich komme absolut nicht weiter.
Ich habe den Original Baum jetzt Kopiert also den Mastertree, da setzt er ihn und dann wieder an eine neue Stelle da es in der Schleife ist. AAber er soll ja die Kopien setzen und da lassen.

Ich habe den gesamten Code und hoffentlichn Wink Alle Datein die Notwendig sind mal geuppt.

Wenn jemand Zeit und Lust hat zu Schauen...

http://ciryxcode.ci.funpic.de/codes/Terrain/

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 08, 2007 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir mal dein Code angeschaut und fast selbst am zweifeln gewesen. Es funktioniert aber wenn man anstelle: Code: [AUSKLAPPEN]
Global mastertree=LoadAnimMesh("baum.3DS")

dann doch lieber Code: [AUSKLAPPEN]
Global mastertree=LoadMesh("baum.3DS")

nimmt... Confused
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

crazy_down

BeitragDi, März 13, 2007 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Dangöö Wink
Kann ich zwar keine Animierten Bäume nehmen, aber das ist auch nicht so wichtig.
Wenigstens Funktioniert es jetzt so wie ich möchte ^^
 

Dreamora

BeitragDi, März 13, 2007 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Alternativ könntest du auch mit der LoadAnimMesh und CopyEntity kombination experimentieren. Sofern du die Geometrie nicht verändern willst auf den Klonen sollte das mindestens so gut gehen. (mindestens weil CopyEntity keine Klone der Geometrie macht was Geometriespeicher spart und ein wenig Performance bringt)

AnimMeshes kannst du leider nicht kopieren mit copymesh bzw. nicht einfach so, denn ein AnimMesh ist nicht ein einzelnes Objekt und das ist das einzige was CopyMesh kopiert.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

crazy_down

BeitragDi, März 20, 2007 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Danke, dann kann ich den Baum wenigstens Animieren ^^

Ich habe unten die Koordinaten ausgegeben aber die werden nicht Aktualisiert, was ja auch klar ist da es nicht in der While drinne steht. Sobald ich es aber da rein schreibe wird der Text nicht vorm Fenster angeziegt.

Was mache ich da falsch ?

Silver_Knee

BeitragDi, März 20, 2007 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
wo hast dus denn stehen? sowas gehört zwischen Renderworld und flip
Beispiel Code: [AUSKLAPPEN]
RenderWorld
Text mu,ha,"ha"
flip
Wend
Code: [AUSKLAPPEN]
Text mu,ha,"ha"
flip
RenderWorld
Wend
 

crazy_down

BeitragDi, März 20, 2007 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

RenderWorld
   
   Text 0,0,"Test1"
   Text 0,20,"test"
   Text 0,20,"TerrainY: "+terra_y#
   Flip


Der code ist komplett gepostet oben.


Edit: wenn ich es mit LoadAnimMesch mache und dann CopyEntity, funktioniert die Kollision nicht mehr.
 

Deforation

BeitragFr, März 23, 2007 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Ich hätte da auch noch einen Vorschlag.

Ich würde mal Probieren, ob es geht wenn du die X und Z Koordinaten auch in einen Array einliest.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group