#pragma once
struct vec3 {
    double x, y, z;
};
typedef struct vec3 vec3;

struct triangle {
    vec3 a, b, c;
    vec3 normal;
}; typedef struct triangle triangle;

struct ray {
    vec3 origin;
    vec3 direction;
}; typedef struct ray ray;

struct camera {
    vec3 origin;
    vec3 direction;
    double height;
    double width;
    double resolutionX;
    double resolutionY;
    double screenDistance;
}; typedef struct camera camera;

struct rgba {
    double r, g, b, a;
}; typedef struct rgba RGBA;

struct sphere {
    vec3 origin;
    double radius;
    RGBA color;
}; typedef struct sphere sphere;

struct plane {
    vec3 origin;
    vec3 normal;
}; typedef struct plane plane;

struct quad {
    vec3 origin;
    vec3 v1;
    vec3 v2;
    vec3 normal;
    RGBA color;
}; typedef struct quad quad;

struct object {
    int objectType; // 0 = sphere, 1 = Quad
    void *objectPointer;
    bool isLight;
}; typedef struct object object;

struct cube {
    quad quad1,quad2,quad3,quad4,quad5,quad6;
}; typedef struct cube cube;