-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobject.h
More file actions
148 lines (124 loc) · 4.26 KB
/
object.h
File metadata and controls
148 lines (124 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/**
* @file object.h Object*: definição e operações com primitivas.
* As primitivas suportadas atualmente são: esferas, triângulos e paralelepípedos.
*
* @author
* - Maira Noronha
* - Thiago Bastos
* - Mauricio Carneiro
*
* @date
* Criado em: 01 de Dezembro de 2002
* Última Modificação: 22 de Janeiro de 2003
*
* @version 2.0
*/
#ifndef _OBJECT_H_
#define _OBJECT_H_
#include "color.h"
#include "algebra.h"
#include "material.h"
/************************************************************************/
/* Tipos Exportados */
/************************************************************************/
typedef struct _Object Object;
typedef struct _Sphere Sphere;
typedef struct _Triangle Triangle;
typedef struct _Box Box;
typedef struct _Mesh Mesh;
typedef struct _Btree Btree;
enum {
OP_UNION,
OP_INTERSECT,
OP_DIFF,
OP_INTERSECTSP,
};
/************************************************************************/
/* Funções Exportadas */
/************************************************************************/
Object* objCreateBtree( Object *, Object *, int operation);
/**
* Cria uma esfera.
*
* @param material Id do material da esfera.
* @param center Posição do centro da esfera na cena.
* @param radius Raio da esfera.
*
* @return Handle para o objeto criado.
*/
Object* objCreateSphere( int material, const Vector center, double radius );
/**
* Cria um triângulo.
*
* @param material Id do material do triângulo.
* @param v0 Primeiro vértice do triângulo.
* @param v1 Segundo vértice do triângulo.
* @param v2 Terceiro vértice do triângulo.
* @param tex0 Coordenadas de textura do primeiro vértice do triângulo.
* @param tex1 Coordenadas de textura do segundo vértice do triângulo.
* @param tex2 Coordenadas de textura do terceiro vértice do triângulo.
*
* @return Handle para o objeto criado.
*/
Object* objCreateTriangle( int material, const Vector v0, const Vector v1, const Vector v2,
const Vector tex0, const Vector tex1, const Vector tex2 );
/**
* Cria um paralelepípedo.
*
* @param material Id do material do paralelepípedo.
* @param bottomLeft Vértice de baixo e à esquerda do paralelepípedo.
* @param topRight Vértice de cima e à direita do paralelepípedo.
*
* @return Handle para o objeto criado.
*/
Object* objCreateBox( int material, const Vector bottomLeft, const Vector topRight );
/**
* Cria um malha de triangulos em um paralelepípedo.
*
* @param material Id do material da malha de triangulos.
* @param bottomLeft Vértice de baixo e à esquerda do paralelepípedo.
* @param topRight Vértice de cima e à direita do paralelepípedo.
*
* @return Handle para o objeto criado.
*/
Object* objCreateMesh( int material, const Vector bottomLeft, const Vector topRight, const char* filename );
/**
* Calcula a que distância um raio intercepta um objeto.
*
* @param object Handle para um objeto.
* @param eye Origem do raio.
* @param ray Direção do raio.
*
* @return Distância de eye até a superfície do objeto no ponto onde ocorreu a
* interseção. Menor ou igual a zero se não houver interseção.
*/
double objIntercept( Object* object, Vector eye, Vector ray );
Vector objInterceptExit( Object* object, Vector point, Vector d );
/**
* Calcula o vetor normal a um objeto em um ponto.
*
* @param object Handle para um objeto.
* @param point Ponto na superfície do objeto onde a normal deve ser calculada.
*
* @return Vetor unitário, normal ao objeto, com origem em point.
*/
Vector objNormalAt( Object* object, Vector point );
/**
* Calcula a coordenada de textura para um objeto em um ponto.
*
* @param object Handle para um objeto.
* @param point Ponto na superfície do objeto para onde uma coordenada de textura
* será calculada.
*
* @return Coordenada de textura para o objeto no ponto especificado.
*/
Vector objTextureCoordinateAt( Object* object, Vector point );
/**
* Obtém o Material* de um objeto.
*/
int objGetMaterial( Object* object );
/**
* Destrói um objeto criado com as funções objCreate*().
*/
void objDestroy( Object* object );
#endif