#include "dvr_triangle.h" int32_t Triangle::nextID() { static int32_t id = 0; return id++; } davinci::fVector3 Triangle::randomColor() { return davinci::fVector3(rand() * 0.8f / RAND_MAX, rand() * 0.8f / RAND_MAX, rand() * 0.8f / RAND_MAX); } void Triangle::build(int32_t canvasWidth, int32_t canvasHeight, davinci::AntiAliasingTech aaTech) { m_pixels.clear(); bool ccw = false; if ((m_p2 - m_p1).crossProduct(m_p0 - m_p2).z > 0) { ccw = true; } //build pixel data davinci::Rasterizer::drawTriangleLarrabee(aaTech, canvasWidth, canvasHeight, m_p0.xy(), m_p1.xy(), m_p2.xy(), [this](std::pair pos, const davinci::fVector3& t, uint32_t mask) { Pixel pixel; pixel.x = pos.first; pixel.y = pos.second; pixel.mask = mask; m_pixels.push_back(pixel); }, ccw ); }