Java 为什么赢了';我的纹理没有显现出来吗?
好的,我正在使用Java和JoGL。我正在尝试加载和显示纹理,但纹理根本没有显示。我没有收到任何错误,所以我不知道问题可能是什么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
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,但不起作用。