Java 为什么赢了';我的纹理没有显现出来吗?

Java 为什么赢了';我的纹理没有显现出来吗?,java,opengl,textures,jogl,Java,Opengl,Textures,Jogl,好的,我正在使用Java和JoGL。我正在尝试加载和显示纹理,但纹理根本没有显示。我没有收到任何错误,所以我不知道问题可能是什么 import javax.media.opengl.*; import javax.media.opengl.glu.*; import com.sun.opengl.util.*; import com.sun.opengl.util.j2d.*; import java.awt.*; import java.awt.event.*; import java.aw

好的,我正在使用Java和JoGL。我正在尝试加载和显示纹理,但纹理根本没有显示。我没有收到任何错误,所以我不知道问题可能是什么

import javax.media.opengl.*;
import javax.media.opengl.glu.*;
import com.sun.opengl.util.*;
import com.sun.opengl.util.j2d.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import java.nio.*;
import javax.imageio.*;
import javax.swing.*;


public class chartest extends JFrame implements GLEventListener, KeyListener
{
    private int texture;

    public void display(GLAutoDrawable gLDrawable)
    {
      final GL gl = gLDrawable.getGL();
      gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
      gl.glLoadIdentity();


      gl.glColor3f(1.0f, 1.0f, 1.0f);
      gl.glBindTexture(GL.GL_TEXTURE_2D, texture);

      gl.glBegin(GL.GL_QUADS);              // Draw A Quad
        gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-12.0f, -19.0f,  -15.0f);
        gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 12.0f, -19.0f,  -15.0f);
        gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 12.0f,  19.0f,  -15.0f);
        gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-12.0f,  19.0f,  -15.0f);
      gl.glEnd();               // Done Drawing The Quad
      gl.glFlush();
    }

    public void displayChanged(GLAutoDrawable g, boolean b, boolean b2){}

    public void init(GLAutoDrawable gLDrawable)
    {
      final GL gl = gLDrawable.getGL();
      gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
      gl.glShadeModel(GL.GL_FLAT);
      gl.glEnable(GL.GL_TEXTURE_2D);

      texture = genTexture(gl);
      gl.glBindTexture(GL.GL_TEXTURE_2D, texture);
      URL url = this.getClass().getResource("test.png");

      try
      {
        BufferedImage img = ImageIO.read(url);
        makeRGBTexture(gl, new GLU(), img, GL.GL_TEXTURE_2D, false);
      }

      catch(Exception e)
      {
        e.printStackTrace();
      }

      gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR); 
      gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR); 
    }

    public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height)
    {
      final GL gl = gLDrawable.getGL();
      final GLU glu = new GLU();

      if (height <= 0) // avoid a divide by zero error!
        height = 1;
      final float h = (float)width / (float)height;
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL.GL_PROJECTION);
      gl.glLoadIdentity();
      glu.gluPerspective(45.0f, h, 1.0, 20.0);
      gl.glMatrixMode(GL.GL_MODELVIEW);
      gl.glLoadIdentity();
    }

    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
        System.exit(0);
    }
    public void keyReleased(KeyEvent e) {}
    public void keyTyped(KeyEvent e) {}

    public static void main(String[] args) {

        chartest c = new chartest();

        GLCanvas canvas = new GLCanvas(new GLCapabilities());
        canvas.addGLEventListener(c);
        c.add(canvas);
        c.setSize(640, 480);
        canvas.addKeyListener(c);
        c.addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent e)
          {
            System.exit(0);
          }
        });
        c.setVisible(true);
        canvas.requestFocus();
    }



    //-----------------------
    private void makeRGBTexture(GL gl, GLU glu, BufferedImage img, int target, boolean mipmapped)
    {
      ByteBuffer dest = null;
      switch (img.getType())
      {
        case BufferedImage.TYPE_3BYTE_BGR:
        case BufferedImage.TYPE_CUSTOM:
        {
          System.out.println("Custom");
          byte[] data = ((DataBufferByte) img.getRaster().getDataBuffer()).getData();
          dest = ByteBuffer.allocateDirect(99999);
          dest.order(ByteOrder.nativeOrder());
          dest.put(data, 0, data.length);
          break;
        }
        case BufferedImage.TYPE_INT_RGB:
        {
          int[] data = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
          dest = ByteBuffer.allocateDirect(data.length * BufferUtil.SIZEOF_INT);
          dest.order(ByteOrder.nativeOrder());
          dest.asIntBuffer().put(data, 0, data.length);
          break;
        }
        default:
          throw new RuntimeException("Unsupported image type " + img.getType());
      }

      if (mipmapped)
      {
        glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest);
      }
      else
      {
        gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest);
      }
    }

    private int genTexture(GL gl)
    {
      final int[] tmp = new int[1];
      gl.glGenTextures(1, tmp, 0);
      return tmp[0];
    }
}
import javax.media.opengl.*;
导入javax.media.opengl.glu.*;
导入com.sun.opengl.util.*;
导入com.sun.opengl.util.j2d.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.image.*;
导入java.io.*;
导入java.net。*;
导入java.nio.*;
导入javax.imageio.*;
导入javax.swing.*;
公共类chartest扩展JFrame实现了GLEventListener、KeyListener
{
私有int纹理;
公共空白显示(GLAutoDrawable gLDrawable)
{
最终GL=gLDrawable.getGL();
gl.glClear(gl.gl_颜色_缓冲_位| gl.gl_深度_缓冲_位);
gl.glLoadIdentity();
gl.glColor3f(1.0f、1.0f、1.0f);
gl.glBindTexture(gl.gl_纹理_2D,纹理);
gl.glBegin(gl.gl_QUADS);//绘制一个四边形
gl.glTexCoord2f(0.0f,0.0f);gl.glVertex3f(-12.0f,-19.0f,-15.0f);
gl.glTexCoord2f(1.0f,0.0f);gl.glVertex3f(12.0f,-19.0f,-15.0f);
gl.glTexCoord2f(1.0f,1.0f);gl.glVertex3f(12.0f,19.0f,-15.0f);
gl.glTexCoord2f(0.0f,1.0f);gl.glVertex3f(-12.0f,19.0f,-15.0f);
gl.glEnd();//绘制完四边形
gl.glFlush();
}
public void displayChanged(GLAutoDrawable g,boolean b,boolean b2){}
公共void init(GLAutoDrawable gLDrawable)
{
最终GL=gLDrawable.getGL();
gl.glClearColor(1.0f、0.0f、0.0f、0.0f);
gl.glShadeModel(gl.GLU平面);
gl.glEnable(gl.gl\U纹理\U 2D);
纹理=织物(gl);
gl.glBindTexture(gl.gl_纹理_2D,纹理);
URL URL=this.getClass().getResource(“test.png”);
尝试
{
BuffereImage img=ImageIO.read(url);
makeRGBTexture(gl,新GLU(),img,gl.gl_纹理_2D,false);
}
捕获(例外e)
{
e、 printStackTrace();
}
gl.glTexParameteri(gl.gl\u纹理\u 2D,gl.gl\u纹理\u最小\u过滤器,gl.gl\u线性);
gl.glTexParameteri(gl.gl\u纹理\u 2D,gl.gl\u纹理\u MAG\u过滤器,gl.gl\u线性);
}
公共空间重塑(GLAutoDrawable gLDrawable、int x、int y、int WITH、int height)
{
最终GL=gLDrawable.getGL();
最终谷氨酸=新谷氨酸();

如果(height我看不到您检查了OpenGL错误。JOGL提供了一种简单的方法。只需将
glDrawable.setGL(new DebugGL(glDrawable.getGL());
放在init方法的开头


如果这没有帮助,我会检查图像数据和纹理变量,如果它们不是零。

我看不出您检查了任何OpenGL错误。JOGL提供了一种简单的方法。只需将
glDrawable.setGL(new DebugGL(glDrawable.getGL());
放在init方法的开头


如果没有帮助,我会检查图像数据和纹理变量是否为非零。

我使用com.sun.opengl.util.texture.texture和我找到的教程加载了纹理。

我使用com.sun.opengl.util.texture.texture和我找到的教程加载了纹理。

对不起,你能教我吗e如何在标记形式中使用这种格式?我试过JAVA,但不起作用。对不起,你能教我如何在标记形式中使用这种格式吗?我试过JAVA,但不起作用。