使用opengl在android中缩放和滚动图像的纹理

时间:2011-04-19 06:46:56

标签: android scroll textures zooming

我想在doubleTap中缩放图像,使其平滑滚动,请帮助我,我的绘制方法如下:

public void draw(GL10 gl) {
    // bind the previously generated texture        
//zooming in  image
    if(Globalconfig.flag==1 && Globalconfig.flag2==true){
        currentVertex=0;
        Globalconfig.b_height=texture.length;
        //Log.d("length",""+Globalconfig.b_height);
        gl.glViewport(0, 0, 444, 555);
        gl.glOrthof(0.0f, 444, 0.0f,555, -0.1f, 0.1f);
        for (int y = 0; y < 10+ 1; y++) {
            for (int x = 0; x <10 + 1; x++) {
                //vertices[currentVertex]=vertices[currentVertex]*1.5f;
                //vertices[currentVertex+1]=vertices[currentVertex+1]*1.5f;
                texture[currentVertex]/=1.5f;
                texture[currentVertex+1]/=1.5f;
                currentVertex +=2;
            }
        }

        Globalconfig.flag2=false;
        Log.d("instextureBufferide for", "nhjfghfx" );
                    //vertexBuffer.put(vertices);
        //vertexBuffer.position(0);
        textureBuffer.put(texture);
        textureBuffer.position(0);
} 
//zooming out  image
    //gl.glTranslatef(0,0 , 3);
    if(Globalconfig.flag==2 && Globalconfig.flag2==true){
        currentVertex=0;
        for (int y = 0; y <10 + 1; y++) {
            for (int x = 0; x <10 + 1; x++) {
                //vertices[currentVertex]=vertices[currentVertex]/3.5f;
                //vertices[currentVertex+1]=vertices[currentVertex+1]/3.5f;
                texture[currentVertex]*=1.5f;
                texture[currentVertex+1]*=1.5f;
                currentVertex +=2;
            }
        }
        transtaleT=false;
        Globalconfig.flag2=false;
        Log.d("inside for2", "nhjfghfx" );
        //vertexBuffer.put(vertices);
        //vertexBuffer.position(0);
        textureBuffer.put(texture);
        textureBuffer.position(0);
    }       
    if(Globalconfig.transFlag==true && Globalconfig.flag==1  ){
        currentVertex=0;
        for (int y = 0; y < 10+ 1; y++) {
            for (int x = 0; x <10 + 1; x++) {
                //vertices[currentVertex]=vertices[currentVertex]*3.5f;
                //vertices[currentVertex+1]=vertices[currentVertex+1]*3.5f;
                texture[currentVertex]+=Globalconfig.x/1000 ;
                texture[currentVertex+1]+=Globalconfig.y/1000;
                currentVertex +=2;
                Globalconfig.x1=(int)Globalconfig.x;
                Globalconfig.y1=(int)Globalconfig.y;
            }
        }
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);
        Log.d("trans", "kjgvgv");
        Globalconfig.transFlag=false;

        Log.d("trans1", "kjgvgv");
    }

    //gl.glViewport(50, 50, 200, 200); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    // Point to our buffers
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    // Set the face rotation
    gl.glFrontFace(GL10.GL_CW);
    // Enable face culling.
    gl.glEnable(GL10.GL_CULL_FACE);
    // What faces to remove with the face culling.
        gl.glCullFace(GL10.GL_CONSTANT_ATTENUATION);
    // Point to our vertex buffer
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D,
            GL10.GL_TEXTURE_WRAP_T,
            GL10.GL_REPEAT );
    // Draw the vertices as triangle strip
    //gl.glTranslatef(0, 0, -4);
    //gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
    gl.glDrawElements(GL10.GL_TRIANGLES, numOfIndices,
            GL10.GL_UNSIGNED_SHORT, indicesBuffer);
    //Disable the client state before leaving
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}

0 个答案:

没有答案