Tachyon (current)  Current Main Branch
Macros | Functions | Variables
triangle.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "tachyon.h"
#include "vector.h"
#include "macros.h"
#include "intersect.h"
#include "util.h"
#include "triangle.h"

Go to the source code of this file.

Macros

#define TACHYON_INTERNAL   1
 
#define TRIANGLE_PRIVATE
 
#define CROSS(dest, v1, v2)
 
#define DOT(v1, v2)   (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)
 
#define SUB(dest, v1, v2)
 

Functions

object * newtri (void *tex, vector v0, vector v1, vector v2)
 
object * newstri (void *tex, vector v0, vector v1, vector v2, vector n0, vector n1, vector n2)
 
void stri_normal_fixup (object *otri, int mode)
 
object * newvcstri (void *voidtex, vector v0, vector v1, vector v2, vector n0, vector n1, vector n2, color c0, color c1, color c2)
 
void vcstri_normal_fixup (object *otri, int mode)
 
static int tri_bbox (void *obj, vector *min, vector *max)
 
static void tri_intersect (const tri *trn, ray *ry)
 
static void tri_normal (const tri *trn, const vector *hit, const ray *incident, vector *N)
 
static void stri_normal (const stri *trn, const vector *hit, const ray *incident, vector *N)
 
color vcstri_color (const vector *hit, const texture *tx, const ray *incident)
 
static void stri_normal_reverse (const stri *trn, const vector *hit, const ray *incident, vector *N)
 
static void stri_normal_guess (const stri *trn, const vector *hit, const ray *incident, vector *N)
 

Variables

static object_methods tri_methods
 
static object_methods stri_methods
 
static object_methods stri_methods_reverse
 
static object_methods stri_methods_guess
 

Macro Definition Documentation

◆ CROSS

#define CROSS (   dest,
  v1,
  v2 
)
Value:
dest.x=v1.y*v2.z-v1.z*v2.y; \
dest.y=v1.z*v2.x-v1.x*v2.z; \
dest.z=v1.x*v2.y-v1.y*v2.x;

Definition at line 206 of file triangle.c.

Referenced by stri_normal(), stri_normal_guess(), stri_normal_reverse(), tri_intersect(), tri_normal(), and vcstri_color().

◆ DOT

#define DOT (   v1,
  v2 
)    (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)

◆ SUB

#define SUB (   dest,
  v1,
  v2 
)
Value:
dest.x=v1.x-v2.x; \
dest.y=v1.y-v2.y; \
dest.z=v1.z-v2.z;

Definition at line 213 of file triangle.c.

Referenced by tri_intersect().

◆ TACHYON_INTERNAL

#define TACHYON_INTERNAL   1

Definition at line 16 of file triangle.c.

◆ TRIANGLE_PRIVATE

#define TRIANGLE_PRIVATE

Definition at line 23 of file triangle.c.

Function Documentation

◆ newstri()

object* newstri ( void *  tex,
vector  v0,
vector  v1,
vector  v2,
vector  n0,
vector  n1,
vector  n2 
)

Definition at line 84 of file triangle.c.

References stri_methods, VLength(), and VSub().

Referenced by rt_stri(), and rt_stri3fv().

◆ newtri()

object* newtri ( void *  tex,
vector  v0,
vector  v1,
vector  v2 
)

Definition at line 54 of file triangle.c.

References tri_methods, VLength(), and VSub().

Referenced by rt_tri(), and rt_tri3fv().

◆ newvcstri()

object* newvcstri ( void *  voidtex,
vector  v0,
vector  v1,
vector  v2,
vector  n0,
vector  n1,
vector  n2,
color  c0,
color  c1,
color  c2 
)

Definition at line 141 of file triangle.c.

References stri_methods, vcstri_color(), VLength(), and VSub().

Referenced by rt_tristripscnv3fv(), rt_vcstri(), and rt_vcstri3fv().

◆ stri_normal()

static void stri_normal ( const stri *  trn,
const vector *  hit,
const ray *  incident,
vector *  N 
)
static

Definition at line 321 of file triangle.c.

References CROSS, DOT, SQRT, VDot(), and VSUB.

◆ stri_normal_fixup()

void stri_normal_fixup ( object *  otri,
int  mode 
)

Definition at line 118 of file triangle.c.

References stri_methods, stri_methods_guess, and stri_methods_reverse.

