我有一个简单的正方形(多边形),我希望它填充80%的
屏幕的宽度
换句话说,我想将正方形放在
屏幕中心,但宽度为总宽度的80%
屏幕的
我该怎么做?我找不到有关此的示例/教程
谢谢
这是我的方块的代码:
public class Square { //Buffer de vertices private floatBuffer vertexBuffer; //Buffer de coordenadas de texturas private floatBuffer textureBuffer; //Puntero de texturas private int[] textures = new int[3]; //El item a representar private int resourceID; //Definición de vertices private float vertices[] = { -1.0f, -1.0f, 0.0f, //Bottom left 1.0f, -1.0f, 0.0f, //Bottom Right -1.0f, 1.0f, 0.0f, //top left 1.0f, 1.0f, 0.0f //top Right }; //Coordenadas (u, v) de las texturas /* private float texture[] = { //MapPing coordinates for the vertices 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f }; */ private float texture[] = { //MapPing coordinates for the vertices 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f }; //Inicializamos los buffers public Square(int resourceID) { ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length *4); byteBuf.order(ByteOrder.nativeOrder()); vertexBuffer = byteBuf.asfloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(texture.length * 4); byteBuf.order(ByteOrder.nativeOrder()); textureBuffer = byteBuf.asfloatBuffer(); textureBuffer.put(texture); textureBuffer.position(0); this.resourceID=resourceID; } //Funcion de dibujado public voID draw(GL10 gl) { gl.glFrontFace(GL10.GL_ccw); //gl.glEnable(GL10.GL_BLEND); //Bind our only prevIoUsly generated texture in this case gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); //Point to our vertex buffer gl.glVertexPointer(3, GL10.GL_float, 0, vertexBuffer); gl.glTexCoordPointer(2, GL10.GL_float, 0, textureBuffer); //Enable vertex buffer gl.glEnableClIEntState(GL10.GL_VERTEX_ARRAY); gl.glEnableClIEntState(GL10.GL_TEXTURE_COORD_ARRAY); //Draw the vertices as triangle strip gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3); //disable the clIEnt state before leaving gl.gldisableClIEntState(GL10.GL_VERTEX_ARRAY); gl.gldisableClIEntState(GL10.GL_TEXTURE_COORD_ARRAY); //gl.gldisable(GL10.GL_BLEND); } //Carga de texturas public voID loadGLTexture(GL10 gl, Context context) { //Generamos un puntero de texturas gl.glGenTextures(1, textures, 0); //y se lo asignamos a nuestro array gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); //Creamos filtros de texturas gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_liNEAR); //Diferentes parametros de textura posiblesGL10.GL_CLAMP_TO_EDGE gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,GL10.GL_REPEAT); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,GL10.GL_REPEAT); /* String imagePath = "radiocd5.png"; AssetManager mngr = context.getAssets(); inputStream is=null; try { is = mngr.open(imagePath); } catch (IOException e1) { e1.printstacktrace(); } */ //Get the texture from the AndroID resource directory inputStream is=null; /* if (item.equals("rim")) is =context.getResources().openRawResource(R.drawable.rueda); else if (item.equals("selector")) is =context.getResources().openRawResource(R.drawable.selector); */ is = context.getResources().openRawResource(resourceID); Bitmap bitmap = null; try { bitmap = BitmapFactory.decodeStream(is); } finally { try { is.close(); is = null; } catch (IOException e) { } } //con el siguIEnte código redimensionamos las imágenes que seanmas grandes de 256x256. int newW=bitmap.getWIDth(); int newH=bitmap.getHeight(); float fact; if (newH>256 || newW>256) { if (newH>256) { fact=(float)255/(float)newH; //porcentaje por el quemultiplicar para ser tamaño 256 newH=(int)(newH*fact); //altura reducIDa al porcentajenecesario newW=(int)(newW*fact); //anchura reducIDa al porcentajenecesario } if (newW>256) { fact=(float)255/(float)newW; //porcentaje por el quemultiplicar para ser tamaño 256 newH=(int)(newH*fact); //altura reducIDa al porcentajenecesario newW=(int)(newW*fact); //anchura reducIDa al porcentajenecesario } bitmap=Bitmap.createScaledBitmap(bitmap, newW, newH, true); } //con el siguIEnte código transformamos imágenes no potencia de2 en imágenes potencia de 2 (pot) //meto el bitmap nopOT en un bitmap POT para que no aparezcantexturas blancas. int nextpot=256; int h = bitmap.getHeight(); int w = bitmap.getWIDth(); int offx=(nextpot-w)/2; //distancia respecto a la izquIErda,para que la imagen quede cenTrada en la nueva imagen POT int offy=(nextpot-h)/2; //distancia respecto a arriba, para quela imagen quede cenTrada en la nueva imagen POT Bitmap bitmap2 = Bitmap.createBitmap(nextpot, nextpot,Bitmap.Config.ARGB_8888); //crea un bitmap transparente gracias alARGB_8888 Canvas comboImage = new Canvas(bitmap2); comboImage.drawBitmap(bitmap, offx, offy, null); comboImage.save(); //Usamos AndroID glutils para espcificar una textura de 2dimensiones para nuestro bitmap glutils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap2, 0); //Checkeamos si el GL context es versión 1.1 y generamos losMipmaps por Flag. Si no, llamamos a nuestra propia implementación if(gl instanceof GL11) { gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP,GL11.GL_TRUE); glutils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap2, 0); } else { buildMipmap(gl, bitmap2); } //limpiamos los bitmaps bitmap.recycle(); bitmap2.recycle(); } //Nuestra implementación de MipMap. Escalamos el bitmap originalhacia abajo por factor de 2 y lo asignamos como nuevo nivel de mipmap private voID buildMipmap(GL10 gl, Bitmap bitmap) { int level = 0; int height = bitmap.getHeight(); int wIDth = bitmap.getWIDth(); while(height >= 1 || wIDth >= 1) { glutils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0); if(height == 1 || wIDth == 1) { break; } leveL++; height /= 2; wIDth /= 2; Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, wIDth,height, true); bitmap.recycle(); bitmap = bitmap2; } } }
解决方法:
使用允许您按比例显示视口的投影.像这样:
glMatrixMode(GL_PROJECTION);glLoadIDentity()glOrtho(0, 1, 0, 1, -1, 1);glMatrixMode(GL_MODELVIEW);glLoadIDentity();
现在,您的OpenGL坐标将[0,1]²范围映射到屏幕. x坐标中80%的宽度为0.8.
总结以上是内存溢出为你收集整理的android-如何使多边形填充屏幕宽度的80%?全部内容,希望文章能够帮你解决android-如何使多边形填充屏幕宽度的80%?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)