Jump to content

  • Log In with Google      Sign In   
  • Create Account

noshel

Member Since 21 Sep 2011
Offline Last Active Oct 14 2011 01:39 AM

Topics I've Started

[Android - 2D] How to work with different screen sizes

02 October 2011 - 03:21 AM

Hi all!

Im having doubts on how to work with different screen sizes. Im giving the left top corner to (0,0), and for the right bottom corner i give (screen_width, screen_height). In this way i always know the size of the screen, and keep the aspect ratio of the objects i draw. But what happens when it try it on a smaller/higher screen? well, i keep having the aspect ratio, but have a look to this example:

Screen 1 (landscape):
width = 800
height = 400

I draw an object in (780,380), just in the right bottom corner. See screen 2 example:

Screen 2 (landscape)
width = 600
height = 300

They have same aspect ratio, but if in my code i draw something on (780,380), i some screens it would be visible, and in others it wont. Im thinking in converting coordinates, for example (600*780)/800 = 585, so i have the corresponding coordinates for both screens. But i dont know if this keep the acpect ratio, and i should apply it just not to coordinates, also for object dimensions.

Here is how i setup ortho view:

 public void seUpOrthoProjection(int w, int h)
 {
  float[] c_matrix = new float[16];
  float[] p_matrix = new float[16];
  
  engine.setScreenWidth(w);
  engine.setScreenHeight(h);
  
  setUpViewPort(w,h);
  
  Matrix.orthoM(p_matrix, 0, 0, w, h, 0, -1.0f, 1.0f);
  Matrix.setLookAtM(c_matrix, 0, 0, 0, 1, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
     
  engine.setProjectionMatrix(p_matrix);
  engine.setCameraMatrix(c_matrix);
}


Maybe this is a stupid question, but i dont know what is the way to work with it.

Thanks in advance!

Regards

[Android] VA vs VBO performance test

29 September 2011 - 12:45 PM

Hi all,


im implementing a basic 2D engine for Android, just for my own use, in order to be able to reuse the base-code between my game developments. Im neraly new on OpenGL ES 2.0, so i have some doubts about what is better to render, Vertex Arrays or Vertex Buffer Objects. Ive read some (here and other webs) about it, that VBO for static objects, so you dont have to resend data to GPU every time, and for constantly moving objects youll find better performance on Vertex Arrays.

Better than believing or not, i decided to benchmark both, so here are the results for 100 squares & 400 squares rendered on screen. VA wins the test, even on static render. i can post the code i want to see it. (mseg means miliseconds, im spanish and forgot to put that in english)


100 Squares:

Posted Image


400 squares:

Posted Image



Is this performance what i have to expect? I heard that dedicated memory on cellphones for VBO its the RAM, so i wont get that boost on performance.

Thanks in advance!


Regards

How to work with vertex correctly

21 September 2011 - 01:33 PM

Hi all,


Im new here (just to post, not to read :P), and i come you with a doubt that its driving me nuts. Im actually doing some classes for Java/Android to draw entities. At this point, i have all methods ready, and started with "transformation" methods. And here is where my doubt comes.

I pass to vertex shader the float[] array where vertex coords are defined. And i pass the multiplication of camera matrix and projection matrix. As for example, in shader language, this:

gl_Position = uMVPMatrix * vPosition;

Imagine now that i want to translate than entity. If i multiplicate a translation matrix with both camera and projection ones, and pass it to the shader, when i draw i got the entity in the new position, but my local vertex array wont be updated with the new position. Imagine multiple translations thought time, the entity its shown in its new positions, but i never have its real position, because i pass it to the shader as a transformation matrix, and i pass the vertex array as the initial position.

I tried modifiying the vertex array in every translation (and not multipliying translation matrix to camera/projection), and it works well, and i have the position updated, but thinking in performance/cpu cost i dont think its the best way.

Now imagine this with rotation, scale, and all transformations you can imagine. Do i have to update vertex array in every translation (in order to know the real position/size/etc the entity has every moment) , or do i have to multiply multiple transformations matrix and pass them to shader, or maybe just save new (x,y) position, angle rotation, scale % , and just apply to vertex array when i need to know the real state of the entity.

Maybe its an obvious question, but im new to opengl :)

Thanks in advance!

Regards





PARTNERS