Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void RasterizeTriangle(ui32 *dest, const ui32 &destWidth, const ui32 &color, v2I t0, v2I t1, v2I t2)
- {
- if (t0[1] > t1[1]) std::swap(t0, t1);
- if (t0[1] > t2[1]) std::swap(t0, t2);
- if (t1[1] > t2[1]) std::swap(t1, t2);
- i32 total_height = t2[1] - t0[1];
- for (i32 i = 0; i < total_height; i++)
- {
- bool second_half = i > t1[1] - t0[1] || t1[1] == t0[1];
- i32 segment_height = second_half ? t2[1] - t1[1] : t1[1] - t0[1];
- float alpha = (float)i / total_height;
- float beta = (float)(i - (second_half ? t1[1] - t0[1] : 0)) / segment_height;
- i32 A[2], B[2];
- A[0] = i32(t0[0] + (t2[0] - t0[0]) * alpha);
- B[0] = i32(second_half ? t1[0] + (t2[0] - t1[0]) * beta : t0[0] + (t1[0] - t0[0]) * beta);
- A[1] = i32(t0[1] + (t2[1] - t0[1]) * alpha);
- B[1] = i32(second_half ? t1[1] + (t2[1] - t1[1]) * beta : t0[1] + (t1[1] - t0[1]) * beta);
- if (A[0] > B[0]) std::swap(A, B);
- ui32 *pData = dest + (A[0] + (t0[1] + i) * destWidth);
- for (i32 x = A[0]; x <= B[0]; x++)
- *pData++ = color;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment