Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (407)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  LibGDX tile rendering flicker.  (Read 438 times)
0 Members and 1 Guest are viewing this topic.
Offline marcuiulian13

Senior Member


Medals: 3



« Posted 2013-02-26 22:29:54 »

What's up everybody? Cheesy

Ok, so i am making a top-down 2(.5)D game. My "floor" tiles are stored in a WxH array (not tiles, but their id's). When I want to render them, I use two fors (y and x) get the texture for that tile id and render it at x * Tile.TILE_SIZE (int constant). To optimize the algorithm, i calculate a start and end x and y based on camera's position (a float transformed to a integer), and render only tiles that are on the screen.

Problem:
The problem is that when i move the camera (using a calculated delta -- huge decimal number) i get a visual bug: 1 pixel gap between random rows of tiles (only horizontal gap). My assumption is that the problem is caused by that float -> integer transformation.

Could anyone tell me how can i fix this problem? Also, how can i avoid this type of problems?
Thanks!

LE: Here's one picture of what is happening.


Check out my current project: http://cube3dev.blogspot.com/
Please comment/review/suggest.
Offline vbrain

Junior Member


Medals: 3



« Reply #1 - Posted 2013-02-27 05:24:56 »

When I was working with TileMaps in libgdx, that problem only occured when I zoomed in the camera, but just rendering (no matter what tilesize I specified) was smooth. I never got around to fixing it because I started working on something else.
Offline theagentd
« Reply #2 - Posted 2013-02-27 09:55:06 »

Disable bilinear filtering.

Myomyomyo.
Games published by our own members! Check 'em out!
Try the Free Demo of Titan Attacks
Offline marcuiulian13

Senior Member


Medals: 3



« Reply #3 - Posted 2013-02-27 11:41:15 »

I don't even think i am using bilinear filtering. Isn't default in libGDX to use GL_NEAREST when loading TextureAtlases ?

Check out my current project: http://cube3dev.blogspot.com/
Please comment/review/suggest.
Offline marcuiulian13

Senior Member


Medals: 3



« Reply #4 - Posted 2013-02-27 13:03:17 »

I fonud as a fix casting to int the camera's coordonates, but this is messing my camera code (i am calculating a vector to player's position for a smooth camera effect). Any fix for this? Cheesy

Here's my code:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
private void updateCameraPosition() {
   float targetX, targetY;
   
   if(player.getPosition().x - camera.viewportWidth / 2 < 0) targetX = camera.viewportWidth / 2;
   else if(player.getPosition().x + camera.viewportWidth / 2 > world.getLevel().getWidth() * Tile.TILE_SIZE)
      targetX = world.getLevel().getWidth() * Tile.TILE_SIZE - camera.viewportWidth / 2;
   else targetX = player.getPosition().x;
   
   if(player.getPosition().y - camera.viewportHeight / 2 < 8) targetY = camera.viewportHeight / 2 + 8;
   else if(player.getPosition().y + camera.viewportHeight / 2 > world.getLevel().getHeight() * Tile.TILE_SIZE + 8)
      targetY = world.getLevel().getHeight() * Tile.TILE_SIZE - camera.viewportHeight / 2 + 8;
   else targetY = player.getPosition().y;
   
   float dx = targetX - camera.position.x, dy = targetY - camera.position.y, dist = (float) Math.hypot(dx, dy);
   Vector3 cameraVector = new Vector3((float) Math.cos(Math.atan2(dy, dx)), (float) Math.sin(Math.atan2(dy, dx)), 0);
   cameraVector.mul(Math.max(dist / 25f, .2f));
   
   camera.position.add(cameraVector);
   camera.update();
}

Check out my current project: http://cube3dev.blogspot.com/
Please comment/review/suggest.
Pages: [1]
  ignore  |  Print  
 
 

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Try the Free Demo of Revenge of the Titans

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (94 views)
2013-05-17 21:29:12

alaslipknot (102 views)
2013-05-16 21:24:48

gouessej (132 views)
2013-05-16 00:53:38

gouessej (127 views)
2013-05-16 00:17:58

theagentd (138 views)
2013-05-15 15:01:13

theagentd (126 views)
2013-05-15 15:00:54

StreetDoggy (167 views)
2013-05-14 15:56:26

kutucuk (189 views)
2013-05-12 17:10:36

kutucuk (192 views)
2013-05-12 15:36:09

UnluckyDevil (199 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.133 seconds with 20 queries.