Stufenlose Terrainhöhe
Übersicht

hamusBetreff: Stufenlose Terrainhöhe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi zusammen
ich experimentiere gerade einwenig mit terrains ich hab mir eine kleine gras-funktion gebaut, die auch relativ funktioniert, nur macht mir das Programm bei Bergen/Anhöhen "Stufen" in dem Gras, soviel ich gesehen habe, berechnet er die höhe des terrain vom letzten "Vertex" aus, und bildet deshalb zwischen diesen stufen Das Sieht dann ungefäht so aus: \ __ ''\ __ ''''\ __ ''''''\ __ ''''''''\ __ '''''''''\_____________ Im mom habe ich für die position: positionEntity obj,x,TerrainY(ter,x,0,z),z Nun wollte ich wissen, wie es stufenlos hinbekomme, also so, dass die einzelnen objekte direkt auf dem terrain platziert werden... Ich hatte bereit überlegt, die umliegenden Punkte abzufragen,den Mittelwert zu nehmen und daraus dann die ungefähre Höhe zu errechnen, aber das hat auch nicht 100%ig funktioniert Wäre nett, wenn mir jmd helfen könnte ![]() mfg. |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi hamus,
ich kann leider nichts in deiner zeichnung erkennen ![]() hast du vllt ein bisschen code, damit ich weiß, wie dein gras erstellt wird. und wie wird das terrain erstellt? mit loadterrain wahrscheinlich? |
||
hamus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
terrain wird mit loadterrain aus einer heightmap geladen
Das gras ist eine textierte fläche die zufällig auf dem terrain gesetzt wird... ''''''''''''''''''''_ ''''''''''''''''''/'''\ ** ''''''''''''''''/'''''''\ ''''''''''''''/'''''''''''\ ** ''''''''''''/'''''''''''''''\ ''''''''''/'''''''''''''''''''\ ** ___/'''''''''''''''''''''''\_____________ Braun: Terrain Grün: Gras EDIT: und so sollte es sein ''''''''''''''''''''_ ''''''''''''''''''/'''\ * ''''''''''''''''/'''''''\ * ''''''''''''''/'''''''''''\ * ''''''''''''/'''''''''''''''\ * ''''''''''/'''''''''''''''''''\ * ___/'''''''''''''''''''''''\_____________ hoffe das hilft weiter code ist leider grad nicht zur hand, steht aber auch nicht mehr drin, als was ich grad gesagt habe ![]() |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das gras besteht also aus quadraten, die auf das terrain gesetzt werden.
ich versteh den zweck des grases leider nicht. soll das gras sich dem boden anpassen oder soll es senkrecht zum boden stehen. _____ gras OOOO boden I I I I I gras OOOO boden ![]() |
||
hamus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
senkrecht
also so ''''''''''''''''''''_ ''''''''''''''''''/'''\ | ''''''''''''''''/'''''''\ | ''''''''''''''/'''''''''''\ | ''''''''''''/'''''''''''''''\ | ''''''''''/'''''''''''''''''''\ | ___/'''''''''''''''''''''''\_|_|_|_|_|_|_|_|_|_|_|_|_ und genau da macht er bei anhöhen "treppen" ''''''''''''''''''''_ || ''''''''''''''''''/'''\ ''''''''''''''''/'''''''\ || ''''''''''''''/'''''''''''\ ''''''''''''/'''''''''''''''\ || ''''''''''/'''''''''''''''''''\ ___/'''''''''''''''''''''''\_|_|_|_|_|_|_|_|_|_|_|_|_ |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
da gibt es dann zwei möglichkeiten, das zu lösen.
1. man erstellt ein grasmesh, kopiert es mit copyentity 100 mal (10*10 ![]() das gras zeigt dann aber nicht senkrecht in die luft. 2. man erstellt ein grasmesh mit 127*127*2 vertexen, verbindet alle vertexe so, dass das gras nur von der seite gesehen wird und passt die einzelnen vertexpunkte der terrainhöhe an. dann zeigt das gras immer nach oben. dazu würde ich das terrain aber auch selbst erstellen. falls du dich mit dem ganzen zeug noch nicht so gut auskennst, dann würde ich gerne einen beispielcode schreiben, den du dann auch so verwenden kannst. und ich würde die zweite möglichkeit empfehlen. wie lange programmierst du eig schon mit b3d? |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also TerrainHeight![]() ![]() Lg, Tobias |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
hamus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mein problem ist eigentlich ein anderes...
ich habe hier um zu sehen die texturen entfernt und das gras weiß gemacht... ![]() ![]() ![]() Ich hoffe man kann jetzt die einzelnen treppenstufen erkennen... Auf der flachen ebene funktioniert das prog, nur sobald die steigung kommt geht das gras nicht flüssig nach oben, sondern macht diese sprünge... wie gesagt, die enzelnen gras-flächen werden zufällig in der nähe einer box erstellt... (wobei um die box mehr sind) und die höhe wird mit positionEntity obj,x,TerrainY(ter,x,0,z),z berechnet... aber an der wireframe-darstellung sieht man glaub, dass die höhe nicht richtig berechnet wird... EDIT: bin schon ne weile dabei, hab mich nur nie um forum angemeldet ;P |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du musst die teile ja auch drehen ![]() am besten geht das mit atan2. der rechnet die winkel aus. |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guck dir die ganzen Sachen mal von oben an. Do wirst dann bemerken, dass alles gleichmäßig ist.
Problematisch ist halt folgender Sachverhalt: Auf einer geraden Fläche ist der Abstand immer gleich, aber wenn du noch eine Steigung da drinnen hast, dann wird der Weg ja länger. Stell dir einfach deine Hauswand vor: Wenn du einen Meter von ihr entfernt bist, und dann einen Meter auf sie zu gehst, bist du halt einen Meter weiter gegangen. Wenn du das ganze dann aber noch mal machen willst, wirst du merken, dass der Weg viel länger ist: Um nämlich wirklich "von oben gesehen" einen Meter weiter zu kommen, müsstest du auf das Dach deines Hauses steigen - und das ist definitiv mehr als "ein Meter". ![]() Selbst wenn du dir Grasflächen drehst und neigst, wirst du also trotzdem Probleme haben, da freie Abschnitte zwischen den Grasflächen entstehen. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich stelle mal meinen lösungsansatz vor:
BlitzBasic: [AUSKLAPPEN] Dim map_i(1024,1024) ; höheninformationen der map ich glaube, dass das zwar nicht das ist, was du brauchst, aber man kann dann noch die höhe anpassen und das gras verschwindet an manchen stellen. hab ich da zwar noch nicht eingebaut, aber man könnte aus dem dim map_i(1024,1024) einfach ein dim map_i(1024,1024,1) machen und die höhenwerte, also um wie viel die obere vertexreihe verschoben werden soll, einspeisen. ich hoffe, ich konnte helfen ![]() |
||
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich vermute das Problem liegt in BlitzBasic: [AUSKLAPPEN] TerrainY(ter,x,0,z) Ich habe es nicht getestet und vermute es nur! Ein bb Terrain kann vielleicht nur so viele "Höhenstufen" haben, wie das Bild der Terrainmap Graustufen*die Skalierung des Terrains hat. Auch wenn es dank LOD viel mehr Vertices, auch zwischen den Stufen, hat. Dann kann man Treppen nicht vermeiden ohne selbst zu interpolieren. Noch dazu müsstest du die quadrate in denen das Gras unterteilt ist an die Terrainneigung anpassen. Oder verkleinern damit es nicht so auffällt das das Gras zusammengefasst ist. EDIT: Speicher TerrainY mal in einer float bevor du es verwendest. |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
- Zuletzt bearbeitet von biggicekey am Mo, Jul 16, 2012 16:23, insgesamt einmal bearbeitet
Tritium |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey,
hat nicht direkt mit Deinem Problem zu tun, und vielleicht renn ich auch offene Türen ein, aber: Sollte das Gras für Dein Programm nicht essentiell wichtig sein dann würd ich mich an Deiner Stelle jetzt nicht mit sowas aufhalten. Ich weiß nicht, wozu Du das programmierst, vielleicht gehört das in die Kategorie "wollte einfach mal ausprobieren wie sowas geht", das ist was anderes. Aber wenn Du bspw. ein 3D-RPG/-Shooter/-Strategiespiel programmierst würde ich mich erst mit der eigentlichen Funktionalität befassen, sofern das Gras kein zentrales Spielelement sondern vielmehr ein grafisches Schmankerl ist. Ist nicht böse gemeint ![]() ![]() |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich finde, wir sollten erst auf rückmeldung von hamus warten ![]() |
||
hamus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So
ich hab jetzt ne weile rumprobiert und habe ne passende Funktion/Formel geschrieben... Das terrain besteht ja, wie alles andere auch,aus "Dreiecken" als erstes bestimme ich die koordinaten des dreiecks... position\Skalierung_des_terrain*skalierung_des_terrain dadurch wird der wert gerundet,und man bekommt den pos von dem eckpunkt die 2 anderen Eckpunkte unseres Dreiecks sind die pos von dem bekannten dreieck + Vektor(skalierung_des terrain) dadurch hat man die position von A und die Vektoren AB und AC damit lässt sich eine Ebenengleichung erstellen (vektor_P=0vektor_A+a*vektor_AB+b*vektor_AC) a und b lassen sich durch umformen ausrechnen der punkt P(x,y,z), wobei x und z die aktuelle position der berechnung ist, soll ja auf dieser ebene liegen... dann einfach nach y die formel auflösen, und fertig... klingt kompliziert, funktioniert aber deutlich besser und vorallem genauer als terrainY() bzw terrainheight... trotzdem danke für die hilfe ;P |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
es würde auch leichter gehen ( ohne viel mathe und vektoren).
aber wenn du meinst ![]() schön, dass dein problem gelöst ist |
||
sddsmhr |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ToeB hat Folgendes geschrieben: Also TerrainHeight Nur, dass TerrainY gerne mal falsch interpoliert... ![]() ![]() Lg, Tobias ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was wenn ich das richtig sehe kein Fehler von TerrainY ist sondern ein klassischer Rundungsfehler bei single precision Floats. Shit happenz. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
sddsmhr |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, das erklärt es nicht, siehe hier:
https://www.blitzforum.de/foru...hp?t=38843 Hier werden Tiles als konvex angenommen, obwohl sie konkav sind, bzw. umgekehrt, was zu einer falschen Interpolation führt... Oder ne, warte, da wird meines Wissens eine falsche Orientierung zugrundegelegt... Setz' in dem Beispiel-Code einfach die steps hoch (falls es der PC verkraftet), dann wird es ganz deutlich. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group