-
Notifications
You must be signed in to change notification settings - Fork 0
/
bibutil.h
138 lines (120 loc) · 3.98 KB
/
bibutil.h
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
#ifndef __BIBUTIL_H
#define __BIBUTIL_H
//*****************************************************
//
// bibutil.h
// Contém as estruturas e rotinas implementadas na
// biblioteca de rotinas auxiliares (bibutil.cpp).
//
// Isabel H. Manssour e Marcelo Cohen
//
// Este código acompanha o livro
// "OpenGL - Uma Abordagem Prática e Objetiva"
//
//*****************************************************
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
/*
extern "C" {
#include <jpeglib.h>
}*/
#ifndef M_PI
#define M_PI 3.1415926
#endif
// Define a estrutura de uma imagem
typedef struct
{
char nome[50]; // nome do arquivo carregado
int ncomp; // número de componentes na textura (1-intensidade, 3-RGB)
GLint dimx; // largura
GLint dimy; // altura
GLuint texid; // identifição da textura em OpenGL
unsigned char *data; // apontador para a imagem em si
} TEX;
// Define a estrutura de um vértice
typedef struct {
GLfloat x,y,z;
} VERT;
// Define a estrutura de uma face
typedef struct {
GLint nv; // número de vértices na face
GLint *vert; // índices dos vértices
GLint *norm; // índices das normais
GLint *tex; // índices das texcoords
GLint mat; // índice para o material (se houver)
GLint texid; // índice para a textura (se houver)
} FACE;
// Define a estrutura de uma coordenada
// de textura (s,t,r) - r não é usado
typedef struct {
GLfloat s,t,r;
} TEXCOORD;
// Define a estrutura de um objeto 3D
typedef struct {
GLint numVertices;
GLint numFaces;
GLint numNormais;
GLint numTexcoords;
bool normais_por_vertice; // true se houver normais por vértice
bool tem_materiais; // true se houver materiais
GLint textura; // contém a id da textura a utilizar, caso o objeto não tenha textura associada
GLint dlist; // display list, se houver
VERT *vertices;
VERT *normais;
FACE *faces;
TEXCOORD *texcoords;
} OBJ;
// Define um material
typedef struct {
char nome[20]; // Identificação do material
GLfloat ka[4]; // Ambiente
GLfloat kd[4]; // Difuso
GLfloat ks[4]; // Especular
GLfloat ke[4]; // Emissão
GLfloat spec; // Fator de especularidade
} MAT;
// Protótipos das funções
// Funções para cálculos diversos
void Normaliza(VERT &norm);
void ProdutoVetorial (VERT &v1, VERT &v2, VERT &vresult);
void VetorNormal(VERT vert1, VERT vert2, VERT vert3, VERT &n);
void RotaZ(VERT &in, VERT &out, float ang);
void RotaY(VERT &in, VERT &out, float ang);
void RotaX(VERT &in, VERT &out, float ang);
// Funções para carga e desenho de objetos
OBJ *CarregaObjeto(char *nomeArquivo, bool mipmap);
void CriaDisplayList(OBJ *obj);
void DesabilitaDisplayList(OBJ *ptr);
void DesenhaObjeto(OBJ *obj);
void SetaModoDesenho(char modo);
// Funções para liberação de memória
void LiberaObjeto(OBJ *obj);
void LiberaMateriais();
// Funções para cálculo e exibição da taxa de quadros por segundo
float CalculaQPS(void);
void Escreve2D(float x, float y, char *str);
// Funções para cálculo de normais
void CalculaNormaisPorFace(OBJ *obj);
// Funções para manipulação de texturas e materiais
TEX *CarregaTextura(char *arquivo, bool mipmap);
TEX *CarregaTexturasCubo(char *arquivo, bool mipmap);
void SetaFiltroTextura(GLint tex, GLint filtromin, GLint filtromag);
MAT *ProcuraMaterial(char *nome);
TEX *CarregaJPG(const char *filename, bool inverte=true);
// Constantes utilizadas caso não existam em GL/gl.h
#ifndef GL_ARB_texture_cube_map
# define GL_NORMAL_MAP 0x8511
# define GL_REFLECTION_MAP 0x8512
# define GL_TEXTURE_CUBE_MAP 0x8513
# define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
# define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
# define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
# define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
# define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
# define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
# define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
# define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
# define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
#endif
#endif