Esempio n. 1
0
Cameraf SynthRenderer::randomCamera(const Scene &s)
{
    const float randomLookVariance = 0.2f;
    const float targetBBoxExpansion = 1.5f;

    const OBB3f objectOBB = s.objects[s.mainObjectIndex].worldBBox;
    
    bbox3f targetBBox;
    targetBBox.include(bbox3f(objectOBB));

    const auto r = [&](float a, float b) { return (float)ml::util::randomUniform(a, b); };
    const auto rA = [&]() { return (float)r(0.0f, 1.0f); };
    const auto rB = [&]() { return (float)r(-1.0f, 1.0f); };

    const vec3f lookAt = objectOBB.getCenter() +
                         vec3f(rB(), rB(), rB()) * randomLookVariance;

    vec3f eye;

    eye.x = r(targetBBox.getMin().x - targetBBoxExpansion, targetBBox.getMax().x + targetBBoxExpansion);
    eye.y = r(targetBBox.getMin().y - targetBBoxExpansion, targetBBox.getMax().y + targetBBoxExpansion);
    eye.z = r(0.5f, 2.0f);

    return Cameraf(eye, lookAt - eye, vec3f::eZ, constants::fieldOfView, 1.0f, 0.01f, 100.0f);
}
Esempio n. 2
0
TriMeshf box(const OBBf &obb, const vec4f& color)
{
    TriMeshf result = box(bbox3f(vec3f::origin, vec3f(1.0f, 1.0f, 1.0f)), color);

    result.transform(obb.getOBBToWorld());

    return result;
}
void Synthesizer::updateBaseColumns()
{
    baseColumns.reset(sceneTemplate->geometry.columns);
    for (UINT objectIndex = 1; objectIndex < scene.objects.size(); objectIndex++)
    {
        const ObjectInstance &o = scene.objects[objectIndex];
        const auto &accelerator = assets->loadModel(*graphics, o.object.modelId).getAcceleratorOriginal();

        bool isSupport = database->categories.getCategory(o.categoryName()).isObjectSupport;

        baseColumns.includeObjectRayTracing(accelerator, bbox3f(o.worldBBox), o.modelToWorld, o.modelToWorld.getInverse(), isSupport);
    }
    columnsTemp = baseColumns;
}