Master34
Junior Newbie
Java games rock!
|
 |
«
Posted
2005-04-02 02:47:10 » |
|
I am trying to do a surface-of-revolution and display the object as a wireframe representation, rotating around and saving the points
It has no compile errors, but it has a runtime error in the black screen saying:
java.lang.NullPointerException at Rotation6$Renderer.display(Rotation6.java:205) at net.java.games.jogl.impl.GLDrawableHelper.display(GLDrawableHelper.ja va:74) at net.java.games.jogl.GLCanvas$DisplayAction.run(GLCanvas.java:194) at net.java.games.jogl.impl.GLContext.invokeGL(GLContext.java:192) at net.java.games.jogl.GLCanvas.displayImpl(GLCanvas.java:182) at net.java.games.jogl.GLCanvas.display(GLCanvas.java:82) at net.java.games.jogl.Animator$1.run(Animator.java:104) at java.lang.Thread.run(Thread.java:536)
how do I fix this problem?
-----------------------------------------------------------------------
here is the code
import java.awt.*; import java.awt.event.*; import java.nio.IntBuffer; import net.java.games.jogl.*; import net.java.games.jogl.util.*;
public class Rotation6
{
static Animator animator = null;
public static void main(String[] args)
{
Frame frame = new Frame("Rotation ");
GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
canvas.addGLEventListener(new Renderer());
frame.add(canvas);
frame.setSize(500, 500);
animator = new Animator(canvas);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
animator.stop();
System.exit(0);
}
});
frame.show();
animator.start();
canvas.requestFocus();
} // end main
static class Renderer implements GLEventListener, KeyListener { private float rtri = 0.0f;
public class wcPt3D {
public float x, y, z;
wcPt3D(float xcoord, float ycoord, float zcoord){
x= xcoord;
y= ycoord; z= zcoord;
}
wcPt3D( ){
x = 0.0f;
y = 0.0f; z = 0.0f;
}
} // end wcpt3d
public void init(GLDrawable gLDrawable)
{
final GL gl = gLDrawable.getGL();
final GLU glu = gLDrawable.getGLU();
gl.glMatrixMode (GL.GL_PROJECTION);
gl.glClearColor (1.0f, 0.0f, 0.0f, 0.0f); //set background to white
gl.glClearDepth(1.0f); // Depth Buffer Setup
gl.glEnable(GL.GL_DEPTH_TEST); // Enables Depth Testing
gl.glDepthFunc(GL.GL_LEQUAL); // The Type Of Depth Testing To Do
gl.glOrtho (-2.0, 2.0, -2.0, 2.0, -15.0, 15.0); // define drawing area gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
gLDrawable.addKeyListener(this);
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void display(GLDrawable gLDrawable)
{
final GL gl = gLDrawable.getGL();
final GLU glu = gLDrawable.getGLU();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Set display window to color.
gl.glMatrixMode (GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glRotatef(rtri, 0.0f, 2.0f, 0.0f);
gl.glBegin(GL.GL_LINES); //drawing using lines
wcPt3D[][] p1 = new wcPt3D[10][36];
float angle=0.0f;
int i =0;
p1[0][0] =new wcPt3D (0.150f, 0.750f, 0.000f); p1[1][0] =new wcPt3D (0.450f, 0.750f, 0.000f); p1[2][0] =new wcPt3D (0.450f, 0.750f, 0.000f); p1[3][0] =new wcPt3D (0.650f, 0.500f, 0.000f); p1[4][0] =new wcPt3D (0.650f, 0.500f, 0.000f); p1[5][0] =new wcPt3D (0.350f, 0.350f, 0.000f); p1[6][0] =new wcPt3D (0.350f, 0.350f, 0.000f); p1[7][0] =new wcPt3D (0.150f, 0.350f, 0.000f); p1[8][0] =new wcPt3D (0.150f, 0.350f, 0.000f); p1[9][0] =new wcPt3D (0.150f, 0.150f, 0.000f);
for (int row = 0; row < 36; row++) { gl.glBegin(GL.GL_LINES); for (int col = 0; col < 10; col++) { gl.glVertex3f(p1[row][col].x, p1[row][col].y, p1[row][col].z);
} gl.glEnd(); }
/*gl.glVertex3f(0.150f, 0.750f, 0.000f); gl.glVertex3f(0.450f, 0.750f, 0.000f); gl.glVertex3f(0.450f, 0.750f, 0.000f); gl.glVertex3f(0.650f, 0.500f, 0.000f); gl.glVertex3f(0.650f, 0.500f, 0.000f); gl.glVertex3f(0.350f, 0.350f, 0.000f); gl.glVertex3f(0.350f, 0.350f, 0.000f); gl.glVertex3f(0.150f, 0.350f, 0.000f); gl.glVertex3f(0.150f, 0.350f, 0.000f); gl.glVertex3f(0.150f, 0.150f, 0.000f); */
gl.glEnd(); // Finished
rtri += 0.2f;
//} gl.glFlush(); }
public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)
{
}
public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)
{
} public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
animator.stop();
System.exit(0);
}
public void rotate3D (wcPt3D[][] p1)
{
float deg = 0; float RadianAngle = (float)(180/Math.PI); for (int row = 0; row < 36; row++) {
for (int col = 0; col < 10; col++) { float zp = p1[row][col].z * (float)Math.cos(deg * RadianAngle) - p1[row][col].x * (float)Math.sin(deg * RadianAngle); float xp = p1[row][col].z * (float)Math.sin(deg * RadianAngle) + p1[row][col].x * (float)Math.cos(deg * RadianAngle); float yp = p1[row][col].y; p1[row][col] = new wcPt3D(xp, yp, zp); deg += 10.0f; } } } public void draw3D (wcPt3D[][] p1, GL gl)
{
for (int row = 0; row < 36; row++) { gl.glBegin(GL.GL_LINES); for (int col = 0; col < 10; col++) { gl.glVertex3f(p1[row][col].x, p1[row][col].y, p1[row][col].z);
} gl.glEnd(); }
}
}
}
|