Jump to content
  • Advertisement
Sign in to follow this  
sliders_alpha

standart camera code is messing up my world sectors D:

This topic is 2283 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

HI,
my problem is the following, if I only do translation or Y rotation everything looks fine.
But as soon as I do X rotation my sector get "seprarated"

[media]
[/media]


this is my init


private void initGL() {

GL11.glEnable(GL11.GL_TEXTURE_2D);//texture mapping
GL11.glShadeModel(GL11.GL_SMOOTH);//smooth shading
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//couleur de fond noire
GL11.glClearDepth(1.0);//setup du buffer de profondeur
GL11.glEnable(GL11.GL_DEPTH_TEST);//permet le test de profondeur
GL11.glDepthFunc(GL11.GL_LEQUAL); //le type de test de profondeur a faire
GL11.glMatrixMode(GL11.GL_PROJECTION);//selectrione la matrice de projection
GL11.glLoadIdentity();//reset la matrice de projection
// Calcul l'aspect ratio de la fenetre
GLU.gluPerspective(
45.0f,
(float) displayMode.getWidth() / (float) displayMode.getHeight(),
0.1f,
100.0f);

GL11.glMatrixMode(GL11.GL_MODELVIEW);//selectionne la modelview Matrix
GL11.glColor4f(1.0f,1.0f,1.0f,0.3f); // Full luminosité, 30% Alpha
GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE); // Blending mode one
// met les melleur parametre
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
}


any problem in it? (projection mode or something)

as for the rendering algorythm, I don't think that there is any problem with it.
since each cube is placed according to the previous one, if one of them is out
of sequence then all of them are..

I made a function that draw cube where I want (from the current position, which is the last drawed cube).
I have 16x256x16 sectors containing 65k cubes
a world is 9x9 sectors large.

I draw the world line by line

world top view
-z
^
|Sec Sec Sec <- World line 3
|Sec Sec Sec
|Sec Sec Sec <-World line 1
|------------------------>x

and a sector is drawed layer by lawer
(see videos)


GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();

//////////////////////////////////////////////////////////////////////////////////////////////////////////////Positioning
GL11.glRotatef(lookupdown,1.0f,0.0f,0.0f);
GL11.glRotatef(sceneroty,0.0f,1.0f,0.0f);
GL11.glTranslatef(xtrans, ytrans, ztrans); //starting position
///////////////////////////////////////////////////////////////////////////////////////////////////////////////Drawing
//drawing each sector
for (int zsect=0 ; zsect < displayArea; zsect++)
{
for (int xsect=0 ; xsect < displayArea; xsect++){
chunk = world.getSector((short)xsect, (short)zsect);
//drawing each layer
for(int yc=0; yc<256; yc++){
for(int zc=0; zc<16;zc++){
for(int xc=0; xc<16; xc++){

chunk.drawCube(xc.yc.zc,0.5f) //0.5f is a x translation
}
GL11.glTranslatef(-16.0f, 0.0f, 1.0f); //goes where line+1 of the layer is starting
}
GL11.glTranslatef(0.0f, 1.0f, -16.0f); //goes where layer+1 is starting
}
GL11.glTranslatef(16.0f, -256.0f, 0.0f); //goes where the next chunk on the line is starting
}
GL11.glTranslatef(-(float)(displayArea*16.0f), 0.0f, 16.0f);//goes at the beginning of the next chunk line
}



video examples, chunk generation :
[media]
[/media]
world generation
[media]
[/media]

camera code


private void readAndAct(int delta) {
//delta is to sync with fps
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { // Exit if Escape is pressed
done = true;
}
if(Display.isCloseRequested()) { // Exit if window is closed
done = true;
}

if (Keyboard.isKeyDown(Keyboard.KEY_Z)) {

xpos -= (float) Math.sin(heading * piover180) * 0.03f*delta;
zpos -= (float) Math.cos(heading * piover180) * 0.03f*delta;

}

if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
xpos += (float) Math.sin(heading * piover180) * 0.03f*delta;
zpos += (float) Math.cos(heading * piover180) * 0.03f*delta;

}

if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
heading -= 0.25f*delta;
yrot = heading;
}

if (Keyboard.isKeyDown(Keyboard.KEY_Q)) {
heading += 0.25f*delta;
yrot = heading;
}

if (Keyboard.isKeyDown(Keyboard.KEY_PRIOR)) {
lookupdown -= 0.25f*delta;
}

if (Keyboard.isKeyDown(Keyboard.KEY_NEXT)) {
lookupdown += 0.25f*delta;
}
if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
ypos += 0.05f*delta;
}
if(Keyboard.isKeyDown(Keyboard.KEY_C)) {
ypos -= 0.05f*delta;
}
updateFPS();
}


any idea?

thanks =D

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!