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

71

09.01.2014, 16:10

Das Problem ist nur, dass deine remainder-Implementation nicht standardkonform ist...
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

72

09.01.2014, 16:14

Das habe ich nicht überprüft.
Bei speziellen Werten könnte es vielleicht Abweichungen geben. Das sollte aber in der Regel in der Praxis keine Auswirkungen haben.
In welchen Fällen meinst du konkret?

73

09.01.2014, 16:26

Falsch bei negativem Denom und 50% der positiven:
http://ideone.com/eL7MuK
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

74

09.01.2014, 16:56

Ok. Ich verwende nun die Funktionen. OK?

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

75

09.01.2014, 18:38

Wegen des Schwimmens.


Das Terrain Mesh ist ja außen detailschwäscher als innen. Welchen Raster soll ich mit Modul verwenden? Den Groben oder den Feinen (In der Kamera nähe)?

Wenn ich ...

[/cpp]
MeshPos.x = remainder(KameraPos.x, 0.5)
MeshPos.y = remainder(KameraPos.y, 0.5)
[/cpp]

0.5 ist der Grobe Raster (Weit weg von der Kamera).

Das Model Bewegt sich nun stotternd im 0.5 Einheiten Rhythmus an der Kamera vorbei.
Ich meine, dass sich das Modell nicht flüssig bewegt sondern immer nur 0.5 Einheiten.

muss ich die Auflösung des Meshs erhöhen?

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

76

09.01.2014, 19:45

Aus Sicht der Kamera sollte man zumindest im Feinen überhaupt nichts davon sehen.
Wo das das Raster ausrichtest ist Experimentationssache.
Wenn du es am ganz feinen ausrichtest, gibt es das schwimmen im Hintergrund weiterhin. Wenn es am ganz Groben ausgerichtet ist, dann kann das Mesh sich nicht mehr so fein an die Kameraposition verschieben. Irgendetwas dazwischen ist notwendig. Außerdem würde ich MipMapping anschalten und bei geringeren Terraindetailstufen auf höhere MipMap-Level zugreifen, damit es im Hintergrund keine Unterabtastung des Terrains gibt. Das vermeidet hässliche Sprung- und Schwimartefakte im Hintergrund. Im Hintergrund kann man über die trilineare Filterung dann sogar automatisch die Detailsstufen überblenden. Das heißt ganz am Rand des aller feinsten herrscht ein MipMap-Level von schon fast 1 (vlt. 0.99). Hier ist also nur noch ein Anteil 0.01 fein und bereits überwiegend 0.99 grob. Das heißt, das Terrain wird beim verschieben des Meshes langsam gröber ohne das Sprünge beim Detailstufenwechsel auftreten. Dafür musst du aber unbedingt darauf achten, dass ein Texel in der Textur auch genau auf ein Vertex auf dem Mesh abgebildet wird.

Wegen "remainder": In deinen Fall sollte es "fmod" genauso tun.

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

77

10.01.2014, 14:50

Ok. Du hast gesagt, dass das Mesh, wenn der Spieler eine Vertex länge weiter geht, automatisch wieder auf 0,0,0 verschoben wird. jedoch wie soll man dass berechnen? Bei mir läuft das Mesh an der Kamera vorbei.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

78

10.01.2014, 14:59

Das Mesh bewegt sich mit. Immer unter der Kamera. (Nicht notwendigerweiße der Spieler) Das ist nicht notwendiger Weise (0;0;0).
In Pseudocode:

Quellcode

1
MeshPos.xy = KameraPos.xy - fmod(KameraPos.xy, Terrainauflösung * n)


Wenn das Mesh an der Kamera vorbei läuft, dann rechnest du eindeutig etwas falsch.

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

79

10.01.2014, 19:53

OK Wofür steht "n" ?

Terrainauflösung ist doch der Vertex abstand zum Nachbar-Vertex. Oder?

Das steht in meinem Code nicht.

Wenn ich dies eingebe

C-/C++-Quelltext

1
2
    v_MeshPos.x = gp_Main->mp_Game->mp_Player->GetPosition().x - fmod(gp_Main->mp_Game->mp_Player->GetPosition().x,  0.20f);
    v_MeshPos.z = gp_Main->mp_Game->mp_Player->GetPosition().z - fmod(gp_Main->mp_Game->mp_Player->GetPosition().z,  0.20f);


Das Modell bleibt bei der Kameraposition, Jedoch stottert es um 0.20 Einheiten hin und her. Das Schwimmen ist glücklicherweise irgendwie weg.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sebastian Müller« (10.01.2014, 20:08)


Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

80

10.01.2014, 20:04

n steht für eine beliebige natürliche Zahl.
Eben bei welchen Gridabständen verschoben werden soll.

Was heißt, das steht in deinen Code nicht?
Du musst es doch irgendwo den Wert angeben.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (10.01.2014, 20:10)


Werbeanzeige