Files
2025-08-23 12:19:28 +08:00

38 lines
819 B
C++

#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<int32_t, int32_t> 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
);
}