Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
Rasterizer类 参考

光栅化器 更多...

#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坐标,法线向量)利用屏幕空间进行插值
 

详细描述

光栅化器

成员函数说明

◆ compute_barycentric_2d()

tuple< float, float, float > Rasterizer::compute_barycentric_2d ( float x,
float y,
const Eigen::Vector4f * v )
staticprivate

计算像素坐标 (x,y) 在给定三个顶点的三角形内的重心坐标

◆ inside_triangle()

bool Rasterizer::inside_triangle ( int x,
int y,
const Eigen::Vector4f * vertices )
staticprivate

判断像素坐标 (x,y) 是否在给定三个顶点的三角形内

◆ interpolate()

Vector3f Rasterizer::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 )
staticprivate

对顶点的任意属性(如world space坐标,法线向量)利用屏幕空间进行插值

这里的插值使用了透视矫正插值

参数
alpha,beta,gamma计算出的重心坐标
vert1,vert2,vert3三角形的三个顶点的任意待插值属性
weight三个顶点的 w 坐标 (Vector3f{v[0].w(), v[1].w(), v[2].w()})
Z1 / (alpha / v[0].w() + beta / v[1].w() + gamma / v[2].w());

◆ rasterize_triangle()

void Rasterizer::rasterize_triangle ( Triangle & t)
private

将指定三角形光栅化为片元。

参数
t要进行光栅化的三角形

该类的文档由以下文件生成: