从头开始的 3D 图形



我需要从头开始构建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 齐次变换矩阵

其余的取决于要实现的渲染类型:

  1. 边界多边形网格渲染

    这种渲染是当今gfx卡的原生方式。您需要为以下各项实现缓冲区:

    • 深度(对于没有 z 排序的填充面)
    • 屏幕(避免闪烁,也可用作画布)
    • 阴影,模板,辅助(用于高级渲染技术)

    它们通常具有与目标渲染区域相同的分辨率。最重要的是,您需要实现支持的基元,至少渲染点,线,三角形。看:

    • 填充三角形的算法

    除此之外,您可以添加纹理,着色器以及您想要的任何其他内容...

  2. (返回)光线追踪

    这种渲染非常不同,当前的 gfx 硬件不是为此构建的。这涉及实现射线/基元交集计算、斯涅尔定律和网格的分析表示。这样,您还可以进行多光谱渲染和更精确的物理效果/过程,请参阅:

    • 如何在三.js中渲染地球的"大气层"? 混合方法 #1+#2
    • 二维光线追踪器的算法
    • 如何在GLSL中实现2D光线投射光效果
    • 多波段影像栅格到 RGB

    2D 和 3D 光线追踪器之间的区别几乎为零,唯一的区别是如何计算垂直矢量......

    还有不同的渲染方法,如体积渲染、混合方法等,但它们的实现通常是面向任务的,通用描述很可能只是误导......这是我的一些3D光线追踪器:

    • 通过 3D 网格的反向光线跟踪
    • 通过 3D 体积进行反向光线跟踪

相关内容

  • 没有找到相关文章

最新更新