Fix bug #6 and some initialization related errors

metadata
Wenzel Jakob 2010-09-14 02:31:28 +02:00
parent 74f6e540e2
commit 773c9a8643
4 changed files with 14 additions and 7 deletions

View File

@ -968,8 +968,16 @@ void loadNode(GeometryConverter *cvt, Transform transform, std::ostream &os,
if (element->hasAttribute("sid") && element->getAttribute("sid") == "post-rotationY") if (element->hasAttribute("sid") && element->getAttribute("sid") == "post-rotationY")
continue; continue;
daeTArray<double> value = daeSafeCast<domRotate>(element)->getValue(); daeTArray<double> value = daeSafeCast<domRotate>(element)->getValue();
Vector axis((Float) value.get(0), (Float) value.get(1), (Float) value.get(2));
Float angle = (Float) value.get(3);
if (angle != 0) {
if (axis.isZero()) {
SLog(EWarn, "Encountered a rotation around a zero vector -- ignoring!");
} else {
transform = transform * transform = transform *
Transform::rotate(Vector((Float) value.get(0), (Float) value.get(1), (Float) value.get(2)), (Float) value.get(3)); Transform::rotate(axis, (Float) value.get(3));
}
}
} else if (element->typeID() == domTranslate::ID()) { } else if (element->typeID() == domTranslate::ID()) {
daeTArray<double> value = daeSafeCast<domTranslate>(element)->getValue(); daeTArray<double> value = daeSafeCast<domTranslate>(element)->getValue();
transform = transform * transform = transform *

View File

@ -250,7 +250,6 @@ void VPLShaderManager::setVPL(const VPL &vpl) {
m_shadowProgram->unbind(); m_shadowProgram->unbind();
} else { } else {
/* Old-fashioned: render 6 times, once for each cube map face */ /* Old-fashioned: render 6 times, once for each cube map face */
m_altShadowProgram->bind(); m_altShadowProgram->bind();
for (int i=0; i<6; ++i) { for (int i=0; i<6; ++i) {
switch (i) { switch (i) {

View File

@ -408,7 +408,7 @@ void Scene::sampleEmission(EmissionRecord &eRec, Point2 &sample1, Point2 &sample
luminaire->sampleEmission(eRec, sample1, sample2); luminaire->sampleEmission(eRec, sample1, sample2);
eRec.pdfArea *= lumPdf; eRec.pdfArea *= lumPdf;
eRec.luminaire = luminaire; eRec.luminaire = luminaire;
Float cosTheta = eRec.sRec.n.isZero() ? (Float) 1 : absDot(eRec.sRec.n, eRec.d); Float cosTheta = (eRec.luminaire->getType() & Luminaire::EOnSurface) ? absDot(eRec.sRec.n, eRec.d) : 1;
eRec.P *= cosTheta / (eRec.pdfArea * eRec.pdfDir); eRec.P *= cosTheta / (eRec.pdfArea * eRec.pdfDir);
} }

View File

@ -47,13 +47,13 @@ size_t generateVPLs(const Scene *scene, size_t offset, size_t count, int maxDept
weight = eRec.P / eRec.pdfArea; weight = eRec.P / eRec.pdfArea;
VPL lumVPL(ELuminaireVPL, weight); VPL lumVPL(ELuminaireVPL, weight);
lumVPL.its.p = eRec.sRec.p; lumVPL.its.p = eRec.sRec.p;
lumVPL.its.shFrame = eRec.luminaire->getType() == Luminaire::EDeltaPosition lumVPL.its.shFrame = (eRec.luminaire->getType() & Luminaire::EOnSurface)
? stdFrame : Frame(eRec.sRec.n); ? Frame(eRec.sRec.n) : stdFrame;
lumVPL.luminaire = eRec.luminaire; lumVPL.luminaire = eRec.luminaire;
vpls.push_back(lumVPL); vpls.push_back(lumVPL);
weight *= scene->sampleEmissionDirection(eRec, dirSample); weight *= scene->sampleEmissionDirection(eRec, dirSample);
Float cosTheta = eRec.sRec.n.isZero() ? (Float) 1 : absDot(eRec.sRec.n, eRec.d); Float cosTheta = (eRec.luminaire->getType() & Luminaire::EOnSurface) ? absDot(eRec.sRec.n, eRec.d) : 1;
weight *= cosTheta / eRec.pdfDir; weight *= cosTheta / eRec.pdfDir;
ray = Ray(eRec.sRec.p, eRec.d); ray = Ray(eRec.sRec.p, eRec.d);