Okay. I think this shows you how to do it in Java:

(from http://slick.javaunlimited.net/viewtopic.php?p=28303#p28303)


PolarizeShaderTest.java
Code:
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.opengl.shader.ShaderProgram;

public class PolarizeShaderTest extends BasicGame {

   public static void main(String[] args) throws SlickException {
      new AppGameContainer(new PolarizeShaderTest(), 800, 600, 
false).start();
   }
   
   public PolarizeShaderTest() {
      super("Polarize Test");
   }
   
   private ShaderProgram polarizeShader;
   private Image image;
   private boolean useShader, shaderSupported;
   
   private final String VERT = "testdata/shaders/pass.vert";
   private final String FRAG = "testdata/shaders/rect2polar.frag";
   
   @Override
   public void init(GameContainer container) throws SlickException {
      container.getGraphics().setBackground(Color.gray);
      
      //create a new image
      //Slick's images will use texture unit zero by default
      image = new Image("testdata/polar.png");
      
      //if shaders are supported...
      if (ShaderProgram.isSupported()) {
         try {
            //"Strict Mode" will throw errors if we try
            //to set a uniform that does not exist
            //or isn't used in the shader. For flexibility,
            //let's turn this off.
            ShaderProgram.setStrictMode(false);
            
            //We can conveniently load a program like so:
            polarizeShader = ShaderProgram.loadProgram(VERT, FRAG);
            
            //we have to set up the uniforms tex0, texOff and texSize 
            polarizeShader.bind();
            
            //this means we are sampling from our image
            polarizeShader.setUniform1i("tex0", 0);
            
            //we set up texOff/texSize to account for possible sub-regions
            //this allows us to use Image.getSubImage, or NPOT images
            float texW = image.getTextureWidth();
            float texH = image.getTextureHeight();
            float texX = image.getTextureOffsetX();
            float texY = image.getTextureOffsetY();
            polarizeShader.setUniform2f("texSize", texW, texH);
            polarizeShader.setUniform2f("texOff", texX, texY);
            
            //unbind the shader once we're done
            polarizeShader.unbind();
            
            //shader works.
            shaderSupported = true;
            useShader = true;
         } catch (SlickException e) {
            e.printStackTrace();
         }         
      }
   }
   
   @Override
   public void render(GameContainer container, Graphics g)
         throws SlickException {
      //activate the shader
      if (shaderSupported && useShader)
         polarizeShader.bind();
      
      //now anything we draw will use our polarize shader
      image.draw();
      
      //disable the shader
      if (shaderSupported && useShader)
         polarizeShader.unbind();
      
      String str = shaderSupported 
            ? "Press space to toggle shader"
            : "Shaders not supported!";
      g.drawString(str, 10, 20);
   }


   @Override
   public void update(GameContainer container, int delta)
         throws SlickException {
      if (container.getInput().isKeyPressed(Input.KEY_SPACE))
         useShader = !useShader;
   }
}


pass.vert
Code:
void main() {
   gl_TexCoord[0] = gl_MultiTexCoord0;
   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}


rect2polar.frag
Code:
#version 120

uniform sampler2D tex0;
uniform vec2 texOff;
uniform vec2 texSize;
const float PI = 3.14159265358979323846264;

void main(void) {
   vec2 texCoord = gl_TexCoord[0].st;

   //account for Slick's Image sub-regions (and NPOT images)
   texCoord = (texCoord-texOff)/texSize;
   
   //rectangular to polar filter
   vec2 norm = (1.0 - texCoord) * 2.0 - 1.0;
   float theta = PI + atan(norm.x, norm.y);
   float r = length(norm);
   vec2 polar = 1.0 - vec2(theta/(2.0*PI), r);

   //sample the texture using the new coordinates
   vec4 color = texture2D(tex0, (polar+texOff)*texSize);
   gl_FragColor = color;
}



On Monday, December 3, 2012 1:15:30 PM UTC-6, djhacktor wrote:
>
> @bob its difficult to understand this logic m short of time can you pls 
> give me android specific project or class file that will be appreciated 
> thanks
>
> On Tuesday, 4 December 2012 00:11:18 UTC+5:30, bob wrote:
>>
>> You will want to see the source code to the GIMP's polar coordinate 
>> filter.
>>
>>
>> Here's a little bit:
>>
>>
>>   if (pcvals.polrec)
>>
>>     {
>>
>>       if (wx >= cen_x)
>>
>>         {
>>
>>           if (wy > cen_y)
>>
>>             {
>>
>>               phi = G_PI - atan (((double)(wx - cen_x))/
>>
>>                                  ((double)(wy - cen_y)));
>>
>>             }
>>
>>           else if (wy < cen_y)
>>
>>             {
>>
>>               phi = atan (((double)(wx - cen_x))/((double)(cen_y - wy)));
>>
>>             }
>>
>>           else
>>
>>             {
>>
>>               phi = G_PI / 2;
>>
>>             }
>>
>>         }
>>
>>       else if (wx < cen_x)
>>
>>         {
>>
>>           if (wy < cen_y)
>>
>>             {
>>
>>               phi = 2 * G_PI - atan (((double)(cen_x -wx)) /
>>
>>                                      ((double)(cen_y - wy)));
>>
>>             }
>>
>>           else if (wy > cen_y)
>>
>>             {
>>
>>               phi = G_PI + atan (((double)(cen_x - wx))/
>>
>>                                  ((double)(wy - cen_y)));
>>
>>             }
>>
>>           else
>>
>>             {
>>
>>               phi = 1.5 * G_PI;
>>
>>             }
>>
>>         }
>>
>>
>>       r = sqrt (SQR (wx - cen_x) + SQR (wy - cen_y));
>>
>> On Monday, December 3, 2012 11:49:20 AM UTC-6, djhacktor wrote:
>>>
>>> thank for reply can you give me some sample code it will be great help 
>>>
>>> On Monday, 3 December 2012 21:06:28 UTC+5:30, bob wrote:
>>>>
>>>> Here's a sample of how it might 
>>>> look:<https://lh5.googleusercontent.com/-JcHGjFm_o5M/ULzG2CfgerI/AAAAAAAAAJM/xaBMEZoV3og/s1600/polar3.png>
>>>>
>>>>
>>>> On Monday, December 3, 2012 12:15:23 AM UTC-6, djhacktor wrote:
>>>>>
>>>>> Hi can any one tell me how to make seek bar in circular shape ?? is 
>>>>> there any example ??
>>>>
>>>>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to