OpenGL GLUT 3221225477C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 OpenGL GLUT 3221225477

Сообщение Anonymous »

Моя программа по какой -то причине пытается изменить содержимое массива для всего мира. Он выходит из кода 3221225477. Я не понимаю, в чем проблема. Код ошибки говорит что -то о памяти, я просмотрел свой код, чтобы убедиться, что нет ошибки, я знаю, что камера и Raycast не выровняются, я еще не оттолкнул их, но он обнаруживает блоки, если вы потратите камеру и сбой впоследствии. < /P>
#include
#include
#include
#include
#include
//Initialize all variables and define PI for rotations
float PX = 0; //PX stands for Player X Position
float PY = 5; //PY stands for Player Y Position
float PZ = 0; //PZ stands for Player Z Position
float XR = -90; //XR stands for camera X Rotation
float YR = 0; //YR stands for camera Y Rotation
float ZR = 0; //ZR stands for camera Z Rotation
float OX; //Mouse Last X position
float OY; //Mouse Last Y position
float PI = 3.141592654f; //Define PI in a float variable.
float RY = 0; //The Y rotation value in Degrees CONVERTED to radians.

int CW = 25; //Chunk Max Width
int CD = 25; //Chunk Max Depth
int CH = 10; //Chunk Max Height
int XO = 0; //Block X Offset
int YO = 0; //Block Y Offset
int ZO = 0; //Block Z Offset
int CXO = 0; //Chunk X Block Offset
int CYO = 0; //Chunk Y Block Offset
int CZO = 0; //Chunk Z Block Offset
//Cube surface bools
bool Top = 0; //When toggled this loads the top of the cube.
bool Left = 0; //When toggled this loads the left of the cube.
bool Front = 0; //When toggled this loads the front of the cube.
bool Right = 0; //When toggled this loads the right of the cube.
bool Back = 0; //When toggled this loads the back of the cube.
bool Bottom = 0; //When toggled this loads the bottom of the cube.

int Block = 0;
int Blocks[130][130][130] = {0};

bool DB = 0; //Stands for Detect Block it is for blocks in front of the player to be able to place and break blocks.
bool DBIZ = 0;

float RayLength = 0;
//Place and Break Block Raycast variables
//Convert The Cameras Degrees Into Radians In This Variable
float XRa = 0; //X Rotation in Radians
float YRa = 0; //Y Rotation in Radians
float ZRa = 0; //Z Rotation in Radians

float TDX = 0; //The origin of increments
float TDY = 0; //This is the unrotated point
float TDZ = 0; //

float ROX = 0; //Rotation One X' (Delta)
float ROY = 0; //Rotation One Y' (Delta)
float ROZ = 0; //Rotation One Z' (Delta)

float RTX = 0; //Rotation Two X' (Delta)
float RTY = 0; //Rotation Two Y' (Delta)
float RTZ = 0; //Rotation Two Z' (Delta)

int CPX = 0; //Check Voxel X
int CPY = 0; //Check Voxel Y
int CPZ = 0; //Check Voxel Z

//This is the position to break blocks when left clicking
int BBX = 0; //Selected Block (in map) X
int BBY = 0; //Selected Block (in map) Y
int BBZ = 0; //Selected Block (in map) Z

//This is the position to place a block when the player right clicks.
int PBX = 0; //Position before collision
int PBY = 0; //Position before collision
int PBZ = 0; //Position before collision

#define White {0x00, 0x00, 0x00}
#define Black {0xff, 0xff, 0xff}
#define Red {0xff, 0x00, 0x00}
#define Green {0x00, 0xff, 0x00}
#define Blue {0x00, 0x00, 0xff}
//Create a texture
GLubyte Grass[][3] =
{
Black, White,
Blue, Red,
};

GLubyte texture[][3] =
{
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
Black, White, Black, White, Black, White, Black, White, Black, White, Black, White,
White, Black, White, Black, White, Black, White, Black, White, Black, White, Black,
};

//Make Floor makes a floor for the level for now
void MakeFloor()
{
for(int FX = 0; FX < CW; FX++)
{
for(int FZ = 0; FZ < CD; FZ++)
{
//Set Block to 1
Blocks[FX][2][FZ] = 1;
}
}
Blocks[4][4][3] = {1};
}

