mini3d
El tutorial de representación de software 3D no tiene optimización de rendimiento, y principalmente explica a las personas cómo escribir un renderizador de software de tubería fija. Aunque el código principal es de solo 700 líneas, el gorrión es pequeño y tiene todos los órganos internos.
【Readme en inglés】
característica
- Archivo único: el código fuente tiene solo un mini3d.c, y un solo archivo implementa todo y es fácil de leer.
- Compilación independiente: sin dependencias de la biblioteca de terceros, sin directorios de ingeniería complejos.
- Modelo estándar: modelo de coordenada D3D estándar, sistema zurdo más el mundo / vista / proyección tres matriz
- Implementación de cultivos: recorte simple de CVV
- Soporte de textura: soporte máximo para 1024 x 1024 texturas
- Cache de profundidad: use el caché de profundidad para determinar la imagen antes y después
- Mapa de perspectiva: mapeo de textura en perspectiva y relleno de color de perspectiva
- Computación de borde: cálculo preciso de cobertura del borde del polígono
- Implementación optimizada: el motor de renderizado tiene solo 700 filas, los módulos son claros y la columna vertebral es prominente.
- Comentarios detallados: comentarios detallados sobre el código principal
Compilación
- Mingw: GCC -O3 Mini3d.C -O Mini3d.exe -lgdi32
- MSVC: CL -O2 -NOLOGO MINI3D.C
- Versión compilada: https://github.com/skywind3000/mini3d/releases
Manifestación
Llena de textura: render_state_texture
Llenado de color: render_state_color
Dibujo de estructura de alambre: render_state_wireframe
Aumentar la iluminación y la interpolación lineal cuadrática (captura de pantalla del efecto de iluminación agregado por un amigo a mini3d)
Tarea básica
- Agregue la eliminación de retroceso
- Agregar luz simple
- Proporcionar más modos de renderizado
- Implementar la lectura de textura de la diferencia lineal cuadrática
Tarea avanzada
- Deducir y probar todo el conocimiento geométrico utilizado en el programa
- Optimizar el rendimiento de la computación de vértices
- Optimizar el rendimiento draw_scanline
- Carga de textura desde el archivo BMP/TGA
- Cargue el escenario BSP e implementa el roaming
Explicación principal
- Wei Yixiao: ¿Cómo obtienen OpenGL y DirectX ubicaciones de píxeles cuando solo se conocen vértices?
- Wei Yixiao: ¿Cómo accede la computadora a la tarjeta gráfica?
Proyectos relacionados
- RenderHelp: Otra implementación de renderizador suave optimizado que admite tuberías de representación programables, consulte la introducción para más detalles.
Las donaciones son bienvenidas
Su donación es la mayor afirmación de este tutorial. La donación se utilizará para mejorar la documentación del tutorial y las leyendas, así como ayudarme a escribir tutoriales más interesantes.
Bienvenido a seguir
Blog: https://skywind.me/blog
Zhihu: https://www.zhihu.com/people/skywind3000