Android OpenGL circle(sphere) look like ellipse .. no projection/camera -


enter image description here

also attached screen shot device, can u pls me resolving issue... android kitkat version

public class balloon {     private final string vertexshadercode =             // matrix member variable provides hook manipulate             // coordinates of objects use vertex shader                     "attribute vec4 vposition;" +                     "void main() {" +                     "gl_pointsize = 5.0;                  "+                     "  gl_position =  vposition;" +                     "}";      private final string fragmentshadercode =             "precision mediump float;" +                     "uniform vec4 vcolor;" +                     "void main() {" +                     "  gl_fragcolor = vcolor;" +                     "}";      private floatbuffer vertexbuffer;     private final int mprogram;     private int mpositionhandle;     private int mcolorhandle;     private int mmvpmatrixhandle;      private float[] data = new float[126];      // number of coordinates per vertex in array     static final int coords_per_vertex = 3;      private final int vertexstride = coords_per_vertex * 4; // 4 bytes per vertex      float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 0.0f };      /**      * sets drawing object data use in opengl es context.      */     public balloon() {          // prepare shaders , opengl program         int vertexshader = myglrenderer.loadshader(                 gles20.gl_vertex_shader, vertexshadercode);         int fragmentshader = myglrenderer.loadshader(                 gles20.gl_fragment_shader, fragmentshadercode);          mprogram = gles20.glcreateprogram();                      // create empty opengl program         gles20.glattachshader(mprogram, vertexshader);            // add vertex shader program         gles20.glattachshader(mprogram, fragmentshader);          // add fragment shader program         gles20.gllinkprogram(mprogram);                          // create opengl program executables      }      private void fillballoon(float x1,float y1,float r1)     {         int i=0,j=0;         float angle = 0;          float twicepi = (float)2.0 * (float)3.1415926;           float angle_stepsize = 0.1f;          // go through angles 0 2 * pi radians         for(;angle < twicepi;angle = (angle + angle_stepsize))         {             // calculate x, y vector known length , angle             data[j++] = x1 + r1 * (float)math.cos(angle);             data[j++] = y1 + r1 * (float)math.sin(angle);          }          // initialize vertex byte buffer shape coordinates         bytebuffer bb = bytebuffer.allocatedirect(                 // (number of coordinate values * 4 bytes per float)                 j * 4);         // use device hardware's native byte order         bb.order(byteorder.nativeorder());          // create floating point buffer bytebuffer         vertexbuffer = bb.asfloatbuffer();         // add coordinates floatbuffer         vertexbuffer.put(data);         // set buffer read first coordinate         vertexbuffer.position(0);      }       /**      * encapsulates opengl es instructions drawing shape.      *      */     public void draw() {         // add program opengl environment         gles20.gluseprogram(mprogram);          float posx = 0.0f,posy = 0.0f,radius =0.2f;          fillballoon(posx, posy, radius);          // handle vertex shader's vposition member         mpositionhandle =                  gles20.glgetattriblocation(mprogram,"vposition");          // enable handle triangle vertices         gles20.glenablevertexattribarray(mpositionhandle);          // prepare balloon coordinate data          gles20.glvertexattribpointer(mpositionhandle, 2, gles20.gl_float, false, 0, vertexbuffer);          // handle fragment shader's vcolor member         mcolorhandle = gles20.glgetuniformlocation(mprogram, "vcolor");          // set color drawing triangle         gles20.gluniform4fv(mcolorhandle, 1, color, 0);         myglrenderer.checkglerror("mcolorhandle");           gles20.gldrawarrays(gles20.gl_triangle_fan, 0, 63);          // disable vertex array         gles20.gldisablevertexattribarray(mpositionhandle);     } } 

also attached screen shot device, can u pls me resolving issue... android kitkat version

this expected behavior. default coordinate system opengl [-1, 1] in every axis. means left point have x=-1, rightmost x=1, topmost y=1 , bottommost y=-1. depending on screen ratio result have same stretched ratio.

it handle scene draw shape please. 1 way scale vertex data when generating them discourage model vertex data should meant be. way create square surface view limits drawing surface not best approach again. yet way use viewport , set rectangle within want draw shape in may ok need remember set full width , height. , there matrices...

use matrix define coordinate system. 2d best method use ortho uses border parameters (left, top, bottom, right) may set whatever want. instance may use view coordinates (left = 0, right = viewwidth, top = 0, bottom = viewheight) or normalize system around 0 , choose border should have value of 1.0: horizontal normalization have (left = -1, right = 1, top = viewheight/viewwidth, bottom = -viewheight/viewwidth) , vertical (left = -viewwidth/viewheight, right = viewwidth/viewheight, top = 1.0, bottom = -1.0).


Comments