我需要从头开始构建3D图形的程序的最低配置,例如,我只有SFML来处理2D图形,我需要实现可以在空间中移动和旋转的Camera对象
从哪里开始以及如何实现vector3d ->vector2d转换功能和其他必要的东西
我现在只有: 角度 Phi、Xi、epsilon 1-3 和一些我可以使用以下公式在屏幕上绘制的对象
x/y = center.x/y + scale.x/y * dot(point[i], epsilon1/epsilon2)
但这样我只是变换"world"
轴,而不是对象点
首先,您需要实现转换矩阵和向量数学:
- 以数学方式计算简单的图形管道
- 了解 4x4 齐次变换矩阵
其余的取决于要实现的渲染类型:
-
边界多边形网格渲染
这种渲染是当今gfx卡的原生方式。您需要为以下各项实现缓冲区:
- 深度(对于没有 z 排序的填充面)
- 屏幕(避免闪烁,也可用作画布)
- 阴影,模板,辅助(用于高级渲染技术)
它们通常具有与目标渲染区域相同的分辨率。最重要的是,您需要实现支持的基元,至少渲染点,线,三角形。看:
- 填充三角形的算法
除此之外,您可以添加纹理,着色器以及您想要的任何其他内容...
-
(返回)光线追踪
这种渲染非常不同,当前的 gfx 硬件不是为此构建的。这涉及实现射线/基元交集计算、斯涅尔定律和网格的分析表示。这样,您还可以进行多光谱渲染和更精确的物理效果/过程,请参阅:
- 如何在三.js中渲染地球的"大气层"? 混合方法 #1+#2
- 二维光线追踪器的算法
- 如何在GLSL中实现2D光线投射光效果
- 多波段影像栅格到 RGB
2D 和 3D 光线追踪器之间的区别几乎为零,唯一的区别是如何计算垂直矢量......
还有不同的渲染方法,如体积渲染、混合方法等,但它们的实现通常是面向任务的,通用描述很可能只是误导......这是我的一些3D光线追踪器:
- 通过 3D 网格的反向光线跟踪
- 通过 3D 体积进行反向光线跟踪