Hangschräge

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

SiSoFlo

Betreff: Hangschräge

BeitragMi, März 04, 2009 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Hat jemand vielleicht ne Funktion oder ne Idee von einer Funktion zur Berechnung der Hangschräge in einem 3D-Spiel?

Danke
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!
  • Zuletzt bearbeitet von SiSoFlo am Mi, März 04, 2009 20:13, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, März 04, 2009 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
...was ist eine Hangexposition Question
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ChaosCoder

BeitragMi, März 04, 2009 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikipedia.org/wiki/E...eographie)

Allerdings bleibt mir auch nach dem Lesen dieses Artikels ein Fragezeichen im Kopf. Was willst du denn ausrechnen?
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

DjDETE

BeitragMi, März 04, 2009 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke er möchte herausfinden, mit welcher seite der hang zur sonne zeigt.
du müsstest einfach die koordinaten überprüfen.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Noobody

BeitragMi, März 04, 2009 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie ich das verstanden habe, brauchst du nur die Normale des Hangs zu berechnen und auf den Vektor dann VectorYaw anwenden, dann bekommst du die Hangexposition.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 04, 2009 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es darum geht, eine Schadowmap aus einer Hightmap zu berechnen, dann geht es mit vereinfachten Mitteln:

Schattenwurf geht immer von einem höherem Pixel aus. Das heisst, von einem helerem Grauwert. Ist der nebenliegende (immer nur in eine Richtung gehen) tiefer als das Gefälle der Lichtstrahlen, dann wird nicht der neue Pixelwert genommen, sondern der alte minus Sonnenstrahlgefälle. Hier ist es vom Vorteil, das ganze als floats zu machen.

Damit das ganze noch etwas ''plastischer'' aussieht sollte man pauschal noch steilen Wänden noch einen tieferen Grauwert hinzuaddieren. Dieses allerdings in Abhändigkeit in allen Richtungen der Pixel. Das heisst: Hoher Differenzwert = stärkere Verdunklung.

Wenn dein Ziel ein anderes ist, dann vergiss mein rumgequatsche.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

SiSoFlo

BeitragMi, März 04, 2009 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, dass es so ungenau war:
Ich will ein Spiel machen indem man Häuser bauen kann.
Aber nur wenn der Boden nicht zu schräg ist.
Und das möchte ich herausfinden
(Ich hab gemerkt, dass Hangexposition der falsche Begriff ist Embarassed)
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

ozzi789

BeitragMi, März 04, 2009 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Anstatt dies zu berechnen könntest du eine Height map erstellen und dort nachschauen Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

FWeinb

ehemals "ich"

BeitragMi, März 04, 2009 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube er will wissen wie die Steigung an dem Punkt ist damit er das Haus in dem Winkel zum Boden Bauen kann.

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

ozzi789

BeitragMi, März 04, 2009 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber nur wenn der Boden nicht zu schräg ist.

Man nehme die gewünschte Koordinate, rechnet das zu auf die Heightmap und liest den Wert aus, nun vergleicht man die umliegenden Pixel (farbwert abweichung) und erhält so die Steigung Wink

Sollte doch funktionieren ^^ ?
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 04, 2009 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit EntityX/Y/Z kann man die Position eines bereits existierenden Objekte herausfinden. Bei erstellen nimmt aber die Koordinaten, die man bereits hat.

Mit MeshWidth/Height/Depth kann man die Dimension eines geladenen Obejktes herausfinden. Mit diesen Angaben + der zu setzenden Stelle, kann man dann die vier Eckpunkte berechnen.

Anhand dieser Eckpunkte kann man mittels LinePick oder besser TerrainHeight die Stellenhöhe herausfinden.

Der Rest ist einfacher Dreisatz.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

peacemaker

BeitragMi, März 04, 2009 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei Punte nehmen, Y-Unterschied berechnen und dann auch die Distanz der beiden Punkte in die Rechnung miteinbeziehen, und schon hast du es.
Dann müssteste halt rumexperimentieren, wieviel Steigung dir noch angemessen für ein Haus erscheint, etc.

mfG
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
 

SiSoFlo

BeitragDo, März 05, 2009 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Mit EntityX/Y/Z kann man die Position eines bereits existierenden Objekte herausfinden. Bei erstellen nimmt aber die Koordinaten, die man bereits hat.

Mit MeshWidth/Height/Depth kann man die Dimension eines geladenen Obejktes herausfinden. Mit diesen Angaben + der zu setzenden Stelle, kann man dann die vier Eckpunkte berechnen.

Anhand dieser Eckpunkte kann man mittels LinePick oder besser TerrainHeight die Stellenhöhe herausfinden.

Der Rest ist einfacher Dreisatz.


