-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathray_tracing.hpp
112 lines (101 loc) · 3.94 KB
/
ray_tracing.hpp
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
/**
* \file ray_tracing.hpp
*
* \brief Este arquivo e um pacote que contem as definicoes que deverao ser apresentados na integra no arquivo ray_tracing.cpp, sendo este
* responsavel por todo processo logico e de implementacao do ray tracing. Foi utilizado o texto [introducao ao ray tracing] como base para a
* implementacao do arquivo.
* [Texto de introducao ao ray tracing]: www.visgraf.impa.br/Data/RefBib/PS_PDF/silva94/rt.pdf "introducao ao ray tracing"
*
* \author
* Petrucio Ricardo Tavares de Medeiros \n
* Universidade Federal do Rio Grande do Norte \n
* Departamento de Computacao e Automacao Industrial \n
* petrucior at gmail (dot) com
*
* \version 0.3
* \date Outubro 2013
*/
#ifndef _RAY_TRACING_HPP
#define _RAY_TRACING_HPP
#include "vetor.hpp" //rayTracing::Vetor
#include "raio.hpp" //rayTracing::Raio
#include "luz.hpp" //rayTracing::Luz
#include "objeto.hpp" //rayTracing::Objeto
#include "cena.hpp" //rayTracing::Cena
#ifdef __unix__ // Unix
#include <GL/gl.h> //GLdouble, Glint, glDrawPixels
#include <GL/glu.h>
#include <GL/glut.h> //gluUnProject
#else // Apple
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#endif
/*#else // Windows
#include <w32api/GL/gl.h> //GLdouble, Glint, glDrawPixels
#include <w32api/GL/glu.h>
#include <w32api/GL/glut.h> //gluUnProject
#endif*/
/**
* \defgroup RayTracingNameSpace Namespace rayTracing.
* @{
*/
/**
* \namespace rayTracing
*
* \brief O espaco de nomes rayTracing contem todas os arquivos que sao utilizados para sua implementacao.
*/
namespace rayTracing{
/**
* \class Ray_tracing
*
* \brief Define a logica e descreve os metodos responsaveis pelo funcionamento do ray tracing.
*/
class Ray_tracing{
//------------------------------
// Atributos privados
//------------------------------
private:
/**
* \fn void calculo_posicao_mundo(GLdouble winX, GLdouble winY, GLdouble winZ,
* GLdouble model[16], GLdouble proj[16], GLint view[4],
* GLdouble* objX, GLdouble* objY, GLdouble* objZ);
*
* \brief Metodo que calcula as posicoes de mundo atraves da funcao gluUnProject
*
* \param winX, winY, winZ - coordenadas da janela
* \param model, proj, view - matrizes modelview, projection e viewport.
* \param objX, objY, objZ - coordenadas do objeto
*/
void calculo_posicao_mundo(GLdouble winX, GLdouble winY, GLdouble winZ,
const GLdouble model[16], const GLdouble proj[16], const GLint view[4],
GLdouble* objX, GLdouble* objY, GLdouble* objZ);
//GLubyte imagem[300][300][3];
//------------------------------
// Metodos publicos
//------------------------------
public:
/**
* \fn GLubyte print_imagem(Cena* cena, Luz* luz, Vetor* lookfrom, Vetor* lookat,
* GLdouble model[16], GLdouble proj[16], GLint view[4], GLubyte imagem[300][300][3]);
*
* \brief Metodo para a pintura pixel a pixel da imagem
*
* \param cena - Cena que sera aplicado o ray tracing
* \param luz - Luz no objeto
* \param lookfrom - posicao da camera
* \param lookat - posicao para onde esta apontada a camera
* \param model, proj, view - matrizes modelview, projection e viewport
* \param imagem - Imagem analisada
*/
//Metodo para a pintura pixel a pixel da imagem
const GLvoid print_imagem(Cena* cena, Luz* luz, Vetor* lookfrom, Vetor* lookat,
GLdouble model[16], GLdouble proj[16], GLint view[4], GLubyte imagem[300][300][3]);
/* GLubyte print_imagem(Cena* cena, Luz* luz, Vetor* lookfrom, Vetor* lookat,
GLdouble model[16], GLdouble proj[16], GLint view[4]); */
/* GLvoid* print_imagem(Cena* cena, Luz* luz, Vetor* lookfrom, Vetor* lookat,
GLdouble model[16], GLdouble proj[16], GLint view[4]); */
};
} ////Fim do namespace rayTracing
/** @} */ //Fim do grupo class
#endif