N64vSNES wrote:Code: Select all
void Initialize(void){
printf("Initializing...\n");
glClearColor(0.0,191.0,255.0,0.0); //aqua
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
//glEnable(GL_DEPTH_TEST);
1- glClearColor, like all other OpenGL functions do not take 0-255 values. 0-1.
2- You're using the orthographic projection with depth, I can't think of any reason to do this. Use glFrustrum().
3- If you're trying to achieve a 3D camera then why have you commented out glEnable(GL_DEPTH_TEST) ?
4- Once you've got your matrix crap set up then you should return the matrix mode to GL_MODELVIEW
Code: Select all
player.camera.x=CUBE_UNIT*2;
player.camera.y=CUBE_UNIT*0;
player.camera.z=CUBE_UNIT*2;
player.skinSelected=BLACK;
setupGrid();
grid[0].position.x=CUBE_UNIT*2;
grid[0].position.y=CUBE_UNIT*0;
grid[0].position.z=CUBE_UNIT*4;
grid[0].skin=GREEN;
grid[0].exists=TRUE;
printf("Initialized...\n");
return;
}
I'm not sure why the camera is part of the player, also I don't know what CUBE_UNIT is but you've set your projection to
0.0,1.0,0.0,1.0,-1.0,1.0 so check those values are correct. Also it's probably doing no harm at all but why are you telling your function to return when it's about to return anyway?
Code: Select all
void Draw(void){
glClear(GL_COLOR_BUFFER_BIT);//|GL_DEPTH_BUFFER_BIT);
printf("Drawing...\n");
setColor(GREEN);
glBegin(GL_LINES);
glVertex3f(0.0,0.0,0.0);
glVertex3f(25.0,0.0,0.0);
glEnd();
//renderGrid();\
renderCube(grid[0]);
glFlush();
//glutSwapBuffers();
printf("Drawed...\n");
return;
}
1- What is setColor(GREEN) doing? Maybe showing where you declare setColor() and GREEN would help.
2- The call to renderCube(grid[0]) could have something to do with it, you'll have to post the code for it though.
3- Once again, your viewport is
0.0,1.0,0.0,1.0,-1.0,1.0
and you're using 25.0.
4- Be sure you're not making any matrix transformations before calling this because this will affect it.
Code: Select all
glBegin(GL_LINES);
glVertex3f(0.0,0.0,0.0);
glVertex3f(25.0,0.0,0.0);
glEnd();
Also you're claiming to have a camera problem but the only object being rendered (that you've shown us) isn't relative to the camera. Unless you're calling your transformation functions somewhere else but you haven't shown us if that's the case.
And again, why return when it's about to return anyway?
I'm fairly sure you're main issue is (assuming you've shown us it all) you're not switching to the matrix mode to GL_MODELVIEW.
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
//Some useful stuff:
#define STRING char*
#define BOOL int
#define TRUE 1
#define FALSE 0
#define DIRECTION int
//Colors:
#define COLOR int
#define BLACK 0
#define WHITE 1
#define RED 2
#define GREEN 3
#define BLUE 4
#define YELLOW 5
#define ORANGE 6
#define PINK 7
#define PURPLE 8
#define BROWN 9
//Used for axis:
#define FRONT_DIR 0
#define RIGHT_DIR 1
#define BACK_DIR 2
#define LEFT_DIR 3
#define UP_DIR 4
#define DOWN_DIR 5
//Keys:
#define ESCAPE 27
#define CHAT 'c'
#define FORWARD 'w'
#define LEFT 'a'
#define BACK 's'
#define RIGHT 'd'
#define UP 'r'
#define DOWN 'f'
//Special keys:
#define LOOK_UP GLUT_KEY_UP
#define LOOK_DOWN GLUT_KEY_DOWN
#define ROTATE_LEFT GLUT_KEY_LEFT
#define ROTATE_RIGHT GLUT_KEY_RIGHT
#define CREATE 13
#define DESTROY 8
//More useful stuff:
#define CUBE_UNIT 64
#define GRID_WIDTH 100
#define GRID_HEIGHT 100
#define GRID_DEPTH 100
#define GRID_SIZE GRID_WIDTH*GRID_HEIGHT*GRID_DEPTH
#define RESOURCES_FOLDER "Resources"
#define TEXTURES_FOLDER RESOURCES_FOLDER+"/Textures"
#define DATA_FOLDER RESOURCES_FOLDER+"/Data"
#define BMP ".bmp"
typedef struct Vector2i{
int x,y;
}Vector2i;
typedef struct Vector2f{
float x,y;
}Vector2f;
typedef struct Vector3i{
int x,y,z;
}Vector3i;
typedef struct Vector3f{
float x,y,z;
}Vector3f;
typedef struct Cube{
Vector3f position;
COLOR skin;
BOOL exists;
}Cube;
typedef struct Player{
Vector3f camera;
DIRECTION facing;
int skinSelected;
}Player;
int screenWidth,screenHeight;
Cube grid[GRID_SIZE];
Player player;
void gexit(void){
//deallocate pointers here
exit(0);
return;
}
void setupGrid(){
//setup grid
return;
}
void Initialize(void){
printf("Initializing...\n");
glClearColor(0.0,191.0,255.0,0.0); //aqua
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
//glEnable(GL_DEPTH_TEST);
player.camera.x=CUBE_UNIT*2;
player.camera.y=CUBE_UNIT*0;
player.camera.z=CUBE_UNIT*2;
player.skinSelected=BLACK;
setupGrid();
grid[0].position.x=CUBE_UNIT*2;
grid[0].position.y=CUBE_UNIT*0;
grid[0].position.z=CUBE_UNIT*4;
grid[0].skin=GREEN;
grid[0].exists=TRUE;
printf("Initialized...\n");
return;
}
void setColor(COLOR color){
switch(color){
case BLACK:
glColor3f(0.0,0.0,0.0);
break;
case WHITE:
glColor3f(255.0,255.0,255.0);
break;
case RED:
glColor3f(255.0,0.0,0.0);
break;
case GREEN:
glColor3f(0.0,255.0,0.0);
break;
case BLUE:
glColor3f(0.0,0.0,255.0);
break;
case YELLOW:
glColor3f(255.0,255.0,0.0);
break;
case ORANGE:
glColor3f(255.0,165.0,0.0);
break;
case PINK:
glColor3f(255.0,20.0,147.0);
break;
case PURPLE:
glColor3f(160.0,32.0,240.0);
break;
case BROWN:
glColor3f(139.0,69.0,19.0);
break;
};
return;
}
void renderCube(Cube cube){
printf("Rendering cube...\n");
setColor(cube.skin);
int _x,_y,_z;
_x=cube.position.x,_y=cube.position.y,_z=cube.position.z;
glBegin(GL_QUADS); //front
glVertex3f(_x,_y,_z);
glVertex3f(_x+CUBE_UNIT,_y,_z);
glVertex3f(_x+CUBE_UNIT,_y+CUBE_UNIT,_z);
glVertex3f(_x,_y+CUBE_UNIT,_z);
glEnd();
glFlush();
glBegin(GL_QUADS); //back
glVertex3f(_x,_y,_z+CUBE_UNIT);
glVertex3f(_x+CUBE_UNIT,_y,_z+CUBE_UNIT);
glVertex3f(_x+CUBE_UNIT,_y-CUBE_UNIT,_z+CUBE_UNIT);
glVertex3f(_x,_y-CUBE_UNIT,_z+CUBE_UNIT);
glEnd();
glFlush();
glBegin(GL_QUADS); //top
glVertex3f(_x,_y,_z);
glVertex3f(_x+CUBE_UNIT,_y,_z);
glVertex3f(_x+CUBE_UNIT,_y,_z+CUBE_UNIT);
glVertex3f(_x,_y,_z+CUBE_UNIT);
glEnd();
glFlush();
glBegin(GL_QUADS); //bottom
glVertex3f(_x,_y-CUBE_UNIT,_z);
glVertex3f(_x+CUBE_UNIT,_y-CUBE_UNIT,_z);
glVertex3f(_x+CUBE_UNIT,_y-CUBE_UNIT,_z+CUBE_UNIT);
glVertex3f(_x,_y-CUBE_UNIT,_z+CUBE_UNIT);
glEnd();
glFlush();
glBegin(GL_QUADS); //left
glVertex3f(_x,_y,_z);
glVertex3f(_x,_y,_z+CUBE_UNIT);
glVertex3f(_x,_y-CUBE_UNIT,_z+CUBE_UNIT);
glVertex3f(_x,_y-CUBE_UNIT,_z);
glEnd();
glFlush();
glBegin(GL_QUADS); //right
glVertex3f(_x+CUBE_UNIT,_y,_z);
glVertex3f(_x+CUBE_UNIT,_y,_z+CUBE_UNIT);
glVertex3f(_x+CUBE_UNIT,_y-CUBE_UNIT,_z+CUBE_UNIT);
glVertex3f(_x+CUBE_UNIT,_y-CUBE_UNIT,_z);
glEnd();
glFlush();
printf("Rendered cube...\n");
return;
}
void renderGrid(void){
printf("Rendering grid...\n");
int _i;
_i=0;
while(_i<=GRID_SIZE){
if(grid[_i].exists){
renderCube(grid[_i]);
_i++;
}else{
_i++;
}
}
printf("Rendered grid...\n");
return;
}
void Draw(void){
glClear(GL_COLOR_BUFFER_BIT);//|GL_DEPTH_BUFFER_BIT);
printf("Drawing...\n");
setColor(GREEN);
glBegin(GL_LINES);
glVertex3f(0.0,0.0,0.0);
glVertex3f(25.0,0.0,0.0);
glEnd();
//renderGrid();\
renderCube(grid[0]);
glFlush();
//glutSwapBuffers();
printf("Drawed...\n");
return;
}
void Keyboard(unsigned char key,int x,int y){
//handle user input
switch(key){
case ESCAPE:
gexit();
break;
case FORWARD:
//TODO: do collision checks
player.camera.z+=CUBE_UNIT;
break;
case LEFT:
player.camera.x-=CUBE_UNIT;
break;
case BACK:
player.camera.x-=CUBE_UNIT;
break;
case RIGHT:
player.camera.x+=CUBE_UNIT;
break;
case UP:
player.camera.y+=CUBE_UNIT;
break;
case DOWN:
player.camera.y-=CUBE_UNIT;
break;
};
return;
}
void Keyboard2(int key,int x,int y){
switch(key){
case LOOK_UP:
break;
case LOOK_DOWN:
break;
case ROTATE_LEFT:
break;
case ROTATE_RIGHT:
break;
};
return;
}
int main(int argc,char *argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowPosition(10,10);
glutInitWindowSize(680,480);
glutCreateWindow("Cuberealm");
Initialize();
glutDisplayFunc(Draw);
glutKeyboardFunc(Keyboard);
glutSpecialFunc(Keyboard2);
glutMainLoop();
gexit();
return 0;
}