[android-developers] Re: Opengl ES scaling (zoom out) shows rare square tiles on my textures. How to avoid it?

2012-04-23 Thread saex
I tryed it, it is not the solution

El sábado, 21 de abril de 2012 20:23:26 UTC+2, Nightwolf escribió:

 Change zNear and zFar parameters in GLU.gluPerspective(gl, 45.0f, 
 (float)width / (float)height, 0.1f, 100.0f) to 1 and 1000.
 If it helps then your square is near far clipping plane.

 пятница, 20 апреля 2012 г., 19:41:54 UTC+4 пользователь saex написал:

 Hi

 I'm displaying a OPENGL ES 1.X square with a texture, and the user can 
 zoom in and out the square scaling it.

 When the user zoom's out the square (the square get's scaled going 
 smaller in the screen) the texture of the square get's rare translucent 
 squares, like tiles from googlemaps.

 I think that the scaling function from OpenGL is now working in the 
 better way.

 How can i improve it?

 These are my OpenGL GLSurfaceView main functions:

 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
 gl.glDisable(GL10.GL_DITHER);   //dithering OFF
 gl.glEnable(GL10.GL_TEXTURE_2D);//Texture Mapping ON
 gl.glShadeModel(GL10.GL_SMOOTH);//Smooth Shading 
 gl.glClearDepthf(1.0f); //Depth Buffer Setup
 gl.glEnable(GL10.GL_DEPTH_TEST);//Depth Testing ON
 gl.glDepthFunc(GL10.GL_LEQUAL);
 gl.glClearColor(0,0,0,0);   //fondo transparente
 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);  


 //Cargamos la textura del cubo. 
 for (int i=0;isquares.size();i++){ 
 if (squares.get(i)!=null)
 squares.get(i).loadGLTexture(gl, context);
 }
 }

 public void onDrawFrame(GL10 gl) {  
 //Limpiamos pantalla y Depth Buffer
 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
 gl.glLoadIdentity();

 mg.getCurrentProjection(gl); //volvemos a generar las matrices por 
 que es un bucle
 mg.getCurrentModelView(gl); 
 .
 .
 .
 .
 gl.glTranslatef(X, Y, Z); //Move z units into the screen
 gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f); //Z   
 gl.glScalef(scale, scale, 1.0f);

 for (int i=0;isquares.size();i++){
 if (squares.get(i)!=null)
 squares.get(i).draw(gl); //Draw the Cube
 }
 }

 public void onSurfaceChanged(GL10 gl, int width, int height) {
 if(height == 0) {   //Prevent A Divide By Zero By
 height = 1; //Making Height Equal One
 }

 gl.glViewport(0, 0, width, height); //Reset The Current Viewport
 gl.glMatrixMode(GL10.GL_PROJECTION);//Select The Projection 
 Matrix
 gl.glLoadIdentity();//Reset The Projection Matrix

 //Calculate The Aspect Ratio Of The Window
 GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 
 100.0f);

 gl.glMatrixMode(GL10.GL_MODELVIEW); //Select The Modelview Matrix
 gl.glLoadIdentity();//Reset The Modelview Matrix 

 }

 and these are my square polygon class main functions:

 public void draw(GL10 gl) { 
 gl.glFrontFace(GL10.GL_CCW);
 //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);
 }

 //Carga de texturas
 public void loadGLTexture(GL10 gl, Context context) {   
 //Generamos un puntero de texturas
 gl.glDeleteTextures(1, textures, 0); //libero memoria
 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 posibles GL10.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); 

 //Usamos Android GLUtils para espcificar una textura de 2 dimensiones 
 para nuestro bitmap
 GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

 //Checkeamos si el GL context es versión 1.1 y generamos los Mipmaps por 
 Flag. 

[android-developers] Re: Opengl ES scaling (zoom out) shows rare square tiles on my textures. How to avoid it?

2012-04-21 Thread Alexander Mikhnin
Change zNear and zFar parameters in GLU.gluPerspective(gl, 45.0f, 
(float)width / (float)height, 0.1f, 100.0f) to 1 and 1000.
If it helps then your square is near far clipping plane.

пятница, 20 апреля 2012 г., 19:41:54 UTC+4 пользователь saex написал:

 Hi

 I'm displaying a OPENGL ES 1.X square with a texture, and the user can 
 zoom in and out the square scaling it.

 When the user zoom's out the square (the square get's scaled going smaller 
 in the screen) the texture of the square get's rare translucent squares, 
 like tiles from googlemaps.

 I think that the scaling function from OpenGL is now working in the better 
 way.

 How can i improve it?

 These are my OpenGL GLSurfaceView main functions:

 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
 gl.glDisable(GL10.GL_DITHER);   //dithering OFF
 gl.glEnable(GL10.GL_TEXTURE_2D);//Texture Mapping ON
 gl.glShadeModel(GL10.GL_SMOOTH);//Smooth Shading 
 gl.glClearDepthf(1.0f); //Depth Buffer Setup
 gl.glEnable(GL10.GL_DEPTH_TEST);//Depth Testing ON
 gl.glDepthFunc(GL10.GL_LEQUAL);
 gl.glClearColor(0,0,0,0);   //fondo transparente
 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);   
   

 //Cargamos la textura del cubo. 
 for (int i=0;isquares.size();i++){ 
 if (squares.get(i)!=null)
 squares.get(i).loadGLTexture(gl, context);
 }
 }

 public void onDrawFrame(GL10 gl) {  
 //Limpiamos pantalla y Depth Buffer
 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
 gl.glLoadIdentity();

 mg.getCurrentProjection(gl); //volvemos a generar las matrices por 
 que es un bucle
 mg.getCurrentModelView(gl); 
 .
 .
 .
 .
 gl.glTranslatef(X, Y, Z); //Move z units into the screen
 gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f); //Z   
 gl.glScalef(scale, scale, 1.0f);

 for (int i=0;isquares.size();i++){
 if (squares.get(i)!=null)
 squares.get(i).draw(gl); //Draw the Cube
 }
 }

 public void onSurfaceChanged(GL10 gl, int width, int height) {
 if(height == 0) {   //Prevent A Divide By Zero By
 height = 1; //Making Height Equal One
 }

 gl.glViewport(0, 0, width, height); //Reset The Current Viewport
 gl.glMatrixMode(GL10.GL_PROJECTION);//Select The Projection Matrix
 gl.glLoadIdentity();//Reset The Projection Matrix

 //Calculate The Aspect Ratio Of The Window
 GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 
 100.0f);

 gl.glMatrixMode(GL10.GL_MODELVIEW); //Select The Modelview Matrix
 gl.glLoadIdentity();//Reset The Modelview Matrix  
   
 }

 and these are my square polygon class main functions:

 public void draw(GL10 gl) { 
 gl.glFrontFace(GL10.GL_CCW);
 //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);
 }

 //Carga de texturas
 public void loadGLTexture(GL10 gl, Context context) {   
 //Generamos un puntero de texturas
 gl.glDeleteTextures(1, textures, 0); //libero memoria
 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 posibles GL10.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); 

 //Usamos Android GLUtils para espcificar una textura de 2 dimensiones 
 para nuestro bitmap
 GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

 //Checkeamos si el GL context es versión 1.1 y generamos los Mipmaps por 
 Flag. Si no, llamamos a nuestra propia implementación
 if(gl instanceof GL11) {