Danke, das hilft mir schon mal weiter,
aber was ist, wenn alle vier Ecken des Gebäudes auf gleicher Höhe stehen und dazwischen ein Loch oder ein Berg?
Dann würde sich das Gebäude trotzdem bauen lassen!
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 05, 2009 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, entweder du berücksichtigst dann auch die Zwischenräume, oder rechnest einfach damit, dass ein Brückenhaus gebaut werden kann. Allerdings will ich auch anmerken, dass die Auflösung eines Terrains nicht in Pflastersteingröße zu erstellen ist, sondern mindestens 2x2m betragen sollte. Selbst komerzielle Spiele benutzen nicht mehr Tiles pro Fläch. Die wissen allerdings auch damit umzugehen. Ist dieses also geklärt, sollte auch der Vorschlag bei LoadTerrain beherzigt werden, dass jede Highmap einmal mit einem Weichzeichner bearbeitet werden sollte. Dadurch sind dann auch plötzlich abfallende und wieder aufsteigende Abhänge vermieden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

SiSoFlo

BeitragSa, März 07, 2009 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt nun ein neues Problem:
Ich hab eine Funktion zur Berechnung der Hangschräge ab wenn ich jetzt per ModifyTerrain den Hang dem Haus anpassen will geht es nicht. Hier der Code:

Code: [AUSKLAPPEN]
Global baux#, bauy#

HAUPTSCHLEIFE:

If modus = 3;Modus 3 heisst Baumodus
   
   PositionEntity o, mx, my, mz;mx\y\z ist die picked Mausposition
      
   If Steile(terrain, o)   ; Funktion zur berechnung der Hangschräge
      
      If MouseDown(1)
         
         baux = EntityX(o)
         
         bauz = EntityZ(o)
                  
         Repeat
         
         ModifyTerrain(terrain, baux, bauy, zw);zw ist der Zwischenwert, den die Funktion Steile zurückgibt
         
         baux = baux + 0.1
         
         If baux > EntityX(o) + MeshWidth(o)
            
            baux = EntityX(o)
            
            bauz = bauz + 0.1
            
         EndIf   
                              
         Until bauz > EntityZ(o) + MeshDepth(o)
         
         modus =  0;Modus 0 heiflt das Haus ist gesetzt
         
         fx = mx;fx\y\z ist die Position des positionierten Hauses
         
         fy = TerrainY(terrain, EntityX(o), EntityY(o), EntityZ(o))
         
         fz = mz
      
      EndIf
   
   EndIf

EndIf

So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 07, 2009 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Funktion Steile() sollte nicht True oder False zurück geben, sondern den Höhenwert oder False. Liegt also keine 0 vor, so wird das Ergebnis gleich in deine Bearbeitung genommen. Und ModifyTerrain verändert immer nur die Höhe eines Vertices, nicht jedoch die Höhe einer Fläche (Quad). Du musst also mehrere ModifyTerrain umrum eines Hauses machen, damit eine plane Fläche besteht.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Nicdel

BeitragSa, März 07, 2009 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist zw als Float deklariert? TerrainHeight gibt einen Wert zwischen 0 und 1 zurück, ModifyTerrain benötigt einen Wert zwischen 0 und 1. Und benutz bitte zwei For ... Next-Schleifen statt dieser seltsamen Konstellation. (Zur Übersichtlichkeit und einfacher)
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

SiSoFlo

BeitragSa, März 07, 2009 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
an hectic: also erstens hab ich ne Schlaufe, in der alle x- und z-Coordinaten abgecheckt werden und wenn ich die Funktion Schräge jedesmal einen neuen Höhenwert zurück geben lasse obwohl der ohnehin immer der gleiche ist verlangsamt das mein Spiel nur unnötig

un an Nicdel:
Nicdel hat Folgendes geschrieben:
Ist zw als Float deklariert? TerrainHeight gibt einen Wert zwischen 0 und 1 zurück, ModifyTerrain benötigt einen Wert zwischen 0 und 1. Und benutz bitte zwei For ... Next-Schleifen statt dieser seltsamen Konstellation. (Zur Übersichtlichkeit und einfacher)

also das ModifyTerrain einen Wert zwischen 0 und 1 zurück gibt wusste ich nicht. Jetzt hab ich das korigiert:
geht immer noch nich.
Und die andere Schleife ist nur zur Übersicht -> daran kann's nich liegen! Crying or Very sad

Vielleicht hat noch jemand ne andere Idee Idea
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 07, 2009 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast mich offensichtlich falsch verstanden. Deine Funktion soll den Durchschnitt der Höhe eines bestimmten Bereiches zurück geben. Zum Beispiel die Grundfläche eines Hauses. Danach solltest du dich richtien und eine glatte Fläche erstelle - das Terrain planieren - und danach das Haus auf diese Höhe setzen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

SiSoFlo

BeitragDo, März 12, 2009 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir ist ModifyTerrain etwas launisch Confused
Mal geht's mal nich
ich muss bissle rumprobieren
jedenfalls scheint es kein bestimmtes Problem zu sein
danke für eure Hilfe!
Wenn ich ein konkretes Problem hab melde ich mich wieder! Very Happy
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group