Jump to content

  • Log In with Google      Sign In   
  • Create Account


standart camera code is messing up my world sectors D:


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 sliders_alpha   Members   -  Reputation: 107

Like
0Likes
Like

Posted 15 April 2012 - 12:38 PM

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"

http://www.youtube.com/watch?v=Zq5b6ZJhLSE


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 :
http://www.youtube.com/watch?v=2sV-d5cx9oc
world generation
http://www.youtube.com/watch?v=7eNjjiyRQcM

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

Sponsor:



Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS