예제 #1
0
    public static float vecLen(Vec3f *ptr)
    {
        var x = ptr->x;
        var y = ptr->y;
        var z = ptr->z;

        return(fsqrt((x * x) + (y * y) + (z * z)));
    }
예제 #2
0
 public static void vecAdd(Vec3f *a, Vec3f *b, Vec3f *ptr)
 {
     vecStore(
         a->x + b->x,
         a->y + b->y,
         a->z + b->z,
         ptr
         );
 }
예제 #3
0
 public static void vecScale(Vec3f *a, float scale, Vec3f *ptr)
 {
     vecStore(
         a->x * scale,
         a->y * scale,
         a->z * scale,
         ptr
         );
 }
예제 #4
0
    public static void vecNormalize(Vec3f *ptr)
    {
        var x = ptr->x;
        var y = ptr->y;
        var z = ptr->z;

        float invLen = 1.0f / fsqrt((x * x) + (y * y) + (z * z));

        vecStore(x * invLen, y * invLen, z * invLen, ptr);
    }
예제 #5
0
    public static void sampleEnv(Vec3f *dir, Vec3f *ptr)
    {
        var y    = dir->y;
        var amt  = y * 0.5f + 0.5f;
        var keep = 1.0f - amt;

        vecStore(
            keep * 0.1f + amt * 0.1f,
            keep * 1.0f + amt * 0.1f,
            keep * 0.1f + amt * 1.0f,
            ptr
            );
    }
예제 #6
0
    public static float vecNLDot(Vec3f *a, Vec3f *b)
    {
        var value = vecDot(a, b);

        if (value < 0)
        {
            return(0);
        }
        else
        {
            return(value);
        }
    }
예제 #7
0
    public static void init(int w, int h, int pFrameBuffer)
    {
        width        = w;
        height       = h;
        frame_buffer = &U8.Base[pFrameBuffer];

        var pScratch = pFrameBuffer + (width * height * BytesPerPixel) + 1024;
        var scratch  = (Vec3f *)&U8.Base[pScratch];

        // FIXME
        pos   = &scratch[0];
        dir   = &scratch[1];
        light = &scratch[2];
        half  = &scratch[3];
        color = &scratch[4];
        intersection_normal = &scratch[5];
    }
예제 #8
0
  public static void init (int w, int h, int pFrameBuffer) {
    width = w;
    height = h;
    frame_buffer = &U8.Base[pFrameBuffer];

    var pScratch = pFrameBuffer + (width * height * BytesPerPixel) + 1024;
    var scratch = (Vec3f*)&U8.Base[pScratch];

    // FIXME
    pos   = &scratch[0];
    dir   = &scratch[1];
    light = &scratch[2];
    half  = &scratch[3];
    color = &scratch[4];
    intersection_normal = &scratch[5];
  }
예제 #9
0
 public static void vecStore(float x, float y, float z, Vec3f *ptr)
 {
     ptr->x = x;
     ptr->y = y;
     ptr->z = z;
 }
예제 #10
0
 public static float vecDot(Vec3f *a, Vec3f *b)
 {
     return((a->x * b->x) + (a->y * b->y) + (a->z * b->z));
 }