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
Post a Comment