Имеется небольшой код с графикой JOGL
Код:
package objects;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.glu.GLU;
import com.jogamp.opengl.util.awt.Overlay;
import com.jogamp.opengl.util.awt.TextRenderer;
import com.jogamp.opengl.util.gl2.GLUT;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Graphic extends JFrame{
//колич. меток в канале
public static final int MT_CNL = 16;
//количество каналов
public static final int NB_CNL = 120;
// переменные координат меток
short [] x = new short [NB_CNL];
short [] [] y = new short [NB_CNL][MT_CNL];
short [] xm = new short [NB_CNL];
short [] [] ym = new short [NB_CNL][MT_CNL];
short CntMt;
short AllMt;
GLCanvas glcanvas = new GLCanvas();
// конструктор класса Graphic
public Graphic() {
// инициализация компонентов
initComponents();
}
// метод инициализации компонентов формы
private void initComponents(){
// положение формы на экране
this.setBounds(20,20,600,500);
// размер формы
this.setSize(600, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
glcanvas.addGLEventListener(new Renderer());
glcanvas.setSize( 600, 500 );
add(glcanvas);
}
// Код OpenGL, который отображает кадр
public final class Renderer implements GLEventListener
{
private GLU glu = new GLU();
private int WinHeight = 500;
private int WinWidth = 600;
Overlay overlay;
TextRenderer tr ;
@Override
public void init(GLAutoDrawable gLDrawable){
this.overlay = new Overlay(gLDrawable);
System.out.println("init() called");
GL2 gl = gLDrawable.getGL().getGL2();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glShadeModel(GL2.GL_FLAT);
}
@Override
public void dispose(GLAutoDrawable arg0)
{
System.out.println("dispose() called");
this.overlay = null;
}
@Override
public void display(GLAutoDrawable gLDrawable)
{
Graphics2D g2d = this.overlay.createGraphics();
final GL2 gl = gLDrawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);//очистка-заливка пиксельного буффера цветом очистки экрана
// Код OpenGL, который отображает кадр
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(-WinWidth/2, WinWidth/2, -WinHeight/2, WinHeight/2, -1.0, 1.0);
// горизонтальные и вертикальные линии сетки
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glBegin(GL2.GL_LINES);
gl.glColor3f(1.0f, 1.0f, 1.0f);
// по горизонтали
for(int i = -WinWidth/2; i <= WinWidth/2; i += 5){
if(i%100 == 0 || i == 0) {
gl.glColor3f(0.0f, 1.0f, 1.0f);
}
else {
gl.glColor3f(0.5f, 0.5f, 0.5f);
}
gl.glVertex2f(i, -WinHeight);
gl.glVertex2f(i, WinWidth);
}
gl.glColor3f(0.5f, 0.5f, 0.5f);
// по вертикали
for(int i = -WinWidth/2; i <= WinWidth/2; i += 100) {
gl.glVertex2f(-WinHeight, i);
gl.glVertex2f(WinHeight, i);
}
gl.glEnd();
// зеленая метка с координатами x, y
gl.glColor3f( 0.0f, 1.0f, 0.0f );
gl.glPolygonMode( GL2.GL_FRONT, GL2.GL_FILL );
// прорисовка меток
// проход по каналам
for (int i = 0; i < NB_CNL; i++) {
// проход по меткам в канале
for (int j = 0; j < MT_CNL; j++) {
// прорисовка если дальность меньше 2000
if(y[i][j] < 2000) {
gl.glBegin( GL2.GL_POLYGON );
gl.glVertex2i( x[i]+0, y[i][j]+5 );
gl.glVertex2i( x[i]+5, y[i][j]+5 );
gl.glVertex2i( x[i]+5, y[i][j]+0 );
gl.glVertex2i( x[i]+0, y[i][j]+0 );
gl.glEnd();
}
}
}
tr = new TextRenderer(new Font("Verdana", Font.BOLD, 16), true, false, null, false);
tr.setColor(1f,1f,1f,1f);
tr.beginRendering(0,0);
tr.draw( "Hello World! ", 100, 100);
tr.endRendering();
gl.glFlush();
}
@Override
public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height)
{
System.out.println("reshape() called: x = "+x+", y = "+y+", width = "+width+", height = "+height);
}
}
}
В коде не работает вывод текста на графическую панель
Код:
tr = new TextRenderer(new Font("Verdana", Font.BOLD, 16), true, false, null, false);
tr.setColor(1f,1f,1f,1f);
tr.beginRendering(0,0);
tr.draw( "Hello World! ", 100, 100);
tr.endRendering();
Подскажите пожалуйста что в коде не так.