1. 程式人生 > >軟體光柵化渲染器(五)

軟體光柵化渲染器(五)

三角形的線性插值

//輸入三角形的三個點,輸出三角形內一點的插值
float GetInterpValue(float x0, float y0, float value0, 
    float x1, float y1, float value1, 
    float x2, float y2, float value2, 
    float x, float y)
{
    Vector3D p1 = { x1 - x, y1 - y, 0 };
    Vector3D p2 = { x2 - x, y2 - y, 0 };
    Vector3D p0 = { x0 - x, y0 - y };

    Vector3D p12;
    VectorCross(p12, p1, p2);
    //三角形p12的面積
float Sp12 = CalculateVector3DLength(p12); Vector3D p02; VectorCross(p02, p0, p2); //三角形p02的面積 float Sp02 = CalculateVector3DLength(p02); Vector3D p01; VectorCross(p01, p0, p1); //三角形p01的面積 float Sp01 = CalculateVector3DLength(p01); float total = Sp12 + Sp02 + Sp01; //根據面積的權進行插值
float value = value0 * Sp12 / total + value1 * Sp02 / total + value2 * Sp01 / total; return value; }