Author Topic: x_spot Light keine feste Position?  (Read 3956 times)

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
x_spot Light keine feste Position?
« on: 2014-May-01 »
Hallo, wollte für mein RPG Projekt Objekte testen, welche mit einem Licht verknüpft wurden.

Ich benutze die Nummern 1 - 7 für meine x_spot_lt Aufrufe

Die Position der Lichter sowie ihre Richtung ändern sich nicht
(sie bekommen beim Laden fixe Positionen und Richtungen zugewiesen ).

Wenn die Kamera sich nun von der Lichtquelle entfernt, so scheint sich die Lichtposition auch zu verändern.

Sowohl .ddd, als auch Nutzer generierte Objekte weisen dieses Problem auf.

Hier mal ein Video von dem Verhalten:


Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: x_spot Light keine feste Position?
« Reply #1 on: 2014-May-02 »
Part of the light equation is also your 'camera position' so if you move the camera, you also slightly change the output in light. This is especially visible when you have big triangles in comparison to the light distance. If you add more triangles to your models (so each one is smaller) you will get a better results. Yeah per vertex lighting will never look really good.
If your not sure if you set the position correct or want to see if something gets changed by a side effect of your code, you can draw an object at your light position (a small cube or X_DOT/X_LINE) and see if it really does not move.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #2 on: 2014-May-02 »
Thx for the x_line hint.
I allready thought, that the light effect changes depending on the camera angle, but
I had no idea, that this effect would be visible to such an extend.

If I move the light up, this side effect starts to disappear, but also the light effect I wanted to achieve does too.




Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: x_spot Light keine feste Position?
« Reply #3 on: 2014-May-03 »
Normally it would not be that much visible, but you have the light source really close to big triangles. If you make smaller triangles it will be less visible (but more hardware demanding). Since your lights are static, it may be the best idea to simply use a lightmap and incorporate this in your textures.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #4 on: 2014-May-04 »
Ich habe einen Fehler beim Aufruf von X_Spot_LT. Ich habe den Richtungs-Vektor mit dem End Punkt der Licht Richtung verwechselt...
Habe auch feststellen müssen, dass Lichter nicht automatisch verschwinden, wenn sie nicht mehr aufgerufen werden, wenn man Lichter löschen möchte, so sollte man ein Licht mit einem ÖffnungsWinkel von 0 grad daraus machen.


Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: x_spot Light keine feste Position?
« Reply #5 on: 2014-May-04 »
Ja, OpenGL ist eine state-machine, wenn du einen Zustand setzt (z.B. ein Licht aktivierst), dann bleibt dieser Zustand erhalten, bis du ihn wieder änderst (hier neues Licht auf die gleiche ID schreiben, oder deaktivieren wie du es getan hast). Sieht das Ergebnis mit berichtigten Vektoren jetzt besser aus?
Da deine Szene sicher viele Lichtquellen hat, aber du nur 8 garantierte (Licht 0-7) hast, empfiehlt es sich genau zu prüfen, welche Lichter gerade im Sichtbereich sind und nur diese zu rendern. Ansonsten eben noch eine Prioritätssortierung oder eventuell die bereits vorgeschlagenen lightmaps.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #6 on: 2014-May-05 »
Ich zeichne Grundsaetzlich nur im sichtbaren Bereich.
Ist ein Licht ausserhalb des sichtbaren Bereichs wird es auch deaktiviert
(ich hatte es davor nur aus der liste geloescht).
Man kann fuer jeden Objekttyp einstellen, ob es eine "Lichtquelle" sein soll, sowie Farbe
und "Groesse" des Lichts bestimmen.

Die Szene sieht jetzt so aus wie ich mir das vorgestellt hatte. Zwar habe ich nur ein grade von oben nach unten scheinendes spot light, aber das reicht mir schon aus.
Ein point light waere vermutlich schoener, aber dazu muesste man irgend eine Licht Intensitaet, oder Reichweite eingeben koennen. 

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5077
  • O Rly?
    • View Profile
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #8 on: 2014-May-05 »
Also es ist noch annehmbar mit dem Lichtkegel ( Bilder sind im Anhang ).

War da schon jemand fleißig beim setzen der Light range?
Eine Beispiel Szene mit einem solchen Licht wäre bestimmt ne gute Motivation das
Entity System zu nutzen.


Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: x_spot Light keine feste Position?
« Reply #9 on: 2014-May-05 »
Das ES zu nutzen, nachdem dein Projekt bereits funktioniert, würde einen riesigen Aufwand bedeuten (alles auf eine andere Technik umschreiben) und ist sicher nicht nötig. Wenn du die Lichtreichweite unbedingt begrenzen willst, kannst du das mit Inline + native OpenGL tun, genau so wie es Schranzor vorgemacht hat, das ES brauchst du dazu nicht. Eine Anregung dazu: http://wiki.delphigl.com/index.php/Tutorial_Lektion_8#Etwas_schw.C3.A4cher_bitte
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5077
  • O Rly?
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #10 on: 2014-May-06 »
Du kannst es ganz einfach auf deinen Code anpassen. Im Prinzip lese einfach mal weiter unten im verlinkten thread. Solltest du Probleme haben, helfe ich dir gerne.  :good:
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #11 on: 2014-May-06 »
Danke Schranz0r und Kanonet für die Anregungen!

Also ich habe es so versucht:

X_Spot_LT iLight , farbe , x , y , z , 0 , 0 , 0 , 180
also erstmal versucht die light range auf ein paralleles Licht anzuwenden.
(Habe auch versucht einfach mal einen RichtungsVektor zuzuweisen, dann erst bekomme ich nach
benutzen von glLightAttenuation ein Licht heraus, jedoch ist es immernoch ein Licht unbegrenzter Reichweite )
Dann
glLightAttenuation( iLight , 1.00 , 0.01 , 0.04 )
wobei ich mir bei den Werten für linear , constant und quadratic unsicher bin.

Ich bekomme kein Licht mit der Methode...

Lässt sich das nur auf spot_lts im herkömmlichen Sinne anordnen, oder muss ich die Lichter von Grund auf mit INLINE + OpenGL Code erstellen, damit das richtig zusammengreift ?

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: x_spot Light keine feste Position?
« Reply #12 on: 2014-May-06 »
Öffnungswinkel 180 = Direktionales Licht = hat keinen Startpunkt, sondern nur einen Richtungswechsel und ist per Definition unendlich.
Attentuation kannst du nur auf Pointlight (Öffnungswinkel = 360) und Spotlight (Öffnungswinkel <>180 und <>360).

Ja prinzipiell kannst du X_SPOT_LT und INLINE zusammen verwenden.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline nabz32

  • Community Developer
  • Dr. Type
  • ******
  • Posts: 316
    • View Profile
Re: x_spot Light keine feste Position?
« Reply #13 on: 2014-May-06 »
Vielen Dank fuer die genaue Erklaerung, ich hatte mich schon gewundert, wieso der Oeffnungswinkel ueber 180 Grad hnausgeht,
muss mich noch genauer informieren zu dem Thema.
Die Tutorials zu OGL scheinen ziemlich gut zu sein, versuche es,
wenn ich Zeit habe zu lesen...

Habe auch was schoenes dank eurer Hilfe hinbekommen:

Edit: Läuft auch schön auf der Pandora
« Last Edit: 2014-May-06 by nabz32 »