Muito obrigado Vini, como sempre de muita valia suas respostas… Olhei seu link e aproveitei e procurei mais sobre “picking” (não sabia que era esse o nome kkkk)… consegui resolver o problema do click… ele consegue achar exatamente a região de interesse agora…
Sobre o JOGL e o LWJGL, acredito que seja melhor mesmo Vini, vi em outras oportunidades aqui no forum você falando isso, e em outros lugares também… mas o fato é que preciso utilizar ela (pré-requisito)…
Com mas uma parte da jornada concluída, tem peço mais um coisa Vini, sem querer encher o saco… kkkkk
Eu preciso fazer arrastar essa peça, representada pela “texture” (imagem) do código abaixo, e soltar ela em um outro ponto do tabuleiro… tem mais algo pra mim ler ai ou pode me ajudar com isso (me clarear as ideias)?
private GLU glu;
private GLCapabilities caps;
private GLCanvas canvas;
private static final int BUFSIZE = 512;
private Point pickPoint = new Point();
public static void main(String[] args)
{
new Moinho().executar();
}
private void executar()
{
JFrame frame = new JFrame("Tabuleiro Jogo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
caps = new GLCapabilities();
canvas = new GLCanvas(caps);
setTextureFile(new File("src/images/black.jpg"));
canvas.repaint();
canvas.addGLEventListener(this);
canvas.addMouseListener(this);
canvas.addKeyListener(this);
frame.getContentPane().add(canvas);
frame.setSize(800, 600);
frame.show();
canvas.requestFocusInWindow();
}
private File file;
private Texture texture;
public void setTextureFile(File file)
{
this.file = file;
}
public void init(GLAutoDrawable drawable)
{
drawable.setGL(new DebugGL(drawable.getGL()));
GL gl = drawable.getGL();
glu = new GLU();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glDepthFunc(GL.GL_LESS);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glShadeModel(GL.GL_FLAT);
gl.glDepthRange(0.0, 1.0); /* The default z mapping */
}
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)
{
GL gl = drawable.getGL();
try
{
texture = TextureIO.newTexture(file, true);
} catch (Exception ex)
{
ex.printStackTrace();
}
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0, 8.0, 0.0, 8.0, -0.5, 2.5);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
}
public void display(GLAutoDrawable drawable)
{
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
pickItem(gl);
drawRects(gl, GL.GL_RENDER);
gl.glFlush();
}
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged)
{}
public void keyReleased(KeyEvent key)
{}
public void mouseClicked(MouseEvent mouse)
{}
public void mousePressed(MouseEvent mouse)
{
pickPoint = mouse.getPoint();
canvas.display();
}
public void mouseReleased(MouseEvent mouse)
{}
public void mouseEntered(MouseEvent mouse)
{}
public void mouseExited(MouseEvent mouse)
{}
public void keyTyped(KeyEvent e)
{}
public void keyPressed(KeyEvent e)
{}
private void drawRects(GL gl, int mode)
{
if (mode == GL.GL_SELECT)
{
gl.glLoadName(1);
}
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
if (texture != null)
{
texture.enable();
texture.bind();
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);
TextureCoords coords = texture.getImageTexCoords();
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(coords.left(), coords.bottom());
gl.glVertex3f(0, 0, 0);
gl.glTexCoord2f(coords.right(), coords.bottom());
gl.glVertex3f(1f, 0, 0);
gl.glTexCoord2f(coords.right(), coords.top());
gl.glVertex3f(1f, 1f, 0);
gl.glTexCoord2f(coords.left(), coords.top());
gl.glVertex3f(0, 1f, 0);
gl.glEnd();
texture.disable();
}
}
private void infoHits(int hits, int buffer[])
{
int names, ptr = 0;
System.out.println("hits = " + hits);
// ptr = (GLuint *) buffer;
for (int i = 0; i < hits; i++)
{ /* for each hit */
names = buffer[ptr];
System.out.println(" numero de nomes por hit = " + names);
ptr++;
System.out.println(" z1 é " + buffer[ptr]);
ptr++;
System.out.println(" z2 é " + buffer[ptr]);
ptr++;
System.out.print("\n seu nome é ");
for (int j = 0; j < names; j++)
{ /* for each name */
System.out.println("" + buffer[ptr]);
ptr++;
}
System.out.println();
}
}
private void pickItem(GL gl)
{
int[] selectBuf = new int[BUFSIZE];
IntBuffer selectBuffer = BufferUtil.newIntBuffer(BUFSIZE);
int hits;
int viewport[] = new int[4];
// int x, y;
gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
gl.glSelectBuffer(BUFSIZE, selectBuffer);
gl.glRenderMode(GL.GL_SELECT);
gl.glInitNames();
gl.glPushName(-1);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glPushMatrix();
gl.glLoadIdentity();
/* create 5x5 pixel picking region near cursor location */
glu.gluPickMatrix((double) pickPoint.x, (double) (viewport[3] - pickPoint.y), 5.0, 5.0, viewport, 0);
gl.glOrtho(0.0, 8.0, 0.0, 8.0, -0.5, 2.5);
drawRects(gl, GL.GL_SELECT);
gl.glPopMatrix();
gl.glFlush();
hits = gl.glRenderMode(GL.GL_RENDER);
selectBuffer.get(selectBuf);
infoHits(hits, selectBuf);
}
agradeço desde já