Enviado em 03/12/2015 - 14:23h
Ola pessoal, poderiam me ajudar.
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <math.h>
#include <iostream>
#include <GL/glext.h>
using namespace std;
const int MAX_PARTICULAS = 100000;
const float TAMANHO_PARTICULA = 0.05f;
const float FADE_RATE = 0.01f;
const float RAIO = 0.5f;
const float PI = 3.14f;
const float GRAVIDADE = -0.0098;
const float MASSA = 2;
const float ENERGIA_CINETICA = 0.0;
int width = 640;
int height = 640;
int dist = 25;
float rotationX = 38.0, rotationY = 22.0;
int proj = 0;
typedef struct particula Particula;
typedef struct imagem Imagem;
struct particula {
...
};
struct imagem {
unsigned char* ps;
GLuint largura;
GLuint altura;
};
Particula particulas[MAX_PARTICULAS];
GLuint textura[2];
float randomFloat();
void display(void);
void init(void);
void criarParticulas();
void desenharParticulas();
void desenharChao();
void atualizarParticulas();
void reshape(int w, int h);
Imagem *carregarBitmap(const char* nomeArquivo);
GLuint gerarTextura(Imagem *imagem);
void excluirTextura(GLuint textura);
int main(int argc, char** argv) {
srand((unsigned int)time(0));
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Particle System");
init();
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
void desenhaEixos(){
....
}
void display(void) {
....
}
void init(void) {
glClearColor (0.0, 0.0, 0.0, 0.0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
criarParticulas();
Imagem *particle_mask = carregarBitmap("circlealpha.bmp");
Imagem *particle = carregarBitmap("circle.bmp");
if(particle_mask == NULL || particle == NULL) {
textura[0] = 0;
textura[1] = 0;
} else {
textura[0] = gerarTextura(particle_mask);
textura[1] = gerarTextura(particle);
}
}
float randomFloat() {
return (float)rand() / ((float)RAND_MAX + 1);
}
void criarParticulas() {
....
}
void desenharParticulas() {
....
}
void desenharChao() {
......
}
void atualizarParticulas() {
.....
}
void reshape (int w, int h) {
....
}
Imagem *carregarBitmap(const char* nome_arquivo) {
Imagem* imagem = new Imagem;
/* Codigo adaptado do site http://www.cplusplus.com/articles/GwvU7k9E/ */
unsigned char* datBuff[2] = {NULL, NULL};
unsigned char* pixels = NULL;
BITMAPFILEHEADER* bmpHeader = NULL;
BITMAPINFOHEADER* bmpInfo = NULL;
ifstream file(nome_arquivo, std::ios::binary);
if(!file) {
cout << "Arquivo nao encontrado\n";
return NULL;
}
datBuff[0] = (unsigned char*)malloc(sizeof(BITMAPFILEHEADER));
datBuff[1] = (unsigned char*)malloc(sizeof(BITMAPINFOHEADER));
file.read((char*)datBuff[0], sizeof(BITMAPFILEHEADER));
file.read((char*)datBuff[1], sizeof(BITMAPINFOHEADER));
bmpHeader = (BITMAPFILEHEADER*) datBuff[0];
bmpInfo = (BITMAPINFOHEADER*) datBuff[1];
if(bmpHeader->bfType != 0x4D42) {
std::cout << "Arquivo \"" << nome_arquivo << "\" nao eh bitmap\n";
return NULL;
}
pixels = (unsigned char*)malloc(bmpInfo->biSizeImage);
file.seekg(bmpHeader->bfOffBits);
file.read((char*)pixels, bmpInfo->biSizeImage);
unsigned char tmpRGB = 0;
for (unsigned long i = 0; i < bmpInfo->biSizeImage; i += 3)
{
tmpRGB = pixels[i];
pixels[i] = pixels[i + 2];
pixels[i + 2] = tmpRGB;
}
GLuint w = bmpInfo->biWidth;
GLuint h = bmpInfo->biHeight;
/* Fim do codigo */
imagem->altura = h;
imagem->largura = w;
imagem->ps = pixels;
return imagem;
}
GLuint gerarTextura(Imagem* imagem) {
GLuint textura;
glGenTextures(1, &textura);
glBindTexture(GL_TEXTURE_2D, textura);
GLint mode = GL_RGB;
glTexImage2D(GL_TEXTURE_2D, 0, mode, imagem->largura, imagem->altura, 0, mode, GL_UNSIGNED_BYTE, imagem->ps);
delete imagem;
return textura;
}
void excluirTextura(GLuint textura) {
glDeleteTextures(1, &textura);
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Acabei de formatar meu ssd e deu erro (3)
Desempenho abaixo do esperado - travadas e congelamento do sistema ope... (5)
Bash ao invés de Fish no CachyOS (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta