установка соотношения сторон в OpenGL (-ES), получение странных значений - PullRequest
1 голос
/ 05 октября 2011

Я получаю некоторые странные значения для ширины / высоты в следующем коде, в результате чего получается либо растянутая картинка, либо картинка вообще отсутствует.

public void onSurfaceChanged(GL10 gl, int w, int h) {

    screenHeight = h;  // actual height in pixels
    screenWidth = w;   // actual width in pixels
    worldWidth = 20;   // width of the projection (20 units)
    worldHeight = (int) (worldWidth * (screenHeight / screenWidth));  

    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glViewport(0, 0, screenWidth, screenHeight); //new viewport
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl, 0, worldWidth, 0, worldHeight); set the 2D projection  

Итак, я зарегистрировал переменные, они из портретного режима:

screenHeight = 455  
screenWidth = 320  
worldHeight = 20  
worldWidth = 20    

, в то время как (worldWidth * (screenHeight / screenWidth) должно дать 20 * 455/320 = 28 для worldHeight.

Это становится еще более странным в ландшафтном режиме, где worldHeight внезапно становится равным 0.

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 05 октября 2011

Позвольте мне угадать, screenHeight и screenWidth оба int с?В этом случае деление будет целочисленным делением, что приведет к округлению / усечению целого числа и, следовательно, к 0, если отношение <1.Приведите хотя бы один из операндов деления к числу с плавающей запятой, чтобы выполнить реальное деление с плавающей запятой: </p>

worldHeight = (int) (worldWidth * ((float)screenHeight / (float)screenWidth));
0 голосов
/ 05 октября 2011

Я нашел этот урок очень полезным по этой теме: http://developer.android.com/resources/tutorials/opengl/opengl-es10.html#projection-and-views

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...