void DBPB()
{
DB = 0;
DBIZ = 0;
//Convert current rotation values into Radian
XRa = (XR / 180 * PI);
YRa = (YR / 180 * PI);
ZRa = (ZR / 180 * PI);

//The origin is set to zero and the line that is in the correct axis for the camera is added.
TDX = RayLength;
TDY = 0;
TDZ = 0;

//Raycast
for(RayLength = 0; RayLength < 7; RayLength += .2)
{
//Rotate in X axis
ROX = TDX;
ROY = (TDY*cos(XRa)) - (TDZ*sin (XRa));
ROZ = (TDY*sin(XRa)) + (TDZ*cos(XRa));

//Rotate in Y axis
RTX = (ROZ*sin(YRa)) + (ROX*cos(YRa));
RTY = ROY;
RTZ = (ROZ*cos(YRa)) - (ROX*sin(YRa));

//Rotate in Z axis(Not used)
//X = X*cos(theta) - y*sin(theta)
//Y = X*Sin(theta) + y*cos(theta)
//Z = Z

CPX = static_cast(RTX+PX);
CPY = static_cast(RTY+PY);
CPZ = static_cast(RTZ+PZ);

if(Blocks[CPX][CPY][CPZ] != 0 && DB == 0)
{
//Toggle bool DB
DB = 1;
//Detected Collision at BBX, BBY, BBZ
BBX = CPX;
BBY = CPY;
BBZ = CPZ;
//std::cout g l V e r t e x 3 f ( X O + 1 . 0 , Y O + 1 . 0 , Z O + 1 . 0 ) ; < b r / > g l E n d ( ) ; < b r / > } < b r / > if(Left == 1)
{
//Left Surface(Top left triangle then bottom right triangle)
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO+1.0);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO,YO,ZO+1.0);
glEnd();
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO);
glTexCoord2f(1.0f,1.0f);
glVertex3f(XO,YO,ZO);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO,YO,ZO+1.0);
glEnd();
}
if(Front == 1)
{
//Front Surface(Top left triangle then bottom right triangle)
glBegin(GL_TRIANGLES);//done
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO,YO,ZO);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO+1.0,YO+1.0,ZO);
glEnd();
glBegin(GL_TRIANGLES);
glTexCoord2f(-1.0f,0.0f);
glVertex3f(XO,YO,ZO);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO+1.0,YO,ZO);
glTexCoord2f(0.0f,-1.0f);
glVertex3f(XO+1.0,YO+1.0,ZO);
glEnd();
}
if(Right == 1)
{
//Right Surface(Top left triangle then bottom right triangle)
glBegin(GL_TRIANGLES);
glTexCoord2f(-1.0f,0.0f);
glVertex3f(XO+1.0,YO,ZO);
glTexCoord2f(-1.0f,-1.0f);
glVertex3f(XO+1.0,YO+1.0,ZO);
glTexCoord2f(0.0f,-1.0f);
glVertex3f(XO+1.0,YO+1.0,ZO+1.0);
glEnd();
glBegin(GL_TRIANGLES);
glTexCoord2f(-1.0f,0.0f);
glVertex3f(XO+1.0,YO,ZO);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO+1.0,YO,ZO+1.0);
glTexCoord2f(0.0f,-1.0f);
glVertex3f(XO+1.0,YO+1.0,ZO+1.0);
glEnd();
}
if(Back == 1)
{
//Back Surface(Top left triangle then bottom right triangle)
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO+1.0);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO+1.0,YO+1.0,ZO+1.0);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO+1.0,YO,ZO+1.0);
glEnd();
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO+1.0,ZO+1.0);
glTexCoord2f(1.0f,1.0f);
glVertex3f(XO,YO,ZO+1.0);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO+1.0,YO,ZO+1.0);
glEnd();
}
if(Bottom == 1)
{
//Bottom Surface(Back left triangle then Front right triangle)
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO,ZO);
glTexCoord2f(0.0f,0.0f);
glVertex3f(XO,YO,ZO+1.0);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO+1.0,YO,ZO+1.0);
glEnd();
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0f,0.0f);
glVertex3f(XO,YO,ZO);
glTexCoord2f(1.0f,1.0f);
glVertex3f(XO+1.0,YO,ZO);
glTexCoord2f(0.0f,1.0f);
glVertex3f(XO+1.0,YO,ZO+1.0);
glEnd();
}
//glBegin(GL_POINTS);
// glVertex3f(REX,REY,REZ);
//glEnd();
}
}
}
}
}

// Camera setup
void Camera()
{
glRotatef(XR, 1.0, 0.0, 0.0);
glRotatef(YR, 0.0, 1.0, 0.0);
glRotatef(ZR, 0.0, 0.0, 1.0);
glTranslated(-PX, -PY, -PZ);
}

// Display function
void display()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
Camera();//Load the camera
glEnable(GL_DEPTH_TEST);
//glEnable(GL_LIGHTING);
//glEnable(GL_LIGHT0);
//glShadeModel(GL_SMOOTH);
glEnable(GL_TEXTURE_2D);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
DBPB();
LC(); //Loads current chunk
glutSwapBuffers();
}

//Reshape function
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, (GLfloat)w / (GLfloat)h, 1.0, 1000.0);
glMatrixMode(GL_MODELVIEW);
}

//Keyboard controls
void keyboard(unsigned char key, int x, int y)
{
if (key == 'w')
{
//Move forward
RY = (YR / 180 * PI);
PX += float(sin(RY));
PZ -= float(cos(RY));
}
if (key == 'a')
{
// Strafe left
RY = (YR / 180 * PI);
PX -= float(cos(RY)) * 0.2;
PZ -= float(sin(RY)) * 0.2;
}
if (key == 's')
{
//Move backward
RY = (YR / 180 * PI);
PX -= float(sin(RY));
PZ += float(cos(RY));
}
if (key == 'd')
{
//Strafe right
RY = (YR / 180 * PI);
PX += float(cos(RY)) * 0.2;
PZ += float(sin(RY)) * 0.2;
}
if (key == 'q')
{
//Move Up
PY++;
}
if (key == 'z')
{
//Move Down
PY--;
}
if (key == 27)
{
// Exit program
exit(0);
}
}

//MM stands for Mouse motion function
void MM(int x, int y)
{
int fx = x - OX;
int fy = y - OY;
OX = x;
OY = y;
XR += (float)fy;
YR += (float)fx;
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600, 400);
glutCreateWindow("Voxel Test");
MakeFloor(); //Creates the floor for now
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc(reshape);
glutPassiveMotionFunc(MM);
glutMouseFunc(MFC);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... 3221225477
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неопределенные ссылки на функции OpenGL/GLUT при компиляции с Mingw
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • OpenGL/GLUT не может нарисовать на нем
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Open3d: основные операции с облаками точек не работают, выход с кодом = 3221225477.
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Печальная ошибка Apache "Родитель: дочерний процесс выходит со статусом 3221225477"
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Freopen (), вызывая возвращаемое значение 3221225477?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»