這是我正在使用的一個粒子系統。我想從粒子中創建一個多維數據集,但它現在似乎正在陷入seg故障,儘管它曾經工作過。我猜這是數組,但我不能在2天后找出問題。 GDB一直沒有幫助。分割故障讓我瘋狂
#include "particles.h"
using namespace std;
GLfloat texture1[10];
particle parts[50][50][50];
GLfloat angle = 1.0;
particles::particles()
{
addTextures();
cube();
}
particles::particles(int O)
{
addTextures();
cube();
}
void particles::addTextures()
{
texture1[0] = LoadTextureRAW("star_mask.bmp",256,256); //load texture
texture1[1] = LoadTextureRAW("star.bmp",256,256);
}
void particles::cube()
{
// for(int i =0; i<124999; i++)
// {
// parts[i] = particle(1,1,1,1,1,1,1);
// }
float x=-5;
float y=-5;
float z=-5;
for(int i =0 ; i <49 ;i++)
{
for(int k =0 ; k <49 ;k++)
{
for(int j =0 ; j <49 ;j++)
{
parts[i][k][j] = particle(i*0.01,k*0.01,j*0.01,1,1,1,0.09);
}
}
}
}
GLuint particles::LoadTextureRAW(const char * filename, int width,
int height)
{
GLuint texture;
unsigned char * data;
FILE * file;
file = fopen(filename, "rb");
if (file == NULL) return 0;
data = (unsigned char *)malloc(width * height * 3);
fread(data, width * height * 3, 1, file);
fclose(file);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB,
GL_UNSIGNED_BYTE, data);
free(data);
return texture;
}
void particles::FreeTexture(GLuint texture)
{
glDeleteTextures(1, &texture);
}
GLuint particles::LoadTextureRAW(const char * filename, int width,
int height);
void particles::FreeTexture(GLuint texturez);
void particles::square (void)
{
glBindTexture(GL_TEXTURE_2D, texture1[0]);
glBegin (GL_QUADS);
glTexCoord2d(0.0,0.0);
glVertex2d(-1.0,-1.0);
glTexCoord2d(1.0,0.0);
glVertex2d(1.0,-1.0);
glTexCoord2d(1.0,1.0);
glVertex2d(1.0,1.0);
glTexCoord2d(0.0,1.0);
glVertex2d(-1.0,1.0);
glEnd();
}
嘗試評論的東西,直到它停止,如果gbd不會給你一個堆棧它可能是靜態初始化。 –
多一點信息會很有用。例如,你如何使用「粒子」類? segv發生之前你做的最後一件事是什麼? – Praetorian
第一步當你segfault:看回溯.. – MahlerFive