Terrains
-
achja: thx im vorraus!
-
freddy: Bist du dieser <Headhunter> der letztens diese tricky codes gepostet hat?
-
?! nein... wieso?
-
Eh, möchtest du im 3D Level rausfinden wie hoch das Level an der Stelle ist ?
-
ich möchte dass sich die y position der camera dem terrain anpasst
-
Warum funktioniert das mit dem x&y Wert skalieren nicht ?
Du könntest z.B. einen Ray nach unten schießen und dann checken ob der mit dem Terrain kollidiert, das ist das einzige was mit im moment so einfallen würde
-
Wenn sich das Terrain nicht verändert, dann solltest Du Vertex Arrays verwenden. Dadurch sparts Du Dir sehr viele Funktionsaufrufe und die Schleifen.
-
@headhunter:
wenn ich die x und y koordinaten einfach mit dem scalefaktor multiplieziere kommen trotzdem nicht die richtigen werte raus:terrain.getHeight( x * terrain.scale.v[0], y * terrain.scale.v[2]);
musste doch eigentlich stimmen oder?!
@simon:
ich wills erst später optimieren...
-
Jo, der Code müsste stimmen. Was klappt denn nicht ? Kleine Ungenauigkeiten, oder komplett falsch ?
-
hatte einen fehler (hab das terrain auf y koordinate ausgerichtet und das nicht berücksichtigt)
aber jetzt ist das problem immer noch nicht richtig gelöst:
bei dem objekt das ich verschiebe ändert sich die y koordinate nicht schön langsam, sondern springt auf und ab...
-
Ist ja auch klar, denn das Terrain hat ja nur eine bestimmte "Auflösung". Du musst zwischen den vier nächsten Kontrollpunkten interpolieren, so wie es auch bei Textur-Filtern gemacht wird.
Hier ist ein Stück Code von einem meiner Programme, das ein Bild linear filtert:/*******************************************************************/ // Funktion zum Abfragen eines gefilterten Pixelwerts tbColor CBitmap::GetFilteredPixel(float x, float y) { float fx = x - (float)((int)(x)); float fy = y - (float)((int)(y)); // Bilinearer Filter return (tbColor)((1.0f - fx) * ((1.0f - fy) * GetPixel((int)(x), (int)(y)) + fy * GetPixel((int)(x), (int)(y) + 1)) + fx * ((1.0f - fy) * GetPixel((int)(x) + 1, (int)(y)) + fy * GetPixel((int)(x) + 1, (int)(y) + 1))); }
Das dürfte sich gut für Dein Terrain verwenden lassen! Anstelle von tbColor hast Du halt floats und GetPixel muss bei Dir die Höhe an einer bestimmten Stelle liefern (hast Du ja schon).
-
Original erstellt von Headhunter:
Du könntest z.B. einen Ray nach unten schießen und dann checken ob der mit dem Terrain kollidiert, das ist das einzige was mit im moment so einfallen würdeDas ist nicht unbedingt sinnvoll, da der Ray sowieso mit dem Terrain kollidiert solange man sich in dem Rechteck( Quadrat ) über dem Terrain befindet. Also etwas zuviel Aufwand
Original erstellt von TomasRiker:
**Ist ja auch klar, denn das Terrain hat ja nur eine bestimmte "Auflösung". Du musst zwischen den vier nächsten Kontrollpunkten interpolieren, so wie es auch bei Textur-Filtern gemacht wird.
Hier ist ein Stück Code von einem meiner Programme, das ein Bild linear filtert:
**Das ist eigentlich nicht genau das, was man braucht, da hier immer aus 3 Punkten ein Dreick aufgespannt wird. Man muss die 3 Punkte finden und eine Ebene durch sie aufspannen, dann kommt man zu dem gesuchten Punkt im Dreieck.
-
Mit der Interpolation müsste es aber auch funktionieren.
-
Original erstellt von TomasRiker:
Mit der Interpolation müsste es aber auch funktionieren.Ja, es ist auch eine Annäherung, für den gesuchten Wert. Er ist aber eben nicht genau. Gerade bei LOD und wenn Quads stark "geknickt" sind, gibt es hohe Abweichungen.
-
danke! das mit dem interpolieren funktioniert wunderbar!!
@TGGC wie würdest du das dann machen?!
-
Original erstellt von <freddy>:
@TGGC wie würdest du das dann machen?!Augen auf bitte, bzw. lesen lernen.
-
oh *g*