Optimize clipping

This commit is contained in:
duarteapcoelho 2022-09-05 12:01:59 +01:00
parent c8a99400f2
commit 6904a54d5e
3 changed files with 9 additions and 11 deletions

View File

@ -38,7 +38,7 @@ public:
mat4 viewMatrix;
Model();
Model(Mesh mesh);
void draw(bool useDepth, bool isShaded);
void draw(bool useDepth, bool isShaded, bool clipTriangles);
};
namespace Rasterizer {
@ -49,7 +49,5 @@ namespace Rasterizer {
vec3d toDevice(vec3d p);
vec3i toScreen(vec3d p);
void drawLine(vec3d p0, vec3d p1);
void drawTriangle(Model *model, Triangle triangle, Shader shader, bool useDepth, bool isShaded);
void drawModel(Model model, bool useDepth, bool isShaded);
void drawTriangle(Model *model, Triangle triangle, Shader shader, bool useDepth, bool isShaded, bool clipTriangles);
};

View File

@ -1181,14 +1181,14 @@ int main(){
carModel.viewMatrix = view;
trackModel.viewMatrix = view;
trackModel.draw(false, false);
trackModel.draw(false, false, true);
for(int i = 0; i < NUM_TRACK_POINTS*2-2; i++){
coneModels[i].viewMatrix = view;
coneModels[i].draw(true, true);
coneModels[i].draw(true, true, false);
}
carModel.draw(true, true);
carModel.draw(true, true, false);
char buffer[10];
#ifdef SDL

View File

@ -338,7 +338,7 @@ namespace Rasterizer {
return m;
}
inline void drawTriangle(Model *model, Triangle triangle, bool useDepth, bool isShaded){
inline void drawTriangle(Model *model, Triangle triangle, bool useDepth, bool isShaded, bool clipTriangles){
triangle.p0 = model->viewMatrix * model->modelMatrix * triangle.p0;
triangle.p1 = model->viewMatrix * model->modelMatrix * triangle.p1;
triangle.p2 = model->viewMatrix * model->modelMatrix * triangle.p2;
@ -359,7 +359,7 @@ namespace Rasterizer {
if(inside == 5){
_drawTriangle(model, triangle, useDepth, isShaded);
} else if(inside != 0){
} else if(inside != 0 && clipTriangles){
Mesh mesh = clipTriangle(triangle);
for(int i = 0; i < mesh.numTriangles; i++){
_drawTriangle(model, mesh.triangles[i], useDepth, isShaded);
@ -376,8 +376,8 @@ Model::Model(){
Model::Model(Mesh mesh){
this->mesh = mesh;
}
void Model::draw(bool useDepth, bool isShaded){
void Model::draw(bool useDepth, bool isShaded, bool clipTriangles){
for(int i = 0; i < mesh.numTriangles; i++){
Rasterizer::drawTriangle(this, mesh.triangles[i], useDepth, isShaded);
Rasterizer::drawTriangle(this, mesh.triangles[i], useDepth, isShaded, clipTriangles);
}
}