Fix bug #6 and some initialization related errors
parent
74f6e540e2
commit
773c9a8643
|
@ -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 *
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue