1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLJPanel; import javax.media.opengl.glu.GLU; import javax.swing.JFrame;
public class ScissorTest extends JFrame implements GLEventListener { private final int H_TIME_SCALE = 20; private final int H_TIME_SCROLL = 10; private final int W_TRACK_SCROLL = 10; private final int W_TRACK_HEADER = 100; private final int TK_NUMBER = 10; private float[] bgColor = {1,1,1,1}; private int width; private int height; private GLJPanel glp; private GL gl; private GLU glu; private float minY = 0; private float maxY = 20; private float minX = 0; private float maxX = 2000; public ScissorTest() { super("ScissorTest"); setSize(400,400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); glp = new GLJPanel(); glp.addGLEventListener(this);
add(glp); setVisible(true); } public void init(GLAutoDrawable drawable) { gl = drawable.getGL(); glu = new GLU(); gl.glShadeModel(GL.GL_SMOOTH); gl.glClearColor(bgColor[0],bgColor[1],bgColor[2],bgColor[3]); gl.glViewport(0, 0, width, height); gl.glEnable(GL.GL_POINT_SMOOTH); gl.glEnable(GL.GL_LINE_SMOOTH); gl.glEnable(GL.GL_POLYGON_SMOOTH); gl.glPolygonMode(GL.GL_FRONT, GL.GL_LINE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glMatrixMode(GL.GL_PROJECTION); gl.glEnable(GL.GL_SCISSOR_TEST); }
public void display(GLAutoDrawable drawable) { gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glLoadIdentity(); gl.glPolygonMode(GL.GL_FRONT, GL.GL_FILL);
gl.glViewport(W_TRACK_HEADER,height-H_TIME_SCALE,width-W_TRACK_HEADER-W_TRACK_SCROLL,H_TIME_SCALE); gl.glScissor(W_TRACK_HEADER,height-H_TIME_SCALE,width-W_TRACK_HEADER-W_TRACK_SCROLL,H_TIME_SCALE); glu.gluOrtho2D(0,1,0,1); gl.glColor3f(1,0,0); gl.glRectf(0,0,1,1); gl.glViewport(0,H_TIME_SCROLL,W_TRACK_HEADER,height-H_TIME_SCROLL-H_TIME_SCALE); gl.glScissor(0,H_TIME_SCROLL,W_TRACK_HEADER,height-H_TIME_SCROLL-H_TIME_SCALE); glu.gluOrtho2D(0,1,0,1); gl.glColor3f(0,1,0); gl.glRectf(0,0,1,1); gl.glViewport(width-W_TRACK_SCROLL,H_TIME_SCROLL,W_TRACK_SCROLL,height-H_TIME_SCROLL-H_TIME_SCALE); gl.glScissor(width-W_TRACK_SCROLL,H_TIME_SCROLL,W_TRACK_SCROLL,height-H_TIME_SCROLL-H_TIME_SCALE); glu.gluOrtho2D(0,1,0,1); gl.glColor3f(0,0,1); gl.glRectf(0,0,1,1); gl.glViewport(W_TRACK_HEADER,0,width-W_TRACK_HEADER-W_TRACK_SCROLL,H_TIME_SCROLL); gl.glScissor(W_TRACK_HEADER,0,width-W_TRACK_HEADER-W_TRACK_SCROLL,H_TIME_SCROLL); glu.gluOrtho2D(0,1,0,1); gl.glColor3f(0.5f,0.5f,0); gl.glRectf(0,0,1,1); int trackHeight = (height-H_TIME_SCALE-H_TIME_SCROLL)/TK_NUMBER; gl.glColor3f(0,0,0);
int currentHeight = 0; for(int i = TK_NUMBER ; i >= 0 ; i--) { gl.glViewport(W_TRACK_HEADER,H_TIME_SCROLL+currentHeight,width-W_TRACK_HEADER-W_TRACK_SCROLL,trackHeight); gl.glScissor(W_TRACK_HEADER,H_TIME_SCROLL+currentHeight,width-W_TRACK_HEADER-W_TRACK_SCROLL,trackHeight); glu.gluOrtho2D(minX,maxX,minY,maxY); gl.glBegin(GL.GL_LINES); gl.glVertex2f(minX,minY); gl.glVertex2f(maxX,maxY); gl.glEnd(); currentHeight += trackHeight; } } public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { width = w; height = h; }
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged){} public static void main(String args[]) { new ScissorTest(); } } |