WMO/Rendering: Difference between revisions
Jump to navigation
Jump to search
m (→C3Vector) |
|||
Line 12: | Line 12: | ||
CMapObjGroup group = this->groupList[groupIndex]; | CMapObjGroup group = this->groupList[groupIndex]; | ||
if (!this->unk6[16] || group->unk14 & 1 || group->flags & (SMOGroup::EXTERIOR | SMOGroup::EXTERIOR_LIT)) { | if (!this->unk6[16] || !(group->unk14 & 1) || group->flags & (SMOGroup::EXTERIOR | SMOGroup::EXTERIOR_LIT)) { | ||
return 0; | return 0; | ||
Line 29: | Line 29: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
bool CMapObj::QueryLighting(CMapObj *this, uint32_t groupIndex, const C3Segment *seg, CImVector *color, bool *a5) { | bool CMapObj::QueryLighting(CMapObj *this, uint32_t groupIndex, const C3Segment *seg, CImVector *color, bool *a5) { | ||
CMapObjGroup group = this->groupList[groupIndex]; | CMapObjGroup group = this->groupList[groupIndex]; | ||
if ( | if (!this->unk6[16] || !(group->unk14 & 1) || group->flags & (SMOGroup::EXTERIOR | SMOGroup::EXTERIOR_LIT)) { | ||
return 0; | return 0; |
Revision as of 08:11, 4 October 2017
Lighting
CMapObj::QueryLighting
C3Vector
This function is used to query lighting when the relevant poly is already known.
bool CMapObj::QueryLighting(CMapObj *this, uint32_t groupIndex, const C3Vector *point, uint16_t polyIdx, CImVector *color, bool *a5) {
CMapObjGroup group = this->groupList[groupIndex];
if (!this->unk6[16] || !(group->unk14 & 1) || group->flags & (SMOGroup::EXTERIOR | SMOGroup::EXTERIOR_LIT)) {
return 0;
}
bool lightRes = CMapObjGroup::QueryLighting(group, point, polyIdx, color, a5);
return lightRes;
}
C3Segment
bool CMapObj::QueryLighting(CMapObj *this, uint32_t groupIndex, const C3Segment *seg, CImVector *color, bool *a5) {
CMapObjGroup group = this->groupList[groupIndex];
if (!this->unk6[16] || !(group->unk14 & 1) || group->flags & (SMOGroup::EXTERIOR | SMOGroup::EXTERIOR_LIT)) {
return 0;
}
World::TriData::resultFlags = 0;
World::TriData::nBatches = 0;
World::TriData::nTriIndices = 0;
World::TriData::nVertexIndices = 0;
World::TriData::nMatrices = 0;
float hitT = 1.0;
bool triRes = CMapObjGroup::GetTris(group, seg, &hitT, 0, 8, (int)&a2 + 3, 0);
if (!triRes) {
return 0;
}
// Obtain point matching intersection between segment and tri
C3Vector point;
point.x = seg->start.x + hitT * (seg->end.x - seg->start.x);
point.y = seg->start.y + hitT * (seg->end.y - seg->start.y);
point.z = seg->start.z + hitT * (seg->end.z - seg->start.z);
unsigned __int16 hitPoly = word_CD8094;
bool lightRes = CMapObjGroup::QueryLighting(group, &point, hitPoly, color, a5);
return lightRes;
}