Coder Social home page Coder Social logo

Comments (2)

gkjohnson avatar gkjohnson commented on June 8, 2024
float max(vec3 v) { return max (max(v.x, v.y), v.z); }

// box.rotation = object-to-world, invRayDir unused if oriented
bool ourIntersectBox(
    Box box, Ray ray, out float distance, out vec3 normal,
    const bool canStartInBox, const in bool oriented, in vec3 _invRayDir
) {

    ray.origin = ray.origin - box.center;
    
    if (oriented) {
        ray.dir *= box.rot;
        ray.origin *= box.rot;
    }
    float winding = canStartInBox && (max(abs(ray.origin) * box.invRadius)< 1.0) ? -1 : 1;
    vec3 sgn = -sign(ray.dir);

    // Distance to plane
    vec3 d = box.radius * winding * sgn - ray.origin;
    if (oriented) {
        d /= ray.dir; else d *= _invRayDir;
    }
    
    # define TEST(U, VW) (d.U >= 0.0) && \
        all(lessThan(abs(ray.origin.VW + ray.dir.VW * d.U), box.radius.VW))
    
        bvec3 test = bvec3(TEST(x, yz), TEST(y, zx), TEST(z, xy));
        sgn = test.x ? vec3(sgn.x,0,0) : (test.y ? vec3(0,sgn.y,0) : vec3(0,0,test.z ? sgn.z:0));

    # undef TEST
    
    distance = (sgn.x != 0) ? d.x : ((sgn.y != 0) ? d.y : d.z);
    
    normal = oriented ? (box.rot * sgn) : sgn;
    
    return (sgn.x != 0) || (sgn.y != 0) || (sgn.z != 0);

}

from three-mesh-bvh.

gkjohnson avatar gkjohnson commented on June 8, 2024

It doesn't seem to beat the function currently being used.

from three-mesh-bvh.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.