コード例 #1
0
ファイル: vxgeometry.cpp プロジェクト: barbeque/voxelhose
void rayCubeCollisionTests() {
	// hit a cube
	vxVector cubeA(0, 0, 0);
	vxVector cubeB(64, 64, 64);
	vxRay testRay(vxVector(-64, -64, -64), vxVector(1, 1, 1));
	assert(testRay.intersect(cubeA, cubeB).hit);

	// miss a cube
	vxRay antiTestRay(vxVector(70, 70, 70), vxVector(-1, -1, 0));
	assert(!antiTestRay.intersect(cubeA, cubeB).hit);
}
コード例 #2
0
ファイル: vxgeometry.cpp プロジェクト: barbeque/voxelhose
void rayPlaneCollisionTests() {
	vxVector planeA(-5, 0, 0);
	vxVector planeB(5, 0, 0);
	vxVector planeC(5, 5, 0);

	// hit going forward
	vxRay testRay(vxVector(0, 2.5, -5), vxVector(0, 0, 1));
	assert(testRay.intersect(planeA, planeB, planeC).hit);

	// see if it hits even if the direction is backward
	vxRay infiniteHitRay(vxVector(0, 2.5, -5), vxVector(0, 0, -1));
	assert(infiniteHitRay.intersect(planeA, planeB, planeC).hit);
}
コード例 #3
0
ファイル: realistic.cpp プロジェクト: tdapper/pbrt-v3
void RealisticCamera::TestExitPupilBounds() const {
    Float filmDiagonal = film->diagonal;

    static RNG rng;

    Float u = rng.UniformFloat();
    Point3f pFilm(u * filmDiagonal / 2, 0, 0);

    Float r = pFilm.x / (filmDiagonal / 2);
    int pupilIndex =
        std::min((int)exitPupilBounds.size() - 1,
                 (int)std::floor(r * (exitPupilBounds.size() - 1)));
    Bounds2f pupilBounds = exitPupilBounds[pupilIndex];
    if (pupilIndex + 1 < (int)exitPupilBounds.size())
        pupilBounds = Union(pupilBounds, exitPupilBounds[pupilIndex + 1]);

    // Now, randomly pick points on the aperture and see if any are outside
    // of pupil bounds...
    for (int i = 0; i < 1000; ++i) {
        Point2f pd = ConcentricSampleDisk(
                         Point2f(rng.UniformFloat(), rng.UniformFloat()));
        pd *= RearElementRadius();

        Ray testRay(pFilm, Point3f(pd.x, pd.y, 0.f) - pFilm);
        Ray testOut;
        if (!TraceLensesFromFilm(testRay, &testOut)) continue;

        if (!Inside(pd, pupilBounds)) {
            fprintf(stderr,
                    "Aha! (%f,%f) went through, but outside bounds (%f,%f) - "
                    "(%f,%f)\n",
                    pd.x, pd.y, pupilBounds.pMin[0], pupilBounds.pMin[1],
                    pupilBounds.pMax[0], pupilBounds.pMax[1]);
            RenderExitPupil(
                (Float)pupilIndex / exitPupilBounds.size() * filmDiagonal / 2.f,
                0.f, "low.exr");
            RenderExitPupil((Float)(pupilIndex + 1) / exitPupilBounds.size() *
                            filmDiagonal / 2.f,
                            0.f, "high.exr");
            RenderExitPupil(pFilm.x, 0.f, "mid.exr");
            exit(0);
        }
    }
    fprintf(stderr, ".");
}