more work on lightmaps

This commit is contained in:
Safariminer 2025-08-05 02:28:28 -04:00
parent 6b39e39fe1
commit f35ff8ae46
2 changed files with 38 additions and 15 deletions

View File

@ -490,16 +490,18 @@ void MPFW::Quake::Maps::MapFile::LoadBSPMap(std::string path)
throw;
}
Image lightmap = GenImageColor(lmw, lmh, WHITE);
Image lightmap = GenImageColor(lmw, lmh, BLANK);
cface.hasLightMap = true;
for (int y = 0; y < lmh; y++) {
for (int x = 0; x < lmw; x++) {
unsigned char lightValue = data.lightmap[y*lmw+x + lmbase];
unsigned char invertedLightValue = 255 - lightValue;
// std::cout << "light value : " << (int)invertedLightValue << "\n";
ImageDrawPixel(&lightmap, x, y, {
lightValue,
lightValue,
lightValue,
255
0,
0,
0,
invertedLightValue
});
}
}
@ -514,7 +516,7 @@ void MPFW::Quake::Maps::MapFile::LoadBSPMap(std::string path)
data.lightMaps.push_back(lightmapRLMipTex);
cface.glLightmapTextureId = lightmapTexture.id;
SetTextureFilter(lightmapTexture, TEXTURE_FILTER_BILINEAR);
UnloadImage(lightmap);
}

View File

@ -188,7 +188,7 @@ int main() {
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(1280, 720, TextFormat("mpfw"));
// SetTargetFPS(60);
SetTargetFPS(60);
SetExitKey(0);
DisableCursor();
@ -332,16 +332,9 @@ int main() {
255,// - (unsigned char)map.data.renderFaces[i].baselight,
255);
if (map.data.renderFaces[i].hasLightMap) rlSetTexture(map.data.renderFaces[i].glLightmapTextureId);
else rlSetTexture(map.data.renderFaces[i].glTextureId);
rlSetTexture(map.data.renderFaces[i].glTextureId);
for (int j = 1; j < map.data.renderFaces[i].vertices.size(); j++) {
rlBegin(RL_QUADS); // for texturing reasons because rlgl
Vector3 a = map.data.renderFaces[i].vertices[0],
@ -365,6 +358,34 @@ int main() {
rlEnd();
}
if (map.data.renderFaces[i].hasLightMap) {
rlColor4f(1, 1, 1, 0.5);
rlSetTexture(map.data.renderFaces[i].glLightmapTextureId);
for (int j = 1; j < map.data.renderFaces[i].vertices.size(); j++) {
rlBegin(RL_QUADS); // for texturing reasons because rlgl
Vector3 a = map.data.renderFaces[i].vertices[0],
b = map.data.renderFaces[i].vertices[j],
c = map.data.renderFaces[i].vertices[j - 1];
Vector2 at = map.data.renderFaces[i].texCoords[0],
bt = map.data.renderFaces[i].texCoords[j],
ct = map.data.renderFaces[i].texCoords[j - 1];
rlTexCoord2f(at.x, at.y);
rlVertex3f(a.x, a.y, a.z);
rlTexCoord2f(bt.x, bt.y);
rlVertex3f(b.x, b.y, b.z);
rlTexCoord2f(ct.x, ct.y);
rlVertex3f(c.x, c.y, c.z);
rlVertex3f(c.x, c.y, c.z); // why does RLGL fuck up triangles? is there something i'm missing?
rlEnd();
}
}
}