When I rotate the triangle, the zculling seems to work just fine (outputs negative as it turns away and then doesn't render the triangle while the z value is negative) however, when I try to render ANY model or other shape, it just doesn't seem to work...
the pseudo code for my model loader is:
for(all the faces)
{
drawTriangle(face.x1, face.y1, face.z1, face.x2, face.y2, face.z2, face.x3, face.y3, face.z3, 0);
}
The function I am using the draw the triangles is:
void drawTriangle(int x1, int y1, int z1, int x2, int y2, int z2, int x3, int y3, int z3, int angle)
{
if(angle != 0){
float value=angle*3.14/180;
z1 = z1*(cos(value));
x1 = x1*(sin(value));
x2 = x2*(sin(value));
z2 = z2*(cos(value));
x3 = x3*(sin(value));
z3 = z3*(cos(value));
}
int projx1 = projectedx(x1, z1, FOV);
int projy1 = projectedy(y1, z1, FOV);
int projx2 = projectedx(x2, z2, FOV);
int projy2 = projectedy(y2, z2, FOV);
int projx3 = projectedx(x3, z3, FOV);
int projy3 = projectedy(y3, z3, FOV);
int a[2] = {projx1, projy1};
int b[2] = {projx2, projy2};
int c[2] = {projx3, projy3};
int a1[2] = {projx3 - projx1, projy3 - projy1};
int b1[2] = {projx3 - projx2, projy3 - projy2};
int z = (a1[0] * b1[1]) - (a1[1] * b1[0]);
char output[8];
itoa(z, output, 10);
LcdGotoXYFont(1,1);
LcdStr(FONT_1X, output);
if(z >= 0){
if(projx1 >= 0 && projx2 >= 0 && projy1 >= 0 && projy2 >= 0 && projx1 <= 84 && projy1 <= 48 && projx2 <= 84 && projy2 <= 48){
LcdLine( projx1, projx2, projy1, projy2, PIXEL_ON);
}
if(projx2 >= 0 && projx3 >= 0 && projy2 >= 0 && projy3 >= 0 && projx2 <= 84 && projy2 <= 48 && projx3 <= 84 && projy3 <= 48){
LcdLine(projx2, projx3, projy2, projy3, PIXEL_ON);
}
if(projx1 >= 0 && projx3 >= 0 && projy1 >= 0 && projy3 >= 0 && projx1 <= 84 && projy1 <= 48 && projx3 <= 84 && projy3 <= 48){
LcdLine(projx1, projx3, projy1, projy3, PIXEL_ON);
}
}
}
I develop to expand the universe.
"Live long and code strong!" - Delta_Echo (dream.in.code)