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

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

41

10.02.2014, 16:54

Was meinst du mit Koordinatensystem?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

42

10.02.2014, 16:55

Und was kommt raus, wenn man einen Punkt durch einen Abstand teilt!?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

43

10.02.2014, 16:57

Koordinaten beziehen sich immer auf ein Koordinatensystem mit einem Ursprungspunkt und Achsen.

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

44

10.02.2014, 18:30

Ich habe erstmals eine Funktion geschrieben, die die Länge eines Vektors ausrechnet. (Hypotenuse des Rechtwinkligen Dreiecks) [Satz von Pythagoras / Kathetensatz]
Nehmen wir in der Schule grade durch. Praktisch! oder?

in HLSL sollte es so aussehen

HLSL-Quelltext

1
2
3
4
5
6
float3 Legth(float3 V1)
{

return (sqrt(V1.x * V1.x + V1.y * V1.y + V1.z * V1.z))

}


so kann man die Distanz zwischen licht und Pixel berechnen

HLSL-Quelltext

1
float  Distance = Legth(Lights[0].Position - input.WorldPos);



Du sagtest ich solle die Distanz durch einen Punkt teilen.

Meinst du mit Punkt einen Pixel ???


Koordinatensystem

Ich rechne

Pixelpos - Lightpos

und erhalte die Position des Pixels (Absolut zu 0)

Also das absolute kordinatensystem

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

45

10.02.2014, 19:01

ICH HABE WAS.

Diffuse_Light *= (400 * saturate((dot(input.WorldPos ,input.WorldPos ) * 5000) / (Distance)));

Sieht irgendwie total katastrophal aus, ich musste die werte irgendwie hoch bekommen
»Sebastian Müller« hat folgendes Bild angehängt:
  • Unbenannt.png

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

46

10.02.2014, 19:04

  1. Es heißt "Length", nicht "Legth".
  2. Gibt es bereits eine integrierte Funktion, die möglicherweise besser optimiert ist. Für deinen konkreten Fall ist "Distance" sogar noch besser.

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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

47

11.02.2014, 17:26

War die Lösung oben richtig?

Ehrlich gesagt funktioniert der Falloff nur sehr begrenzt. (Wenig einstellbar)

Wie habt ihr denn den Falloff berechnet ???

Ich brauche so langsam eine Lösung, weil ich weiter machen möchte.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sebastian Müller« (11.02.2014, 17:31)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

48

11.02.2014, 17:56

Anstatt einfach nur rumzuprobieren, solltest du langsam anfangen, zu überlegen, was du eigentlich tust, sonst wird das nix mit dem Programmieren. Genau das versuche ich verzweifelt zu erreichen, indem ich hier dieses Ratespiel veranstalte. Wie kommst du z.B. auf Dinge wie

400 * saturate((dot(input.WorldPos ,input.WorldPos ) * 5000

?(

Was genau steckt da für ein Gedanke dahinter?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (11.02.2014, 18:02)


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

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

49

11.02.2014, 18:07

Wie gesagt. herum experimentieren.


Wenn ich die Position eines Pixels durch die Distanz (zwischen Pixel und licht) teile, nimmt die leuchtstarke ja permanent ab, weil je höher der Wert Distance ist , desto größer der Teiler.

Jedoch habe ich jetzt schon gemerkt, dass es der falsche Ansatz war.

Ich überlege weiter.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

50

11.02.2014, 18:16

Was genau ist deine geometrische Intuition hinter "eine Position durch eine Distanz Teilen"!? Eine Position beschrieben in euklidischen Koordinaten ist ein Vektor. Ignorieren wir mal, dass man einen Vektor rein mathematisch gar nicht durch irgendetwas "teilen" kann und nehmen an, dass wir stattdessen mit dem Kehrwert dieser Distanz multiplizieren (was dein Code effektiv macht). Das Ergebnis dieser Berechnung ist nun wieder ein Vektor. Dein "Falloff" ist also
  1. ein Vektor
  2. nicht nur von der relativen Position zur Lichtquelle, sondern auch von der absoluten Position im Raum abhängig.

Werbeanzeige