Per-vertex lighting
This commit is contained in:
parent
b91d5eee31
commit
5d4221fda6
@ -36,8 +36,8 @@ void FaceBall::LoadLevel(int level)
|
|||||||
std::vector<MapSquare>row;
|
std::vector<MapSquare>row;
|
||||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||||
row.push_back({});
|
row.push_back({});
|
||||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y}},{{0,0},{0,1},{1,0}},BLUE });
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y}},{{0,0},{0,1},{1,0}},{BLUE,BLUE,BLUE} });
|
||||||
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y + 1}},{{1,0},{0,1},{1,1}},BLUE });
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y + 1}},{{1,0},{0,1},{1,1}},{BLUE,BLUE,BLUE} });
|
||||||
}
|
}
|
||||||
map.push_back(row);
|
map.push_back(row);
|
||||||
}
|
}
|
||||||
@ -58,20 +58,20 @@ void FaceBall::LoadLevel(int level)
|
|||||||
}
|
}
|
||||||
AddWall(wallData, { x,y });
|
AddWall(wallData, { x,y });
|
||||||
if (map[y][x].wallN != NULL) {
|
if (map[y][x].wallN != NULL) {
|
||||||
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{0,1},{1,0}},YELLOW });
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{0,1},{1,0}},{YELLOW,YELLOW,YELLOW} });
|
||||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x + 1,0,(float)y},{(float)x + 1,1,(float)y}},{{0,1},{1,1},{1,0}},YELLOW });
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x + 1,0,(float)y},{(float)x + 1,1,(float)y}},{{0,1},{1,1},{1,0}},{YELLOW,YELLOW,YELLOW} });
|
||||||
}
|
}
|
||||||
if (map[y][x].wallS != NULL) {
|
if (map[y][x].wallS != NULL) {
|
||||||
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x,0,(float)y + 1},{(float)x,1,(float)y + 1}},{{0,0},{1,1},{1,0}},DARK_RED });
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x,0,(float)y + 1},{(float)x,1,(float)y + 1}},{{0,0},{1,1},{1,0}},{DARK_RED,DARK_RED,DARK_RED} });
|
||||||
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x + 1,0,(float)y + 1},{(float)x,0,(float)y + 1}},{{0,0},{0,1},{1,1}},DARK_RED });
|
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y + 1},{(float)x + 1,0,(float)y + 1},{(float)x,0,(float)y + 1}},{{0,0},{0,1},{1,1}},{DARK_RED,DARK_RED,DARK_RED} });
|
||||||
}
|
}
|
||||||
if (map[y][x].wallW != NULL) {
|
if (map[y][x].wallW != NULL) {
|
||||||
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,1,(float)y + 1}, {(float)x,0,(float)y + 1}},{{1,0},{0,0},{0,1}},MAGENTA });
|
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,1,(float)y + 1}, {(float)x,0,(float)y + 1}},{{1,0},{0,0},{0,1}},{MAGENTA,MAGENTA,MAGENTA} });
|
||||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,1,(float)y}, {(float)x,0,(float)y + 1}}, {{1,1},{1,0},{0,1}},MAGENTA });
|
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,1,(float)y}, {(float)x,0,(float)y + 1}}, {{1,1},{1,0},{0,1}},{MAGENTA,MAGENTA,MAGENTA} });
|
||||||
}
|
}
|
||||||
if (map[y][x].wallE != NULL) {
|
if (map[y][x].wallE != NULL) {
|
||||||
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1},{(float)x + 1,1,(float)y + 1},{(float)x + 1,1,(float)y}},{{1,1},{1,0},{0,0}},CYAN });
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1},{(float)x + 1,1,(float)y + 1},{(float)x + 1,1,(float)y}},{{1,1},{1,0},{0,0}},{CYAN,CYAN,CYAN} });
|
||||||
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1} ,{(float)x + 1,1,(float)y},{(float)x + 1,0,(float)y}},{{1,1},{0,0},{0,1}},CYAN });
|
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1} ,{(float)x + 1,1,(float)y},{(float)x + 1,0,(float)y}},{{1,1},{0,0},{0,1}},{CYAN,CYAN,CYAN} });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -392,7 +392,9 @@ int FaceBall::Triangle_ClipAgainstPlane(vec3d plane_p, vec3d plane_n, Triangle&
|
|||||||
// the plane, the triangle simply becomes a smaller triangle
|
// the plane, the triangle simply becomes a smaller triangle
|
||||||
|
|
||||||
// Copy appearance info to new triangle
|
// Copy appearance info to new triangle
|
||||||
out_tri1.col = in_tri.col;
|
out_tri1.col[0] = in_tri.col[0];
|
||||||
|
out_tri1.col[1] = in_tri.col[1];
|
||||||
|
out_tri1.col[2] = in_tri.col[2];
|
||||||
out_tri1.tex = in_tri.tex;
|
out_tri1.tex = in_tri.tex;
|
||||||
|
|
||||||
// The inside point is valid, so keep that...
|
// The inside point is valid, so keep that...
|
||||||
@ -422,8 +424,12 @@ int FaceBall::Triangle_ClipAgainstPlane(vec3d plane_p, vec3d plane_n, Triangle&
|
|||||||
// represent a quad with two new triangles
|
// represent a quad with two new triangles
|
||||||
|
|
||||||
// Copy appearance info to new triangles
|
// Copy appearance info to new triangles
|
||||||
out_tri1.col = in_tri.col;
|
out_tri1.col[0] = in_tri.col[0];
|
||||||
out_tri2.col = in_tri.col;
|
out_tri2.col[0] = in_tri.col[0];
|
||||||
|
out_tri1.col[1] = in_tri.col[1];
|
||||||
|
out_tri2.col[1] = in_tri.col[1];
|
||||||
|
out_tri1.col[2] = in_tri.col[2];
|
||||||
|
out_tri2.col[2] = in_tri.col[2];
|
||||||
out_tri1.tex = in_tri.tex;
|
out_tri1.tex = in_tri.tex;
|
||||||
out_tri2.tex = in_tri.tex;
|
out_tri2.tex = in_tri.tex;
|
||||||
|
|
||||||
@ -471,7 +477,9 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
triTransformed.uv[0] = tri.uv[0];
|
triTransformed.uv[0] = tri.uv[0];
|
||||||
triTransformed.uv[1] = tri.uv[1];
|
triTransformed.uv[1] = tri.uv[1];
|
||||||
triTransformed.uv[2] = tri.uv[2];
|
triTransformed.uv[2] = tri.uv[2];
|
||||||
triTransformed.col = tri.col;
|
triTransformed.col[0] = tri.col[0];
|
||||||
|
triTransformed.col[1] = tri.col[1];
|
||||||
|
triTransformed.col[2] = tri.col[2];
|
||||||
|
|
||||||
vec3d normal, line1, line2;
|
vec3d normal, line1, line2;
|
||||||
line1 = Vector_Sub(triTransformed.p[1], triTransformed.p[0]);
|
line1 = Vector_Sub(triTransformed.p[1], triTransformed.p[0]);
|
||||||
@ -494,10 +502,30 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
triViewed.uv[0] = triTransformed.uv[0];
|
triViewed.uv[0] = triTransformed.uv[0];
|
||||||
triViewed.uv[1] = triTransformed.uv[1];
|
triViewed.uv[1] = triTransformed.uv[1];
|
||||||
triViewed.uv[2] = triTransformed.uv[2];
|
triViewed.uv[2] = triTransformed.uv[2];
|
||||||
triViewed.col = Pixel(triTransformed.col.r * dp * dp, triTransformed.col.g * dp * dp, triTransformed.col.b * dp * dp);
|
triViewed.col[0] = Pixel(triTransformed.col[0].r * dp * dp, triTransformed.col[0].g * dp * dp, triTransformed.col[0].b * dp * dp);
|
||||||
|
triViewed.col[1] = Pixel(triTransformed.col[1].r * dp * dp, triTransformed.col[1].g * dp * dp, triTransformed.col[1].b * dp * dp);
|
||||||
|
triViewed.col[2] = Pixel(triTransformed.col[2].r * dp * dp, triTransformed.col[2].g * dp * dp, triTransformed.col[2].b * dp * dp);
|
||||||
float dist = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[0].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[0].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[0].z, 2));
|
float dist = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[0].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[0].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[0].z, 2));
|
||||||
|
float dist2 = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[1].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[1].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[1].z, 2));
|
||||||
|
float dist3 = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[2].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[2].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[2].z, 2));
|
||||||
float colorMult = dist > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist + PI / 2);
|
float colorMult = dist > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist + PI / 2);
|
||||||
triViewed.col = Pixel(triViewed.col.r * colorMult, triViewed.col.g * colorMult, triViewed.col.b * colorMult);
|
float colorMult2 = dist2 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist2 + PI / 2);
|
||||||
|
float colorMult3 = dist3 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist3 + PI / 2);
|
||||||
|
triViewed.col[0] = Pixel(triViewed.col[0].r * colorMult, triViewed.col[0].g * colorMult, triViewed.col[0].b * colorMult);
|
||||||
|
triViewed.col[1] = Pixel(triViewed.col[1].r * colorMult2, triViewed.col[1].g * colorMult2, triViewed.col[1].b * colorMult2);
|
||||||
|
triViewed.col[2] = Pixel(triViewed.col[2].r * colorMult3, triViewed.col[2].g * colorMult3, triViewed.col[2].b * colorMult3);
|
||||||
|
|
||||||
|
for (Bullet& b : bullets) {
|
||||||
|
float dist = std::sqrtf(std::powf(b.pos.x - triTransformed.p[0].x, 2) + std::powf(b.pos.y - triTransformed.p[0].y, 2) + std::powf(b.pos.z - triTransformed.p[0].z, 2));
|
||||||
|
float dist2 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[1].x, 2) + std::powf(b.pos.y - triTransformed.p[1].y, 2) + std::powf(b.pos.z - triTransformed.p[1].z, 2));
|
||||||
|
float dist3 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[2].x, 2) + std::powf(b.pos.y - triTransformed.p[2].y, 2) + std::powf(b.pos.z - triTransformed.p[2].z, 2));
|
||||||
|
float colorMult = (dist < 1 ? std::sinf(1.5 * dist + PI / 2):1);
|
||||||
|
float colorMult2 = (dist2 < 1 ? std::sinf(1.5 * dist2 + PI / 2) : 1);
|
||||||
|
float colorMult3 = (dist3 < 1 ? std::sinf(1.5 * dist3 + PI / 2) : 1);
|
||||||
|
triViewed.col[0] = Pixel(std::min(255, (int)(triViewed.col[0].r * colorMult)), std::min(255, (int)(triViewed.col[0].g * colorMult)), std::min(255, (int)(triViewed.col[0].b * colorMult)));
|
||||||
|
triViewed.col[1] = Pixel(std::min(255, (int)(triViewed.col[1].r * colorMult2)), std::min(255, (int)(triViewed.col[1].g * colorMult2)), std::min(255, (int)(triViewed.col[1].b * colorMult2)));
|
||||||
|
triViewed.col[2] = Pixel(std::min(255, (int)(triViewed.col[2].r * colorMult3)), std::min(255, (int)(triViewed.col[2].g * colorMult3)), std::min(255, (int)(triViewed.col[2].b * colorMult3)));
|
||||||
|
}
|
||||||
//triViewed.col = triTransformed.col;
|
//triViewed.col = triTransformed.col;
|
||||||
|
|
||||||
int nClippedTriangles = 0;
|
int nClippedTriangles = 0;
|
||||||
@ -509,7 +537,9 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
triProjected.p[0] = Matrix_MultiplyVector(matProj, clipped[n].p[0]);
|
triProjected.p[0] = Matrix_MultiplyVector(matProj, clipped[n].p[0]);
|
||||||
triProjected.p[1] = Matrix_MultiplyVector(matProj, clipped[n].p[1]);
|
triProjected.p[1] = Matrix_MultiplyVector(matProj, clipped[n].p[1]);
|
||||||
triProjected.p[2] = Matrix_MultiplyVector(matProj, clipped[n].p[2]);
|
triProjected.p[2] = Matrix_MultiplyVector(matProj, clipped[n].p[2]);
|
||||||
triProjected.col = clipped[n].col;
|
triProjected.col[0] = clipped[n].col[0];
|
||||||
|
triProjected.col[1] = clipped[n].col[1];
|
||||||
|
triProjected.col[2] = clipped[n].col[2];
|
||||||
triProjected.uv[0] = clipped[n].uv[0];
|
triProjected.uv[0] = clipped[n].uv[0];
|
||||||
triProjected.uv[1] = clipped[n].uv[1];
|
triProjected.uv[1] = clipped[n].uv[1];
|
||||||
triProjected.uv[2] = clipped[n].uv[2];
|
triProjected.uv[2] = clipped[n].uv[2];
|
||||||
@ -642,7 +672,7 @@ void FaceBall::RenderWorld() {
|
|||||||
{t.uv[0].u,t.uv[0].v},
|
{t.uv[0].u,t.uv[0].v},
|
||||||
{t.uv[1].u,t.uv[1].v},
|
{t.uv[1].u,t.uv[1].v},
|
||||||
{t.uv[2].u,t.uv[2].v},
|
{t.uv[2].u,t.uv[2].v},
|
||||||
}, { t.uv[0].w,t.uv[1].w,t.uv[2].w }, { t.p[0].z,t.p[1].z,t.p[2].z }, { t.col,t.col,t.col });
|
}, { t.uv[0].w,t.uv[1].w,t.uv[2].w }, { t.p[0].z,t.p[1].z,t.p[2].z }, { t.col[0],t.col[1],t.col[2]});
|
||||||
/*SetDecalMode(DecalMode::WIREFRAME);
|
/*SetDecalMode(DecalMode::WIREFRAME);
|
||||||
DrawPolygonDecal(nullptr,{
|
DrawPolygonDecal(nullptr,{
|
||||||
{t.p[0].x, t.p[0].y},
|
{t.p[0].x, t.p[0].y},
|
||||||
|
@ -57,7 +57,7 @@ struct Triangle
|
|||||||
{
|
{
|
||||||
vec3d p[3];
|
vec3d p[3];
|
||||||
vec2d uv[3];
|
vec2d uv[3];
|
||||||
Pixel col;
|
Pixel col[3];
|
||||||
Decal* tex;
|
Decal* tex;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ private:
|
|||||||
Parse(t2, v2, uv2);
|
Parse(t2, v2, uv2);
|
||||||
Parse(t3, v3, uv3);
|
Parse(t3, v3, uv3);
|
||||||
tris.push_back({ verts[v1 - 1],verts[v2 - 1],verts[v3 - 1],
|
tris.push_back({ verts[v1 - 1],verts[v2 - 1],verts[v3 - 1],
|
||||||
uvs[uv1 - 1],uvs[uv2 - 1],uvs[uv3 - 1],WHITE });
|
uvs[uv1 - 1],uvs[uv2 - 1],uvs[uv3 - 1],{WHITE,WHITE,WHITE} });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user