Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

41

07.01.2014, 17:22

Vorher wäre es auch noch sinnvoll zwischen den Punkten in der Heightmap zu interpolieren.
Außerdem ist die Spielfigur ja kein Punkt, deshalb ist wahrscheinlich ein wenig zusätzlicher Aufwand notwendig.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

42

07.01.2014, 17:48

Also so

C-/C++-Quelltext

1
2
3
4
PDIRECT3DTEXTURE9       *Test;
tbColor              Color;

Color = Test[3][3]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

43

08.01.2014, 16:27

Ich frage mich wie man das mit dem wabbeln oder Schwimmen wegbekommt. gibt es eine Möglichkeit? Im Thread wurde es ja angesprochen.

Das Terrain muss nicht 100% wie in top modernen Spielen aussehen. Jedoch sollte man es als Landschaft erkennen können.

44

08.01.2014, 16:34

Indem du das Mesh nur um Vielfache der Auflösung verschiebst. Im Grunde ist es eine Translationssymmetrie (nur dass die Landschaft nicht unendlich ist).

Stell dir ein Schachbrett vor. Wenn du es ein bisschen bewegst sieht es verschoben aus, wenn du es aber genau um 2 Feldlängen verschiebst, ist jedes weiße Feld wieder auf einem weißen und jedes schwarze auf einem schwarzen. Lokal betrachtet siehst du nicht, dass es sich verschoben hat (genau wie wenn man einen symmetrischen Stern mit 5 Zacken um 1/5 dreht).

Du bewegst das Mesh ja nur, damit du nie das Ende erreichst. Jetzt bewegst du es aber doch mit, aber jedesmal wenn der Spieler eine Dreiecksgrenze überschritten hat, springst du um genau die Länge zurück. Lokal betrachtet sind es dann so aus, als würde man sich bewegen, man tut es aber nicht wirklich.

Umsetzen kannst du dass, indem du das Mesh jeweils um "Spieleposition mod Dreieckslänge" verschiebst.
Lieber dumm fragen, als dumm bleiben!

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

45

08.01.2014, 19:29

OK. Ich habe es verstanden.

Ich habe genau gemessen. der Abstand von einem Vertex zum benachbarten Vertex beträgt 5 oder 0.5 Die Dimension ist mir nicht bekannt.

meinst du

MeshPos = Spielerposition * Dreieckslänge;

Eine Frage.
Sind die Ergebnisse gut?

46

09.01.2014, 00:45

Welche Ergebnisse? Ich sehe bisher noch keine.

Nein, ich meine nicht die Multiplikation sondern den Modulo Operator. In C++ ist es das %.

Wie groß ein Dreieck ist, siehst du in deinem Modellierungstool. Wenn du nicht zwischendrin lustige Sachen mit den Werten machst, sollten die danach eigentlich immer noch so sein.
Aber eine Grundregel bei 3D-Grafik ist: Du musst jederzeit genau wissen, was du wo wie transformierst. Das kann dir niemand im Forum beantworten, den Überblick hast du nur selber. Und du musst ihn haben, sonst wirst du früher oder später überhaupt nicht mehr durchblicken.
Lieber dumm fragen, als dumm bleiben!

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

47

09.01.2014, 14:08

Der "%"-Operator ist bei Gleitkommazahlen standardmäßig nicht verfügbar.
In C(++) gibt es stattdessen die "remainder"-Funktion. (Man könnte natürlich selbst den "%"-Operator überladen. Ob das allerdings sinnvoll ist, sei mal so dahin gestellt.)
In GLSL gibt es die "Mod"-Funktion und in HLSL die "fmod"-Funktion. Allerdings kann man das auch prima auf der CPU machen anstatt für jeden Vertex immer wieder erneut.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (09.01.2014, 14:44)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

48

09.01.2014, 14:13

Man könnte natürlich selbst den "%"-Operator überladen.

Nicht für float... ;)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

49

09.01.2014, 14:20

Tatsächlich. Mit eingebauten Datentypen als 1. Parameter geht es nicht. (Nachtrag: Ich meine, es dürfen nicht nur eingebaute Typen als Parameter sein. Egal wo genau.)
Finde ich zwar etwas unlogisch, aber das ist C++ nunmal.
Jedenfalls wieder etwas gelernt! ^^

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Spiele Programmierer« (09.01.2014, 14:50)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

50

09.01.2014, 14:28

Das liegt nicht am 1. Parameter; man kann Operatoren in C++ nur für benutzerdefinierte Typen überladen. Genaugenommen wäre dies im Falle der eingebauten Operatoren auch keine Überladung, sondern eine Überschreibung. Grund für diese Einschränkung ist, dass sich ansonsten z.B. nur durch inkludieren eines Headers die Bedeutung der Sprache vollständig ändern könnte, ohne dass man etwas davon mitbekommt. Alle potentiellen Vorteile davon, die Umdefinition von Operatoren für eingebaute Typen zu erlauben, wird von den Erfindern von C++ im Vergleich zur Tatsache, dass man sich nichtmal mehr darauf verlassen könnte, dass selbst das simpelste + überhaupt tut, was man erwarten würde, einfach als zu gering angesehen...

Werbeanzeige