android-如何使多边形填充屏幕宽度的80%?

android-如何使多边形填充屏幕宽度的80%?,第1张

概述我有一个简单的正方形(多边形),我希望它填充80%的屏幕的宽度换句话说,我想将正方形放在屏幕中心,但宽度为总宽度的80%屏幕的我该怎么做?我找不到有关此的示例/教程谢谢这是我的方块的代码:publicclassSquare{//BufferdeverticesprivateFloatBuffer

我有一个简单的正方形(多边形),我希望它填充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%?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1073017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存