EntitySystem - Licht Bug

Previous topic - Next topic

backslider

Hi Leute,

ich benutze für mein Spiel das EntitySystem (ich liebe es!)... Nun benutze ich für mein Level ein! Ambient Light, welches -150 auf der Z-Achse liegt.

Zu betonen gilt vielleicht, dass ich hinter meinem Level NICHTS anderes mehr habe und dennoch wird ein Schatten meiner Objekte auf den Hintergrund geworfen... Zudem gibt es einen "Schatten-Bug", wie gekennzeichnet...
Kenn ihr das Problem und die Lösung dazu? :)

MfG
Ole

[attachment deleted by admin]

kanonet

Quote from: backslider on 2012-Apr-12Nun benutze ich für mein Level ein! Ambient Light, welches -150 auf der Z-Achse liegt.
Kannst du darauf näher eingehen? Für das Ambient light ist die Position egal. Jedoch kennt das ES kein Ambient light (das normale GLB jedoch sehr wohl!), sondern nur Spot_lights.

Quote from: backslider on 2012-Apr-12Zu betonen gilt vielleicht, dass ich hinter meinem Level NICHTS anderes mehr habe und dennoch wird ein Schatten meiner Objekte auf den Hintergrund geworfen...
Jo, ist schon immer so, ist manchmal auch ein cooler Effekt. Willst du diesen nicht, musst du einen Boden einfügen, dann werden die Schatten eben auf diesem geworfen.

Quote from: backslider on 2012-Apr-12Zudem gibt es einen "Schatten-Bug", wie gekennzeichnet...
Den kenne ich, mir wurde seinerzeit gesagt, dass dies vor allem bei fehlerhaften Modellen auftritt (oder bei nicht geschlossenen), jedoch bin ich es nie ganz los geworden. Wobei die mitgelieferte Sphäre-funktion diesen Fehler auch erzeugt (vermutlich wurde deine Kugel auch so erzeugt?).
Bei mir tritt dieser Fehler jedoch nur unter wenigen Blickwinkeln auf; und wenn man einen Boden zeichnet, der nahm unter dem Objekt ist, dann sieht man davon nichts. - Aber ob das bei dir eine Lösung ist, weiß ich nicht, eine generelle Lösung (oder ein Tipp, wie wir es vermeiden können) wäre daher gut.

Grüße,
kanonet

PS: verwendest du hierfür Bullet+ES? Falls ja, würde ich auf das ES verzichten, da du sonst alles zweimal berechnest. Aber das hat nichts mit deinen Fehlern hier zu tun, nur ein genereller Tipp.;)
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

backslider

#2
Danke erstmal für deine schnelle Antwort!

QuoteKannst du darauf näher eingehen? Für das Ambient light ist die Position egal. Jedoch kennt das ES kein Ambient light (das normale GLB jedoch sehr wohl!), sondern nur Spot_lights.

Also ich meinte mit Ambient light, ein ES-Licht, welches ich aus der Entfernung -150 auf der Z-Achse auf alles ausstrahle und somit die komplette Umgebung von vorne beleuchte.

QuoteJo, ist schon immer so, ist manchmal auch ein cooler Effekt. Willst du diesen nicht, musst du einen Boden einfügen, dann werden die Schatten eben auf diesem geworfen.

Ich finde das irgendwie nervig, dass es so ist. Klar kann ich einen Boden einfügen, aber ich möchte eigentlich nur, dass meine Welt auf ihre eigenen Sachen Schatten wirft und nicht auf einen nicht existierenden Hintergrund... Den Effekt habe ich in OpenGL ansich noch nicht gesehen. Ist das hier ein Problem von Gernot oder OpenGL?
Da muss ich mir hier wohl ein Workaround basteln, damit ich diesen Effekt nicht mehr habe.
Am besten wäre wohl, einfach eine Skybox oder sowas um meine Welt zu bauen...

QuoteDen kenne ich, mir wurde seinerzeit gesagt, dass dies vor allem bei fehlerhaften Modellen auftritt (oder bei nicht geschlossenen), jedoch bin ich es nie ganz los geworden. Wobei die mitgelieferte Sphäre-funktion diesen Fehler auch erzeugt (vermutlich wurde deine Kugel auch so erzeugt?).
Bei mir tritt dieser Fehler jedoch nur unter wenigen Blickwinkeln auf; und wenn man einen Boden zeichnet, der nahm unter dem Objekt ist, dann sieht man davon nichts. - Aber ob das bei dir eine Lösung ist, weiß ich nicht, eine generelle Lösung (oder ein Tipp, wie wir es vermeiden können) wäre daher gut.

Du hast Recht damit, dass meine Sphere mit der ES-Funktion erstellt wird. Da ich dieses Problem bei meinen Mesh-Cubes nicht habe, werde ich es mal mit einer Mesh-Sphere versuchen, diese dient eh nur zum Testen, ob mein Spielprinzip überhaupt funktioniert, bevor ich Energie in Models stecke.
Dann weiß ich wenigstens, dass mein Mesh keine "Fehler" hat und hoffe, dass der komische Schatten dann nicht mehr auftritt.

QuotePS: verwendest du hierfür Bullet+ES? Falls ja, würde ich auf das ES verzichten, da du sonst alles zweimal berechnest. Aber das hat nichts mit deinen Fehlern hier zu tun, nur ein genereller Tipp.;)

Nein, ich benutze nicht meinen Bullet-Wrapper, da mein Spiel nur mit 2D-Logik arbeitet. :)

Schranz0r

Nennen wir es Feature! ;D

Kann leider zum Bug nichts sagen... das programm schonmal auf einen anderen PC versucht?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

backslider

Jaja, wir Programmierer nennen alles Feature, was nicht funzt, wie es sollte. xD
Habs auch auf nem anderen PC probiert, selbes Problem... Aber hab schon ein Workaround (einfach eine riesige sky-Sphere um die Welt herum, dann ist der Schatten weg.^^

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Hängt ein Beispiel dran? Dann schau ich mal. 

backslider

Also, um einen Schatten ohne Umwelt zu werfen, geht der Code:
Code (glbasic) Select

SYSTEMPOINTER TRUE

LOCAL light% = EntityCreateLight(RGB(0xfe, 0xfa, 0xed))
LOCAL sphere% = EntityCreateSphere(1,32)
LOCAL cam% = EntityCreateCamera()

EntitySetPosition(light,10,10,-100)
EntitySetPosition(cam,0,0,-10)
EntityEnableShadow(sphere, TRUE)

WHILE TRUE
CLEARSCREEN RGB(0xd8, 0xd8, 0xd8)
EntityDrawSystem()
SHOWSCREEN
WEND


Mir ist aufgefallen, dass man keinen Schatten mehr sieht, wenn man die Kugel z.B 10 groß macht und die Kamera auf z=-100 setzt... Komisch.

Den anderen Bug kann ich schlecht in einem Beispiel reproduzieren und mein Spielcode ist komplex. xD