Implementacja modelu z AWT do JOGL

0

Witam,

Mam program napisany w Java z użyciem AWT i chcę go zaimplementować JOGL, jednak nie miałem do czynienia z OpenGl i nie do końca wiem co jest źle. W awt rysuje mi dobrze, jednak nie wiem jak ugryźć tutaj awt. Problem polega na tym, że nic nie wyświetla się na ekranie gdy utworzyłem pętle taką jak w programie pod awt.

public static void main(String[] args)  {
        GLProfile profile = GLProfile.get(GLProfile.GL2);
        GLCapabilities capabilities = new GLCapabilities(profile);
         
        GLCanvas canvas = new GLCanvas(capabilities);
        FluidSim_JOGL app = new FluidSim_JOGL();
     
        canvas.addGLEventListener(app);
        canvas.setSize(width, height);
        
        JFrame frame = new JFrame("Sim");
        //final FPSAnimator anime = new FPSAnimator(canvas, FPS, true);
        // ustawienia ekranu
        frame.getContentPane().add(canvas);
        frame.setSize(width, height);
        frame.setVisible(true);
        
        
        Animator anime = new Animator();
        anime.add(canvas);
        anime.start();
        
        System.out.println("Wykonał się MAIN");
    }
    
  
    @Override
    public void display(GLAutoDrawable drawable) {
        frameCount++;
        //System.out.println(frameCount);
        final GL2 gl = drawable.getGL().getGL2();

        if(frameCount<700)
        //System.out.println("Petla");
        {
          if(frameCount%50==0 || frameCount%25==0) 
          {  
            //System.out.println("Zachodzi dragged");
            xOld = x;
            yOld = y;
            x = x+d/n;
            y = y+h/n;
            updateLocation_();     
          }

          xOld = x;
          yOld = y;
          x = (int) generator.nextInt(d);
          y = (int) generator.nextInt(h);
          updateLocation_();
        }
        
        fs.velocitySolver();
        fs.densitySolver();
        
        for (int i = 1; i <= n; i++)
        {
            // x position of current cell
            dx = (int)( (i - 0.5f) * dg );
            for (int j = 1; j <= n; j++)
            {
                // y position of current cell
                dy = (int)( (j - 0.5f) * dh );

                // draw density
                if (fs.d[I(i, j)] > 0)
                {
                    c = (int) ( (1.0 - fs.d[I(i, j)]) * 255);
                    a = (int) ( (0.0 - fs.d[I(i, j)]) * 255);
                    b = (int) ( (0.5 - fs.d[I(i, j)]) * 255);
                    if (c < 0) c = 0;
                    if (a < 0) a = 0;
                    if (b < 0) b = 0;
                    //big.setColor(new Color(c, a, b));
                    //big.fillRect(dx-dg_2, dy-dh_2, dg, dh);
                    gl.glColor3i(c, a, b);
                    gl.glBegin(GL2.GL_QUADS);
                    //System.out.println("Poczatek rysowania");
                    gl.glVertex2f( 0.0f,0.75f);
                    gl.glVertex2f(-0.75f,0f);
                    gl.glVertex2f(0f,-0.75f);
                    gl.glVertex2f(0.75f,0f);   
                    gl.glEnd();

                    gl.glFlush();
                }

            }
        }
        
   }
    
    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        System.out.println("Wykonał się RESHAPE");
    } 
    @Override
   public void dispose(GLAutoDrawable drawable) {
      System.out.println("Wykonał się DISPOSET");
   }
            
   @Override
   public void init(GLAutoDrawable drawable) {
       System.out.println("Wykonał się INIT");
        reset();   
       //drawable.getGL().setSwapInterval(1);
       }

Czy ktoś mógłby mi doradzić w czym tkwi problem lub co powinienem dodać?
Dodam, że gdy zakomentuję całą pętle w main i wyciągne tylko funckej rysujące to działa.

Dzięki za pomocą.

0

Poprawiłem swój kod, troche przeanalizowałem i już wiem czemu nie działa. Ale mam pytanie, jak zrobić żeby kolor mógł się zmieniać w zależności od obliczeń na przykład w solverze?

Mam poniższy prosty program i chciałbym żeby dany prostokąt zmieniał swój kolor w animacji:

 import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.*;

public class FluidSim_JOGL implements GLEventListener {

    static int width =400;
    static int height=400;
        int c=0;
       int a=0;
       int b=127;
       int x=0;
       
   @Override
    public void display(GLAutoDrawable drawable) {
        update();
        GL2 gl = drawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
        gl.glColor3f(c,a,b );
        gl.glRecti(x,0,200,400);
    }

   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
       System.out.println("DISPOSE");
   }
   
   @Override
   public void init(GLAutoDrawable drawable) {
       final GL2 gl = drawable.getGL().getGL2();
       //gl.glClearColor(12,2,0,0);
       drawable.getGL().setSwapInterval(1);
       gl.glMatrixMode(gl.GL_PROJECTION);
       gl.glLoadIdentity ();
       gl.glOrtho(0,width,height,0,0,1);
       System.out.println("INIT");
   }
   
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
        //final GL2 gl = arg0.getGL().getGL2(); 
        System.out.println("RESHAPE");
   }
   
   public static void main(String[] args) {
       GLProfile glp = GLProfile.getDefault();
        GLCapabilities caps = new GLCapabilities(glp);
        GLCanvas canvas = new GLCanvas(caps);

        Frame frame = new Frame("AWT Window Test");
        frame.setSize(300, 300);
        frame.add(canvas);
        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        canvas.addGLEventListener(new FluidSim_JOGL());
        FPSAnimator animator = new FPSAnimator(canvas, 100);
        animator.start();
   }
   
	private void update() {
        //x+=1;
        c+=1;
        //System.out.println("Update");
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1