Referenced by rt_stri(), and rt_stri3fv().

◆ stri_normal_guess()

static void stri_normal_guess ( const stri *  trn,
const vector *  hit,
const ray *  incident,
vector *  N 
)
static

Definition at line 428 of file triangle.c.

References CROSS, DOT, SQRT, VDot(), and VSUB.

◆ stri_normal_reverse()

static void stri_normal_reverse ( const stri *  trn,
const vector *  hit,
const ray *  incident,
vector *  N 
)
static

Definition at line 388 of file triangle.c.

References CROSS, DOT, SQRT, VDot(), and VSUB.

◆ tri_bbox()

static int tri_bbox ( void *  obj,
vector *  min,
vector *  max 
)
static

Definition at line 218 of file triangle.c.

References MYMAX, MYMIN, and VAdd().

◆ tri_intersect()

static void tri_intersect ( const tri *  trn,
ray *  ry 
)
static

Definition at line 236 of file triangle.c.

References CROSS, DOT, and SUB.

◆ tri_normal()

static void tri_normal ( const tri *  trn,
const vector *  hit,
const ray *  incident,
vector *  N 
)
static

Definition at line 302 of file triangle.c.

References CROSS, SQRT, and VDot().

◆ vcstri_color()

color vcstri_color ( const vector *  hit,
const texture *  tx,
const ray *  incident 
)

Definition at line 360 of file triangle.c.

References CROSS, DOT, and VSUB.

Referenced by newvcstri().

◆ vcstri_normal_fixup()

void vcstri_normal_fixup ( object *  otri,
int  mode 
)

Definition at line 183 of file triangle.c.

References stri_methods, stri_methods_guess, and stri_methods_reverse.

Referenced by rt_tristripscnv3fv(), rt_vcstri(), and rt_vcstri3fv().

Variable Documentation

◆ stri_methods

object_methods stri_methods
static
Initial value:
= {
(void (*)(const void *, void *))(tri_intersect),
(void (*)(const void *, const void *, const void *, void *))(stri_normal),
free
}
static void stri_normal(const stri *trn, const vector *hit, const ray *incident, vector *N)
Definition: triangle.c:321
static void tri_intersect(const tri *trn, ray *ry)
Definition: triangle.c:236
static int tri_bbox(void *obj, vector *min, vector *max)
Definition: triangle.c:218

Definition at line 33 of file triangle.c.

Referenced by newstri(), newvcstri(), stri_normal_fixup(), and vcstri_normal_fixup().

◆ stri_methods_guess

object_methods stri_methods_guess
static
Initial value:
= {
(void (*)(const void *, void *))(tri_intersect),
(void (*)(const void *, const void *, const void *, void *))(stri_normal_guess),
free
}
static void stri_normal_guess(const stri *trn, const vector *hit, const ray *incident, vector *N)
Definition: triangle.c:428
static void tri_intersect(const tri *trn, ray *ry)
Definition: triangle.c:236
static int tri_bbox(void *obj, vector *min, vector *max)
Definition: triangle.c:218

Definition at line 47 of file triangle.c.

Referenced by stri_normal_fixup(), and vcstri_normal_fixup().

◆ stri_methods_reverse

object_methods stri_methods_reverse
static
Initial value:
= {
(void (*)(const void *, void *))(tri_intersect),
(void (*)(const void *, const void *, const void *, void *))(stri_normal_reverse),
free
}
static void stri_normal_reverse(const stri *trn, const vector *hit, const ray *incident, vector *N)
Definition: triangle.c:388
static void tri_intersect(const tri *trn, ray *ry)
Definition: triangle.c:236
static int tri_bbox(void *obj, vector *min, vector *max)
Definition: triangle.c:218

Definition at line 40 of file triangle.c.

Referenced by stri_normal_fixup(), and vcstri_normal_fixup().

◆ tri_methods

object_methods tri_methods
static
Initial value:
= {
(void (*)(const void *, void *))(tri_intersect),
(void (*)(const void *, const void *, const void *, void *))(tri_normal),
free
}
static void tri_normal(const tri *trn, const vector *hit, const ray *incident, vector *N)
Definition: triangle.c:302
static void tri_intersect(const tri *trn, ray *ry)
Definition: triangle.c:236
static int tri_bbox(void *obj, vector *min, vector *max)
Definition: triangle.c:218

Definition at line 26 of file triangle.c.

Referenced by newtri().