Dandelion 1.1.1
A light-weight 3D builder for educational usage
|
光栅化器 更多...
#include <rasterizer.h>
Public 成员函数 | |
void | worker_thread () |
Private 成员函数 | |
void | rasterize_triangle (Triangle &t) |
将指定三角形光栅化为片元。 | |
静态 Private 成员函数 | |
static bool | inside_triangle (int x, int y, const Eigen::Vector4f *vertices) |
static std::tuple< float, float, float > | compute_barycentric_2d (float x, float y, const Eigen::Vector4f *v) |
static Eigen::Vector3f | interpolate (float alpha, float beta, float gamma, const Eigen::Vector3f &vert1, const Eigen::Vector3f &vert2, const Eigen::Vector3f &vert3, const Eigen::Vector3f &weight, const float &Z) |
对顶点的任意属性(如world space坐标,法线向量)利用屏幕空间进行插值 | |
光栅化器
|
staticprivate |
计算像素坐标 (x,y) 在给定三个顶点的三角形内的重心坐标
|
staticprivate |
判断像素坐标 (x,y) 是否在给定三个顶点的三角形内
|
staticprivate |
对顶点的任意属性(如world space坐标,法线向量)利用屏幕空间进行插值
这里的插值使用了透视矫正插值
alpha,beta,gamma | 计算出的重心坐标 |
vert1,vert2,vert3 | 三角形的三个顶点的任意待插值属性 |
weight | 三个顶点的 w 坐标 (Vector3f{v[0].w(), v[1].w(), v[2].w()} ) |
Z | 1 / (alpha / v[0].w() + beta / v[1].w() + gamma / v[2].w()); |
|
private |
将指定三角形光栅化为片元。
t | 要进行光栅化的三角形 |