38 lines
819 B
C++
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
|
|
);
|
|
}
|