pydi Skrevet 13. mars 2006 Del Skrevet 13. mars 2006 har problemer med view'en min på et program jeg lager, virker som om eg har satt opp gluPerspectiven feil, skulle gjerne ha hatt lenger distanse til tetrahedonet. Men når jeg endrer på near og far clipping plane forsvinner figuren. Noen tips hadde vært trivelig. Kildekode: import static net.java.games.jogl.GL.*; import static net.java.games.jogl.GLU.*; import net.java.games.jogl.*; import javax.swing.*; import java.awt.event.*; /** * Edward Angel's cube.c ported to java. * Click the + to increase speed, - do decrease speed and p to pause/unpause * The methods {@link #init}, {@link #reshape}, {@link #display} and {@link #displayChanged} * implement methods in the interface {@link net.java.games.jogl.GLEventListener}. * Visit the JOGL web site for details and documentation: * <a href="https://jogl.dev.java.net/">https://jogl.dev.java.net/</a>. */ public class Tetrahedon implements GLEventListener { private float vertices[][] = { /*Tetrahedon 1*/ {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 1.0f}}; /*Fargene*/ private float colors[][] = { {0.0f, 0.0f, 0.0f}, //black {1.0f, 0.0f, 0.0f}, //red {1.0f, 1.0f, 0.0f}, //yellow {0.0f, 1.0f, 0.0f}, //green {0.0f, 0.0f, 1.0f}, //blue {1.0f, 0.0f, 1.0f}, //magenta {1.0f, 1.0f, 1.0f}, //white {0.0f, 1.0f, 1.0f}}; //cyan /* Miljøvariabler*/ private float theta[] = {0.0f, 0.0f, 0.0f}; private int axis = 0; private double speed = 0.2; private double temp = 0.0; private double temp2 = 0.0; private long count=0; private long time = 0; private float d = 0.1f; private int kontroll=0; public Tetrahedon() { } //Tar imot tastettrykk og gjør deretter public void init(GLDrawable drawable) { GL gl = drawable.getGL(); gl.glClearColor(0, 0, 0, 1); gl.glEnable(GL.GL_DEPTH_TEST); drawable.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode()==KeyEvent.VK_PLUS){ /*øker farten hvis "+" blir tastet*/ speed+=0.1; temp=0; } if (e.getKeyCode()==KeyEvent.VK_MINUS){ /*minker farten hvis "-" blir tastet*/ if (speed>0.1) speed-=0.1; else speed=0.0; } if (e.getKeyCode()==KeyEvent.VK_P){ /*pauser roteringen hvis "p" blir tastet*/ temp2=speed; speed=temp; temp=temp2; } if(e.getKeyCode()==KeyEvent.VK_C) { /*roterer kamaret rundt*/ if(kontroll==1){ kontroll=0; } else{ kontroll=1; } } } }); } public void reshape(GLDrawable drawable, int x, int y, int width, int height) { GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(50.0, (double)width/(double)height, 1.0, 1.0); gl.glMatrixMode(GL_MODELVIEW); gl.glLoadIdentity(); glu.gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } /*Displayer tetrahedane, og viser fps*/ public void display(GLDrawable drawable) { GL gl = drawable.getGL(); gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl.glPushMatrix(); gl.glTranslatef(0,0,0); spinTetrahedon(gl); colorTetrahedon(gl); gl.glTranslatef (-1, 0, 0); spinTetrahedon(gl); colorTetrahedon(gl); if(kontroll==1){ gl.glRotatef((float)0.1, (float)0.0, (float)0.0, (float)1.0); } /* kalkulerer fps */ count++; if (time==0) time = System.currentTimeMillis(); if (count%100==0) { double t = System.currentTimeMillis()-time; d = (float) t/100000.0f; System.out.println((100.0*1000.0/t)+" fps"); time = System.currentTimeMillis(); } gl.glPopMatrix(); } /*Spinner tetrahedane om x aksen*/ private void spinTetrahedon(GL gl) { theta[axis] += speed; if (theta[axis] > 360.0) theta[axis] -= 360.0; if(axis==0){ gl.glLoadIdentity(); gl.glRotatef(theta[axis], 1.0f, 0.0f, 0.0f); } else{ gl.glLoadIdentity(); gl.glRotatef(theta[axis], 1.0f, 1.0f, 0.0f); } } private void colorTetrahedon(GL gl) { /* map vertices to faces */ tetra(gl, 0, 3, 2); tetra(gl, 2, 3, 1); tetra(gl, 0, 1, 2); tetra(gl, 1, 2, 0); } private void tetra(GL gl, int a, int b, int c) { /* draw a polygon via list of vertices */ gl.glBegin(GL_TRIANGLES); gl.glColor3fv(colors[a]); gl.glVertex3fv(vertices[a]); gl.glColor3fv(colors); gl.glVertex3fv(vertices); gl.glColor3fv(colors[c]); gl.glVertex3fv(vertices[c]); gl.glEnd(); } public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged) { } public static void main(String[] args) { GLCanvas drawable = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); drawable.addGLEventListener(new Tetrahedon()); JFrame frame = new JFrame("Tetrahedron"); frame.getContentPane().add(drawable); frame.setSize(800,600); frame.setLocationRelativeTo(null); final Animator animator = new Animator(drawable); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { animator.stop(); System.exit(0); } }); frame.setVisible(true); animator.start(); } } Lenke til kommentar
Orjanp Skrevet 14. mars 2006 Del Skrevet 14. mars 2006 (endret) Bare et lite tips. Bruk code tag når du paster inn kode. [code*] //Uten *Din kode her[/code] Fikset det for deg nedenfor. Ørjan... har problemer med view'en min på et program jeg lager, virker som om eg har satt opp gluPerspectiven feil, skulle gjerne ha hatt lenger distanse til tetrahedonet. Men når jeg endrer på near og far clipping plane forsvinner figuren. Noen tips hadde vært trivelig. Kildekode: import static net.java.games.jogl.GL.*; import static net.java.games.jogl.GLU.*; import net.java.games.jogl.*; import javax.swing.*; import java.awt.event.*; /** * Edward Angel's cube.c ported to java. * Click the + to increase speed, - do decrease speed and p to pause/unpause * The methods {@link #init}, {@link #reshape}, {@link #display} and {@link #displayChanged} * implement methods in the interface {@link net.java.games.jogl.GLEventListener}. * Visit the JOGL web site for details and documentation: * <a href="https://jogl.dev.java.net/">https://jogl.dev.java.net/</a>. */ public class Tetrahedon implements GLEventListener { private float vertices[][] = { /*Tetrahedon 1*/ {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 1.0f}}; /*Fargene*/ private float colors[][] = { {0.0f, 0.0f, 0.0f}, //black {1.0f, 0.0f, 0.0f}, //red {1.0f, 1.0f, 0.0f}, //yellow {0.0f, 1.0f, 0.0f}, //green {0.0f, 0.0f, 1.0f}, //blue {1.0f, 0.0f, 1.0f}, //magenta {1.0f, 1.0f, 1.0f}, //white {0.0f, 1.0f, 1.0f}}; //cyan /* Miljøvariabler*/ private float theta[] = {0.0f, 0.0f, 0.0f}; private int axis = 0; private double speed = 0.2; private double temp = 0.0; private double temp2 = 0.0; private long count=0; private long time = 0; private float d = 0.1f; private int kontroll=0; public Tetrahedon() { } //Tar imot tastettrykk og gjør deretter public void init(GLDrawable drawable) { GL gl = drawable.getGL(); gl.glClearColor(0, 0, 0, 1); gl.glEnable(GL.GL_DEPTH_TEST); drawable.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode()==KeyEvent.VK_PLUS){ /*øker farten hvis "+" blir tastet*/ speed+=0.1; temp=0; } if (e.getKeyCode()==KeyEvent.VK_MINUS){ /*minker farten hvis "-" blir tastet*/ if (speed>0.1) speed-=0.1; else speed=0.0; } if (e.getKeyCode()==KeyEvent.VK_P){ /*pauser roteringen hvis "p" blir tastet*/ temp2=speed; speed=temp; temp=temp2; } if(e.getKeyCode()==KeyEvent.VK_C) { /*roterer kamaret rundt*/ if(kontroll==1){ kontroll=0; } else{ kontroll=1; } } } }); } public void reshape(GLDrawable drawable, int x, int y, int width, int height) { GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(50.0, (double)width/(double)height, 1.0, 1.0); gl.glMatrixMode(GL_MODELVIEW); gl.glLoadIdentity(); glu.gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } /*Displayer tetrahedane, og viser fps*/ public void display(GLDrawable drawable) { GL gl = drawable.getGL(); gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl.glPushMatrix(); gl.glTranslatef(0,0,0); spinTetrahedon(gl); colorTetrahedon(gl); gl.glTranslatef (-1, 0, 0); spinTetrahedon(gl); colorTetrahedon(gl); if(kontroll==1){ gl.glRotatef((float)0.1, (float)0.0, (float)0.0, (float)1.0); } /* kalkulerer fps */ count++; if (time==0) time = System.currentTimeMillis(); if (count%100==0) { double t = System.currentTimeMillis()-time; d = (float) t/100000.0f; System.out.println((100.0*1000.0/t)+" fps"); time = System.currentTimeMillis(); } gl.glPopMatrix(); } /*Spinner tetrahedane om x aksen*/ private void spinTetrahedon(GL gl) { theta[axis] += speed; if (theta[axis] > 360.0) theta[axis] -= 360.0; if(axis==0){ gl.glLoadIdentity(); gl.glRotatef(theta[axis], 1.0f, 0.0f, 0.0f); } else{ gl.glLoadIdentity(); gl.glRotatef(theta[axis], 1.0f, 1.0f, 0.0f); } } private void colorTetrahedon(GL gl) { /* map vertices to faces */ tetra(gl, 0, 3, 2); tetra(gl, 2, 3, 1); tetra(gl, 0, 1, 2); tetra(gl, 1, 2, 0); } private void tetra(GL gl, int a, int b, int c) { /* draw a polygon via list of vertices */ gl.glBegin(GL_TRIANGLES); gl.glColor3fv(colors[a]); gl.glVertex3fv(vertices[a]); gl.glColor3fv(colors[b]); gl.glVertex3fv(vertices[b]); gl.glColor3fv(colors[c]); gl.glVertex3fv(vertices[c]); gl.glEnd(); } public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged) { } public static void main(String[] args) { GLCanvas drawable = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); drawable.addGLEventListener(new Tetrahedon()); JFrame frame = new JFrame("Tetrahedron"); frame.getContentPane().add(drawable); frame.setSize(800,600); frame.setLocationRelativeTo(null); final Animator animator = new Animator(drawable); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { animator.stop(); System.exit(0); } }); frame.setVisible(true); animator.start(); } } 5746503[/snapback] Endret 14. mars 2006 av Orjanp Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå