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ą.
<code=java></code>
.