Seite 1 von 1

Schatten anzeigen

Verfasst: 26.04.2015 17:40
von Purebasium
hi,
in letzter zeit habe ich an einem kleinen code geabreitet, der den schatten zu einem Objekt berechnet (bzw. 4 punkte die zusammen verbunden die Außenlinien des Schattens bilden)

Jetzt habe ich aber ein Problem:
wie kann ich den schatten anzeigen?
Meine erste Idee:

Code: Alles auswählen

  StartDrawing(ScreenOutput())
  LineXY(x1,y1,x2,y2,RGB(255,0,255))

  LineXY(x3,y3,x4,y4,RGB(255,0,255))

  StopDrawing()

Das Problem dabei ist hierbei aber, dass es bei mehr als 2 schatten schon anfängt zu ruckeln.

Versuch 2:

Code: Alles auswählen


  CreateSprite(4,1920,1080)
  StartDrawing(SpriteOutput(4)) 
  Box(0,0,1920,1080,RGB(0,0,0))
  StopDrawing()   
  


TransformSprite(4,x1,y1,1,x2,y2,1,x3,y3,1,x4,y4,1)
hierbei habe ich das Problem, dass es einfach den sprite total seltsam streckt.


Außerdem ist bei den vorherigen Lösungen das Problem, das der Hintergrund nur komplett schwarz ist (im schatten) und es nicht möglich ist, dass der Schatten den Hintergrund nur verdunkelt.


Hat jemand noch eine Idee was ich machen könnte?

Re: Schatten anzeigen

Verfasst: 26.04.2015 17:42
von Chimorin
Ich verstehe das nicht ganz. Möchtest du selber Schatten "programmieren"?
Es gibt doch die eingebauten 3 Typen, die mehr oder weniger gut funktionieren, aber auf jeden Fall besser als selbst programmierte sind.

Re: Schatten anzeigen

Verfasst: 26.04.2015 17:45
von Purebasium
Es gibt aber keine in 2d ohne 3d engine...

Re: Schatten anzeigen

Verfasst: 26.04.2015 17:47
von Purebasium
Also einfach nur für normale 2d sprites auf OpenScreen(1920,1080,32,"Schatten").

Re: Schatten anzeigen

Verfasst: 26.04.2015 19:52
von Chimorin
Hey,
tut mir leid, ich habe gleich an 3D gedacht :D

Du könntest versuchen deine "Objekte" als Schatten zu verwenden. Hierzu einfach nur schwarz als Farbe verwenden und das Ganze je nach Lage der Lichtquelle transformieren (Vektorrechnung). Natürlich wird zuerst der Schatten des Objektes gemalt, dann das Objekt selber.

Für das Abdunkeln musst du mit dem Alphawert rumspielen. Schau einfach mal nach DisplayTransparentSprite(#Sprite, x, y [, Intensität [, Farbe]])
in der Hilfe.