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")
|
||||
continue;
|
||||
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::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()) {
|
||||
daeTArray<double> value = daeSafeCast<domTranslate>(element)->getValue();
|
||||
transform = transform *
|
||||
|
|
|
@ -250,7 +250,6 @@ void VPLShaderManager::setVPL(const VPL &vpl) {
|
|||
m_shadowProgram->unbind();
|
||||
} else {
|
||||
/* Old-fashioned: render 6 times, once for each cube map face */
|
||||
|
||||
m_altShadowProgram->bind();
|
||||
for (int i=0; i<6; ++i) {
|
||||
switch (i) {
|
||||
|
|
|
@ -408,7 +408,7 @@ void Scene::sampleEmission(EmissionRecord &eRec, Point2 &sample1, Point2 &sample
|
|||
luminaire->sampleEmission(eRec, sample1, sample2);
|
||||
eRec.pdfArea *= lumPdf;
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,13 +47,13 @@ size_t generateVPLs(const Scene *scene, size_t offset, size_t count, int maxDept
|
|||
weight = eRec.P / eRec.pdfArea;
|
||||
VPL lumVPL(ELuminaireVPL, weight);
|
||||
lumVPL.its.p = eRec.sRec.p;
|
||||
lumVPL.its.shFrame = eRec.luminaire->getType() == Luminaire::EDeltaPosition
|
||||
? stdFrame : Frame(eRec.sRec.n);
|
||||
lumVPL.its.shFrame = (eRec.luminaire->getType() & Luminaire::EOnSurface)
|
||||
? Frame(eRec.sRec.n) : stdFrame;
|
||||
lumVPL.luminaire = eRec.luminaire;
|
||||
vpls.push_back(lumVPL);
|
||||
|
||||
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;
|
||||
ray = Ray(eRec.sRec.p, eRec.d);
|
||||
|
||||
|
|
Loading…
Reference in New Issue