62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
|
#ifndef STONE_H
|
||
|
#define STONE_H
|
||
|
|
||
|
#include "Color.h"
|
||
|
#include "Point.h"
|
||
|
|
||
|
class Stone {
|
||
|
public:
|
||
|
Stone();
|
||
|
~Stone();
|
||
|
Stone operator=(Stone a);
|
||
|
|
||
|
void set_dimensions(GLfloat x, GLfloat y, GLfloat z);
|
||
|
void set_dimensions(Point p);
|
||
|
Point get_dimensions() {return dimensions;};
|
||
|
|
||
|
/* p = 0 --> sharp corners, p == 1 --> completely rounded corners */
|
||
|
void erode(float p);
|
||
|
float get_erosion() {return erosion;};
|
||
|
|
||
|
void translate(GLfloat x, GLfloat y, GLfloat z);
|
||
|
void translate(Point p);
|
||
|
|
||
|
/* Angle in degrees */
|
||
|
void rotate_self_aboutz(GLfloat angle);
|
||
|
|
||
|
void draw();
|
||
|
|
||
|
void draw_shadow(Point dlight);
|
||
|
void draw_shadow(Point dlight, GLfloat blur, Color color, Color diffuse);
|
||
|
|
||
|
private:
|
||
|
Point translation;
|
||
|
GLfloat rotation;
|
||
|
/* dimensions contains the length, width, and height of the stone */
|
||
|
Point dimensions;
|
||
|
|
||
|
GLfloat erosion;
|
||
|
|
||
|
Point points[24];
|
||
|
int points_valid;
|
||
|
void compute_points();
|
||
|
|
||
|
int transforms_valid;
|
||
|
inline Point trans_rot_point(Point p, float c, float s);
|
||
|
inline Point transform_point(Point p, float c, float s);
|
||
|
void transform_points();
|
||
|
|
||
|
void draw_faces(int flat = 0);
|
||
|
void draw_faces(Point *p, int flat = 0);
|
||
|
|
||
|
void draw_edges(int flat = 0);
|
||
|
void draw_edges(Point *p, int flat = 0);
|
||
|
void draw_edge(Point n1, Point n2, Point *p, int a, int b, int c, int d,
|
||
|
int flat = 0);
|
||
|
|
||
|
void draw_corners(int flat = 0) {draw_corners(points, flat);};
|
||
|
void draw_corners(Point *p, int flat = 0);
|
||
|
};
|
||
|
|
||
|
#endif
|