Optimize clipping
This commit is contained in:
parent
c8a99400f2
commit
6904a54d5e
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue