Moving text around the circle

Hi guys help please…i have a code below that supposedly move the text around the circle but im not sure if that is the right way to do it as it leaves the previous text from the previous position visible which is not supposed to be the case. Any help please…Thanks in advance!


package lesson1;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author bubz
 */
import java.awt.*;
// JOGL: OpenGL functions
import net.java.games.jogl.*;
import net.java.games.jogl.util.*;
import java.awt.event.*;

public class ShowName extends Frame implements GLEventListener
{
    static int HEIGHT = 600, WIDTH = 600;
    int rCircle = 200;
    double numAngle = .01;
    int xMiddle, yMiddle;
    int CurXCoor, CurYCoor;
    GLUT glut = new GLUT();
    static GL gl; //interface to OpenGL
    static GL glname;

    static GLCanvas canvas; // drawable in a frame
    static GLCanvas canvasName;

    GLCapabilities capabilities; // OpenGL capabilities
    GLCapabilities capabilitiesName;
    static Animator animator;
    static float cVdata[][] = { {1.0f, 0.0f, 0.0f}
    , {0.0f, 1.0f, 0.0f}
    , {-1.0f, 0.0f, 0.0f}
    , {0.0f, -1.0f, 0.0f}
    };
    
    public ShowName()
    {
        //1. specify a drawable: canvas
        capabilities = new GLCapabilities();
        
        canvas =  GLDrawableFactory.getFactory().createGLCanvas(capabilities);
        //canvasName = GLDrawableFactory.getFactory().createGLCanvas(capabilitiesName);

        //2. listen to the events related to canvas: reshape
        canvas.addGLEventListener(this);
        
        //3. add the canvas to fill the Frame container
        add(canvas, BorderLayout.CENTER);
        
        gl = canvas.getGL();
        glname = canvas.getGL();
        
        capabilities.setDoubleBuffered(true);

        
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {               
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] args)
    {
        ShowName frame = new ShowName();        
        //4. set the size of the frame and make it visible
        frame.setTitle("Show My Name");
        frame.setSize(WIDTH, HEIGHT);
        frame.setVisible(true);
        //Thread.currentThread().interrupt();
    }

    public void init(GLDrawable drawable)
    {
        animator = new Animator(canvas);
        animator.start(); // start animator thread
    }

    public void display(GLDrawable drawable)
    {
        CurXCoor = (int)(rCircle * Math.cos(numAngle));
        CurYCoor = (int)(rCircle * Math.sin(numAngle));

        glname.glColor3f(1, 1, 1);
        glname.glMatrixMode(GL.GL_PROJECTION);
        glname.glLoadIdentity();
        glname.glOrtho(0, WIDTH, 0, HEIGHT, -1.0, 1.0);

        //gl.glPushMatrix();
        glname.glTranslatef((CurXCoor + xMiddle), (CurYCoor + yMiddle), 0); // end position
        glname.glScalef(0.2f, 0.2f, 0.2f);
        //glut.glutStrokeCharacter(glname, GLUT.STROKE_ROMAN, 'B');
        glut.glutStrokeString(glname, GLUT.STROKE_ROMAN, "Bubz");
        //gl.glClear(GL.GL_COLOR_BUFFER_BIT);
        //gl.glPopMatrix();

        numAngle += .01;

        if(numAngle == 360)
            numAngle = 0;

        try
        {
            Thread.sleep(10);
        }
        catch (Exception ignore){}
                
    }

    public void displayChanged(GLDrawable drawable, boolean modeChanged,boolean deviceChanged)
    {
        
    }
    
    public void reshape(GLDrawable drawable, int x, int y, int w, int h)
    {
        WIDTH = w;
        HEIGHT = h;
        
        xMiddle = WIDTH/2;
        yMiddle = HEIGHT/2;
        
        //3. origin at the center of the drawing area
        gl.glColor3f(1.0f, 0.0f, 0.0f);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrtho(-w/2, w/2, -h/2, h/2, -1, 1);
        drawCircle(rCircle, 12);
    }

    // subdivide a triangle recursively, and draw them
    private void subdivideCircle(int radius, float[] v1, float[] v2, int depth)
    {
        float v11[] = new float[3];
        float v22[] = new float[3];
        float v00[] = {0, 0, 0};
        float v12[] = new float[3];
        if (depth==0)
        {
            //5. specify a color related to triangle location
            //gl.glColor3f(v1[0]*v1[0], v1[1]*v1[1], v1[2]*v1[2]);
            gl.glColor3f(1.0f, 0.0f, 0.0f);
            for (int i = 0; i<3; i++)
            {
                v11[i] = v1[i]*radius;
                v22[i] = v2[i]*radius;
            }
            drawtriangle(v11, v22, v00);
            return;
        }
        v12[0] = v1[0]+v2[0];
        v12[1] = v1[1]+v2[1];
        v12[2] = v1[2]+v2[2];
        normalize(v12);
        // subdivide a triangle recursively, and draw them
        subdivideCircle(radius, v1, v12, depth-1);
        subdivideCircle(radius, v12, v2, depth-1);
    }

    // draw a circle with center at the origin in xy plane
    public void drawCircle(int cRadius, int depth)
    {
        subdivideCircle(cRadius, cVdata[0], cVdata[1], depth);
        subdivideCircle(cRadius, cVdata[1], cVdata[2], depth);
        subdivideCircle(cRadius, cVdata[2], cVdata[3], depth);
        subdivideCircle(cRadius, cVdata[3], cVdata[0], depth);
    }

    // normalize a 3D vector
    public void normalize(float vector[])
    {
        float d = (float)Math.sqrt(vector[0]*vector[0]
        +vector[1]*vector[1] + vector[2]*vector[2]);
        if (d==0)
        {
            System.out.println("0 length vector: normalize().");
            return;
        }
        vector[0] /= d;
        vector[1] /= d;
        vector[2] /= d;
    }

    public void drawtriangle(float[] v1, float[] v2, float[] v3)
    {
        gl.glBegin(GL.GL_TRIANGLES);
        gl.glVertex3fv(v1);
        gl.glVertex3fv(v2);
        gl.glVertex3fv(v3);
        gl.glEnd();
    }
}

 


Uncomment the glClear call and move it up to before you draw the stuff you care about.

On a more general note, you shouldn’t store the GL variables outside of one of the GLEventListener methods. The GL instances can change under certain situations, and they should only be used within those methods anyway. I recommend removing the declarations of gl and glname. In each GLEventListener method, just get the always correct GL by calling drawable.getGL().