Skip to content

Repository files navigation

Software Renderer

Project.1.mp4

Features

Line drawing (DDA, z-buffer)

Line clipping (Cohen–Sutherland)

Triangle filling (top-left strategy, screen space clipping)

Z-buffering

Color interpolation

Frustum culling

Near plane clipping

Texture mapping (affine)

Documentation

The /docs directory contains GeoGebra, Mathcad and other files that contain visualization and formal derivation of all mathematical constructions used in the renderer: rotation matrices, clipping algorithms etc.

Notes

  • Вырожденные треугольники: проверить/убедиться/доказать, что для вырожденного треугольника (который является смежным с, например, двумя соседними "нормальными") справедливо следующее: если такой треугольник имеет хотя бы один фрагмент, который растеризуется, то этот фрагмент принадлежит только этому треугольнику и, соответственно, растеризуется только в контексте этого треугольники, то есть, смежные треугольники данный фрагмент не растеризуют, а значит, при реализации, например, прозрачности, данный фрагмент не будет закрашен дважды.
  • В данной реализации возможны "дырки" на границах двух смежных треугольников из-за инкрементного вычисления начала и конца каждой скан-линии. Например, при отрисовке левого треугольника мы можем пропустить пиксел на правом ребре из-за накопленных ошибок округления при вычислении конца скан-линии: допустим, истинное значение конца скан-линии для текущей координаты Y равно 399.000123, но инкрементом мы попали в 399.0, поэтому ceil(399.0)-1 даст 398. Но при отрисовке правого треугольника, на этом же уровне Y мы можем получить истинное начало скан-линии равное 399.000123, что даст после применения правила top-left ceil(399.000123) = 400.0, поэтому пиксел с координатой 399 также не будет отрисован. Самое простое решение проблемы: для каждой скан-линии вычислять начало и конец как текущая дельта по y, умноженная на slope ребра.

Model

https://skfb.ly/6V6GL

About

Naive educational 3D software renderer

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages