Decompile 11 functions in Source/Contents/Models/ModelLighting.cpp, Source/Contents/Models/ModelNode.cpp, ...
Batch #1082 by ragnarok-clanker: 0 byte-identical, 11 confirmed by peer review. - fn_02007 ModelMesh::ModelMesh: logic confirmed by peer review - fn_02009 ModelMesh::~ModelMesh: logic confirmed by peer review - fn_02011 ModelMesh::CalculateNormals: logic confirmed by peer review - fn_07958 C3dAnimModelRes::Load: logic confirmed by peer review - fn_07997 AnimatedModelRecord::~AnimatedModelRecord: logic confirmed by peer review - fn_08023 C3dAnimModelRes::Unload: logic confirmed by peer review - fn_17482 C3dNodeV1::Initialize: logic confirmed by peer review - fn_17484 C3dNodeV2::Initialize: logic confirmed by peer review - fn_17514 C3dNode::AccumulateBounds: logic confirmed by peer review - fn_17515 C3dNode::SampleGroundColors: logic confirmed by peer review - fn_17521 C3dNode::Prepare: logic confirmed by peer review Reviewed-by: ragnarok-clanker
This commit is contained in:
parent
994a1ed2cd
commit
eb3e3b8b08
11 changed files with 249 additions and 132 deletions
|
|
@ -20,14 +20,39 @@ namespace {
|
|||
// FUNCTION: fn_07988
|
||||
ModelFace::ModelFace() = default;
|
||||
|
||||
// OFFSET: 0x00551BA0
|
||||
// FUNCTION: fn_02007
|
||||
ModelMesh::ModelMesh()
|
||||
: vertexCount(0), vertices(nullptr), faceCount(0), faces(nullptr), textureVertexCount(0), textureVertices(nullptr), faceNormals(nullptr),
|
||||
vertexNormals(nullptr) {
|
||||
}
|
||||
|
||||
// OFFSET: 0x00551E80
|
||||
// FUNCTION: fn_02009
|
||||
ModelMesh::~ModelMesh() {
|
||||
delete[] this->vertices;
|
||||
this->vertices = nullptr;
|
||||
this->vertexCount = 0;
|
||||
delete[] this->faces;
|
||||
this->faces = nullptr;
|
||||
this->faceCount = 0;
|
||||
delete[] this->textureVertices;
|
||||
this->textureVertices = nullptr;
|
||||
this->textureVertexCount = 0;
|
||||
delete[] this->faceNormals;
|
||||
this->faceNormals = nullptr;
|
||||
delete[] this->vertexNormals;
|
||||
this->vertexNormals = nullptr;
|
||||
}
|
||||
|
||||
// OFFSET: 0x00551FD0
|
||||
// FUNCTION: fn_02011
|
||||
void ModelMesh::CalculateNormals() {
|
||||
if (this->faceNormals.empty()) {
|
||||
this->faceNormals.resize(this->faces.size());
|
||||
if (!this->faceNormals) {
|
||||
this->faceNormals = new std::array<float, 3>[this->faceCount]{};
|
||||
}
|
||||
|
||||
for (unsigned index = 0; index < this->faces.size(); ++index) {
|
||||
for (int index = 0; index < this->faceCount; ++index) {
|
||||
const ModelFace& face = this->faces[index];
|
||||
const auto& first = this->vertices[face.vertices[0]];
|
||||
const auto& second = this->vertices[face.vertices[1]];
|
||||
|
|
@ -46,25 +71,25 @@ void ModelMesh::CalculateNormals() {
|
|||
Normalize(normal.data());
|
||||
}
|
||||
|
||||
std::map<unsigned, std::vector<unsigned>> adjacent;
|
||||
std::map<int, std::vector<int>> adjacent;
|
||||
|
||||
for (unsigned face = 0; face < this->faces.size(); ++face) {
|
||||
for (unsigned corner = 0; corner < 3; ++corner) {
|
||||
for (int face = 0; face < this->faceCount; ++face) {
|
||||
for (int corner = 0; corner < 3; ++corner) {
|
||||
adjacent[this->faces[face].vertices[corner]].push_back(face);
|
||||
}
|
||||
}
|
||||
|
||||
if (this->vertexNormals.empty()) {
|
||||
this->vertexNormals.resize(this->faces.size() * 3);
|
||||
if (!this->vertexNormals) {
|
||||
this->vertexNormals = new std::array<float, 3>[this->faceCount * 3]{};
|
||||
}
|
||||
|
||||
for (unsigned index = 0; index < this->faces.size(); ++index) {
|
||||
for (int index = 0; index < this->faceCount; ++index) {
|
||||
const ModelFace& face = this->faces[index];
|
||||
|
||||
for (unsigned corner = 0; corner < 3; ++corner) {
|
||||
for (int corner = 0; corner < 3; ++corner) {
|
||||
auto& normal = this->vertexNormals[index * 3 + corner];
|
||||
|
||||
for (unsigned neighbor : adjacent[face.vertices[corner]]) {
|
||||
for (int neighbor : adjacent[face.vertices[corner]]) {
|
||||
const ModelFace& other = this->faces[neighbor];
|
||||
|
||||
for (std::uint32_t group : face.smoothing) {
|
||||
|
|
@ -87,7 +112,7 @@ void ModelMesh::CalculateNormals() {
|
|||
}
|
||||
}
|
||||
|
||||
for (unsigned index = 0; index < this->faces.size() * 3; ++index) {
|
||||
for (int index = 0; index < this->faceCount * 3; ++index) {
|
||||
Normalize(this->vertexNormals[index].data());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue