faceextents_t: refactor to store world <-> lm matrices rather than tex space <-> lm
This commit is contained in:
parent
1f01b65873
commit
eb2d697cef
|
|
@ -733,12 +733,16 @@ faceextents_t::faceextents_t(const mface_t &face, const mbsp_t &bsp, float light
|
||||||
origin = bounds.mins() + radius;
|
origin = bounds.mins() + radius;
|
||||||
this->radius = qv::length(radius);
|
this->radius = qv::length(radius);
|
||||||
|
|
||||||
LMToTexCoordMatrix = qmat3x3f::row_major({
|
qmat4x4f LMToTexCoordMatrix = qmat4x4f::row_major({
|
||||||
lightmapshift, 0, lm_mins[0] * lightmapshift,
|
lightmapshift, 0 , 0 , lm_mins[0] * lightmapshift,
|
||||||
0 , lightmapshift, lm_mins[1] * lightmapshift,
|
0 , lightmapshift, 0 , lm_mins[1] * lightmapshift,
|
||||||
0 , 0 , 1
|
0 , 0 , 1 , 0,
|
||||||
|
0 , 0 , 0 , 1
|
||||||
});
|
});
|
||||||
TexCoordToLMMatrix = qv::inverse(LMToTexCoordMatrix);
|
qmat4x4f TexCoordToLMMatrix = qv::inverse(LMToTexCoordMatrix);
|
||||||
|
|
||||||
|
lmToWorldMatrix = texCoordToWorldMatrix * LMToTexCoordMatrix;
|
||||||
|
worldToLMMatrix = TexCoordToLMMatrix * worldToTexCoordMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
int faceextents_t::width() const
|
int faceextents_t::width() const
|
||||||
|
|
@ -756,25 +760,11 @@ int faceextents_t::numsamples() const
|
||||||
return width() * height();
|
return width() * height();
|
||||||
}
|
}
|
||||||
|
|
||||||
qvec2i faceextents_t::texsize() const
|
qvec2i faceextents_t::lmsize() const
|
||||||
{
|
{
|
||||||
return {width(), height()};
|
return {width(), height()};
|
||||||
}
|
}
|
||||||
|
|
||||||
qvec2f faceextents_t::lightmapCoordToTexCoord(const qvec2f &LMCoord) const
|
|
||||||
{
|
|
||||||
qvec3f LMCoordPadded = {LMCoord[0], LMCoord[1], 1.0f};
|
|
||||||
qvec2f tex = LMToTexCoordMatrix * LMCoordPadded;
|
|
||||||
return tex;
|
|
||||||
}
|
|
||||||
|
|
||||||
qvec2f faceextents_t::texCoordToLightmapCoord(const qvec2f &tc) const
|
|
||||||
{
|
|
||||||
qvec3f tcPadded = {tc[0], tc[1], 1.0f};
|
|
||||||
qvec2f lm = TexCoordToLMMatrix * tcPadded;
|
|
||||||
return lm;
|
|
||||||
}
|
|
||||||
|
|
||||||
qvec2f faceextents_t::worldToTexCoord(qvec3f world) const
|
qvec2f faceextents_t::worldToTexCoord(qvec3f world) const
|
||||||
{
|
{
|
||||||
const qvec4f worldPadded(world, 1.0f);
|
const qvec4f worldPadded(world, 1.0f);
|
||||||
|
|
@ -797,10 +787,14 @@ qvec3f faceextents_t::texCoordToWorld(qvec2f tc) const
|
||||||
|
|
||||||
qvec2f faceextents_t::worldToLMCoord(qvec3f world) const
|
qvec2f faceextents_t::worldToLMCoord(qvec3f world) const
|
||||||
{
|
{
|
||||||
return texCoordToLightmapCoord(worldToTexCoord(world));
|
const qvec4f worldPadded(world, 1.0f);
|
||||||
|
const qvec4f res = worldToLMMatrix * worldPadded;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
qvec3f faceextents_t::LMCoordToWorld(qvec2f lm) const
|
qvec3f faceextents_t::LMCoordToWorld(qvec2f lm) const
|
||||||
{
|
{
|
||||||
return texCoordToWorld(lightmapCoordToTexCoord(lm));
|
const qvec4f lmPadded(lm[0], lm[1], 0.0f, 1.0f);
|
||||||
|
const qvec4f res = lmToWorldMatrix * lmPadded;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -126,8 +126,8 @@ private:
|
||||||
qvec2i lm_extents;
|
qvec2i lm_extents;
|
||||||
qmat4x4f worldToTexCoordMatrix;
|
qmat4x4f worldToTexCoordMatrix;
|
||||||
qmat4x4f texCoordToWorldMatrix;
|
qmat4x4f texCoordToWorldMatrix;
|
||||||
qmat3x3f LMToTexCoordMatrix;
|
qmat4x4f lmToWorldMatrix;
|
||||||
qmat3x3f TexCoordToLMMatrix;
|
qmat4x4f worldToLMMatrix;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
qvec3d origin;
|
qvec3d origin;
|
||||||
|
|
@ -141,9 +141,7 @@ public:
|
||||||
int width() const;
|
int width() const;
|
||||||
int height() const;
|
int height() const;
|
||||||
int numsamples() const;
|
int numsamples() const;
|
||||||
qvec2i texsize() const;
|
qvec2i lmsize() const;
|
||||||
qvec2f lightmapCoordToTexCoord(const qvec2f &LMCoord) const;
|
|
||||||
qvec2f texCoordToLightmapCoord(const qvec2f &tc) const;
|
|
||||||
qvec2f worldToTexCoord(qvec3f world) const;
|
qvec2f worldToTexCoord(qvec3f world) const;
|
||||||
qvec3f texCoordToWorld(qvec2f tc) const;
|
qvec3f texCoordToWorld(qvec2f tc) const;
|
||||||
qvec2f worldToLMCoord(qvec3f world) const;
|
qvec2f worldToLMCoord(qvec3f world) const;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue