chore: initial commit

This commit is contained in:
fallenoak 2023-01-02 13:17:18 -06:00
commit 70b00c5c38
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
965 changed files with 264882 additions and 0 deletions

130
src/model/CM2Lighting.cpp Normal file
View file

@ -0,0 +1,130 @@
#include "model/CM2Lighting.hpp"
#include "model/CM2Light.hpp"
#include "model/CM2Scene.hpp"
#include <cstring>
void CM2Lighting::AddAmbient(const C3Vector& ambColor) {
this->m_sunAmbient = this->m_sunAmbient + ambColor;
}
void CM2Lighting::AddDiffuse(const C3Vector& dirColor, const C3Vector& dir) {
C3Vector viewDir = dir;
if (this->m_scene) {
viewDir = {
this->m_scene->m_view.a0 * dir.x + this->m_scene->m_view.b0 * dir.y + this->m_scene->m_view.c0 * dir.z,
this->m_scene->m_view.a1 * dir.x + this->m_scene->m_view.b1 * dir.y + this->m_scene->m_view.c1 * dir.z,
this->m_scene->m_view.a2 * dir.x + this->m_scene->m_view.b2 * dir.y + this->m_scene->m_view.c2 * dir.z
};
}
this->vector18.x = viewDir.x * dirColor.x + this->vector18.x;
this->vector18.y = viewDir.y * dirColor.x + this->vector18.y;
this->vector18.z = viewDir.z * dirColor.x + this->vector18.z;
this->vector24.x = viewDir.x * dirColor.y + this->vector24.x;
this->vector24.y = viewDir.y * dirColor.y + this->vector24.y;
this->vector24.z = viewDir.z * dirColor.y + this->vector24.z;
this->vector30.x = viewDir.x * dirColor.z + this->vector30.x;
this->vector30.y = viewDir.y * dirColor.z + this->vector30.y;
this->vector30.z = viewDir.z * dirColor.z + this->vector30.z;
float v7 = dirColor.y * 0.71516001f + dirColor.x * 0.212671f + dirColor.z * 0.072168998f;
this->vector3C.x = viewDir.x * v7 + this->vector3C.x;
this->vector3C.y = viewDir.y * v7 + this->vector3C.y;
this->vector3C.z = viewDir.z * v7 + this->vector3C.z;
this->vector48.x = dirColor.x + this->vector48.x;
this->vector48.y = dirColor.y + this->vector48.y;
this->vector48.z = dirColor.z + this->vector48.z;
this->m_sunDir = dir;
this->m_sunDiffuse = dirColor;
}
void CM2Lighting::AddLight(CM2Light* light) {
if (!light->m_visible) {
return;
}
if (light->m_type == 1) {
// TODO
} else {
this->AddAmbient(light->m_ambColor);
this->AddDiffuse(light->m_dirColor, light->m_dir);
this->AddSpecular(light->m_specColor);
}
}
void CM2Lighting::AddSpecular(const C3Vector& specColor) {
this->m_sunSpecular = this->m_sunSpecular + specColor;
}
void CM2Lighting::CameraSpace() {
// TODO
}
void CM2Lighting::Initialize(CM2Scene* scene, const CAaSphere& a3) {
memset(this, 0, sizeof(CM2Lighting));
this->m_scene = scene;
this->m_flags |= 0x20u;
this->sphere4 = a3;
}
void CM2Lighting::SetFog(const C3Vector& fogColor, float fogStart, float fogEnd) {
this->m_fogStart = fogStart;
this->m_fogEnd = fogEnd;
this->m_fogScale = 1.0f / (fogEnd - fogStart);
this->m_fogDensity = 1.0f;
this->m_fogColor = fogColor;
}
void CM2Lighting::SetFog(const C3Vector& fogColor, float fogStart, float fogEnd, float fogDensity) {
this->m_fogStart = fogStart;
this->m_fogEnd = fogEnd;
this->m_fogScale = 1.0f / (fogEnd - fogStart);
this->m_fogDensity = fogDensity;
this->m_fogColor = fogColor;
}
void CM2Lighting::SetupGxLights(const C3Vector* a2) {
// TODO
}
void CM2Lighting::SetupSunlight() {
if (this->m_flags & 0x2) {
return;
}
this->m_sunDir.x = this->vector3C.x;
this->m_sunDir.y = this->vector3C.y;
this->m_sunDir.z = this->vector3C.z;
if (this->m_sunDir.SquaredMag() <= 0.0000099999997) {
this->m_sunDir = { 0.0f, 0.0f, -1.0f };
} else {
this->m_sunDir.Normalize();
}
float v6 = this->m_sunDir.z * this->vector18.z + this->m_sunDir.y * this->vector18.y + this->m_sunDir.x * this->vector18.x;
float v7 = this->m_sunDir.z * this->vector24.z + this->m_sunDir.y * this->vector24.y + this->m_sunDir.x * this->vector24.x;
float v8 = this->m_sunDir.z * this->vector30.z + this->m_sunDir.y * this->vector30.y + this->m_sunDir.x * this->vector30.x;
this->m_sunDiffuse = {
v6 * 1.25f - this->vector48.x * 0.25f,
v7 * 1.25f - this->vector48.y * 0.25f,
v8 * 1.25f - this->vector48.z * 0.25f
};
this->m_sunAmbient = {
(this->vector48.x - v6) * 0.25f + this->m_sunAmbient.x,
(this->vector48.y - v7) * 0.25f + this->m_sunAmbient.y,
(this->vector48.z - v8) * 0.25f + this->m_sunAmbient.z
};
this->m_flags |= 0x2;
}