Optmize clipping

This commit is contained in:
duarteapcoelho 2022-08-23 19:31:55 +01:00
parent 27dde4bc4b
commit f6cacf0f86
2 changed files with 19 additions and 7 deletions

View file

@ -993,9 +993,6 @@ int main(){
view = mat4::rotateY(view, -cameraAngle - HALF_PI);
view = mat4::translate(view, -cameraPos.x, 0, -cameraPos.z);
// Rasterizer::drawModel(trees, false);
// Rasterizer::drawTriangle(trees.mesh.triangles[51+51*100], trees.shader, false);
carModel.modelMatrix = carMatrix;
carModel.viewMatrix = view;
@ -1012,6 +1009,7 @@ int main(){
// sprintf(buffer, "%d", (int)Time::delta);
itoa((int)Time::delta, (unsigned char*)buffer);
#endif
// Display::fillRect(0, 0, 30, 20, newColor(0, 0, 0));
Display::drawText(0, 0, buffer, newColor(255, 255, 255));
Display::show();

View file

@ -332,11 +332,25 @@ namespace Rasterizer {
return;
}
Mesh mesh = clipTriangle(triangle);
for(int i = 0; i < mesh.numTriangles; i++){
_drawTriangle(model, mesh.triangles[i], useDepth, isShaded);
bool allInside = true;
for(int i = 0; i < 5; i++){
if(dot3(clippingPlanes[i].n, triangle.p0) + clippingPlanes[i].d < 0
|| dot3(clippingPlanes[i].n, triangle.p1) + clippingPlanes[i].d < 0
|| dot3(clippingPlanes[i].n, triangle.p2) + clippingPlanes[i].d < 0){
allInside = false;
break;
}
}
if(allInside){
_drawTriangle(model, triangle, useDepth, isShaded);
} else {
Mesh mesh = clipTriangle(triangle);
for(int i = 0; i < mesh.numTriangles; i++){
_drawTriangle(model, mesh.triangles[i], useDepth, isShaded);
}
free(mesh.triangles);
}
free(mesh.triangles);
}
};