aths
2003-05-27, 22:24:49
Heute habe ich eine superprimitives, aber leidlich funktionierende Schattenwerfen geschrieben. Dazu wird einfach für jedes Dreieck oder Viereck auch gleich immer das zugehörige Schatten-Dreieck- bzw. Viereck gerendert. Folgende Einschränkungen gibt es:
Der Schatten werfende Körper muss konvex sein. Der Schatten muss komplett auf der Schattenwurf-Ebene liegen. Mit diesen Schwächen kann ich leben.
Nun hätte ich gerne weichen Schatten. Idee: Die punktförmige Lichtquelle ist Mittelpunkt eines kleinen Würfels. Die Ecken dieses Würfels werden nun ebenfalls als Lichtquellen betrachtet, so dass ingesamt 9 mal Schatten geworfen wird. Die Ränder sollen also je nach Abstand Körper - Schattenwurf-Ebene abgestuft erscheinen.
Doch wie kriegt man das hin, dass sich die Schatten überlagern? Ein Schatten ist bei mir im Moment einfach ein dunkelgrünes Polygon auf einer hellgrünen Fläche.
Wie gesagt werfen alle einzelnen Polygone jeweils ihren Schatten. Da einfach immer ein dunkelgrünes Schattendreieck gerendert wird, sind die während eines Schattenwurf-Passes sich überlagernde Schatten nicht dunkler als die anderen. Das ist ja auch gut so.
Wie könnte man es nun bewerkstelligen, die weichen Ränder reinzukriegen?
Der Schatten werfende Körper muss konvex sein. Der Schatten muss komplett auf der Schattenwurf-Ebene liegen. Mit diesen Schwächen kann ich leben.
Nun hätte ich gerne weichen Schatten. Idee: Die punktförmige Lichtquelle ist Mittelpunkt eines kleinen Würfels. Die Ecken dieses Würfels werden nun ebenfalls als Lichtquellen betrachtet, so dass ingesamt 9 mal Schatten geworfen wird. Die Ränder sollen also je nach Abstand Körper - Schattenwurf-Ebene abgestuft erscheinen.
Doch wie kriegt man das hin, dass sich die Schatten überlagern? Ein Schatten ist bei mir im Moment einfach ein dunkelgrünes Polygon auf einer hellgrünen Fläche.
Wie gesagt werfen alle einzelnen Polygone jeweils ihren Schatten. Da einfach immer ein dunkelgrünes Schattendreieck gerendert wird, sind die während eines Schattenwurf-Passes sich überlagernde Schatten nicht dunkler als die anderen. Das ist ja auch gut so.
Wie könnte man es nun bewerkstelligen, die weichen Ränder reinzukriegen?