Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jogl中对立方体进行纹理处理会产生黑屏_Java_Opengl_Graphics_Jogl - Fatal编程技术网

Java 在jogl中对立方体进行纹理处理会产生黑屏

Java 在jogl中对立方体进行纹理处理会产生黑屏,java,opengl,graphics,jogl,Java,Opengl,Graphics,Jogl,我试图用加尔文和霍布斯的图像在jogl中制作一个立方体纹理。我在网上看到的每一个消息来源都说有这条线 gl.glEnable(GL2.gl\u纹理\u 2D)在那里。但是,当我添加它时,我会看到一个黑屏。当我把它注释掉时,屏幕上会出现一个立方体。任何帮助都是受欢迎的,因为我已经在谷歌上搜索到了这个问题,并尝试了无数的解决方案。我的源代码如下 package project1; import java.awt.Dimension; import java.io.File; import java

我试图用加尔文和霍布斯的图像在jogl中制作一个立方体纹理。我在网上看到的每一个消息来源都说有这条线
gl.glEnable(GL2.gl\u纹理\u 2D)在那里。但是,当我添加它时,我会看到一个黑屏。当我把它注释掉时,屏幕上会出现一个立方体。任何帮助都是受欢迎的,因为我已经在谷歌上搜索到了这个问题,并尝试了无数的解决方案。我的源代码如下

package project1;

import java.awt.Dimension;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;

import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GL3;
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.Animator;
import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureIO;

/**
 * Simple Implements GLEventListener so that I can modify 
 * what happens when application runs
 * 
 * @author Alex Thoennes
 *
 */
public class Simple extends GLCanvas implements GLEventListener
{
    private static final long serialVersionUID = 1L;

    private double eyeX = 5;
    private double eyeY = 5;
    private double eyeZ = 5;
    private float o = 0.0001f;

    // this is the title of the frame
    static final String TITLE = "Simple";

    // these are the dimensions of the frame
    static final int CANVAS_WIDTH = 500;
    static final int CANVAS_HEIGHT = 500;

    int texture;
    Texture t;

    public static void main (String [] args)
    {   
        // this class extends the GLCanvas class
        // so that I have something to reference 
        // when I want to draw
        GLCanvas canvas = new Simple();
        canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));

        // create a new frame to hold the canvas
        JFrame frame = new JFrame();

        // add the canvas to the frame
        frame.getContentPane().add(canvas);

        // set the title of the frame
        frame.setTitle(TITLE);

        // this is not required but is convenient. When you 
        // click the 'x' in the top left of the screen, the 
        // application will close
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // pack the frame
        frame.pack();

        // then make it displayable to the user
        frame.setVisible(true);

        // Create an animator object and then add it to 
        // the canvas and start the animation
        Animator animator = new Animator(canvas);
        animator.start();
    }

    // constructor for the class
    // you need to add a GLEventListener
    // to it so that you can draw with the gl methods
    public Simple ()
    {
        this.addGLEventListener(this);
    }

    @Override
    public void init(GLAutoDrawable drawable) 
    {
        final GL2 gl = drawable.getGL().getGL2();

        gl.glEnable(GL2.GL_DEPTH_TEST);
        //gl.glEnable(GL2.GL_TEXTURE_2D);

          try
          {
             File im = new File("calvin-and-hobbes.png");
             t = TextureIO.newTexture(im, true);
             texture = t.getTextureObject(gl);

             gl.glBindTexture(GL2.GL_TEXTURE_2D, texture);
             gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
             gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
          }
          catch(IOException e)
          {
             e.printStackTrace();
          }
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {}

    @Override
    public void display(GLAutoDrawable drawable) 
    {
        // create objects used for drawing
        final GL2 gl = drawable.getGL().getGL2();
        GLU glu = new GLU();

        transformEye();

        gl.glMatrixMode(GL2.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(40.0, 1.0, 1.0, 10000.0);
        gl.glMatrixMode(GL2.GL_TEXTURE);
        gl.glLoadIdentity();
        gl.glMatrixMode(GL2.GL_MODELVIEW);
        gl.glLoadIdentity();

        glu.gluLookAt(eyeX, eyeY, eyeZ, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);

        //gl.glEnable(GL2.GL_TEXTURE_2D);
        //t.bind(gl);
        //t.enable(gl);

        gl.glBindTexture(GL2.GL_TEXTURE_2D, texture);
        //gl.glEnable(GL2.GL_TEXTURE_2D);
        drawTriangles(gl);

        //gl.glFlush();

        // increment the angle so that the viewer rotates
        //o += 0.0001f;
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {}

    /**
     * This method rotates the viewer
     */
    private void transformEye()
    {
        // use o for theta which is the amount of degrees
        eyeX = (5 * Math.cos(o)) + (5 * Math.sin(o));
        eyeZ = (-5 * Math.sin(o)) + (5 * Math.cos(o));
    }

    /**
     * This method draws all the triangles as the viewer rotates
     * 
     * @param gl
     */
    private void drawTriangles(GL2 gl)
    {   
//      gl.glColor3f(1.0f, 1.0f, 1.0f);

//      gl.glColor3f(1.0f, 0.0f, 0.0f);

        // Triangle 0
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glTexCoord2f(0f, 0f);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);

        gl.glTexCoord2f(0f, 1f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);

        gl.glTexCoord2f(1f, 0f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);

        gl.glEnd();

        // Triangle 1
        gl.glBegin(GL3.GL_TRIANGLES);
//      gl.glTexCoord3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);

//      gl.glTexCoord3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);


//      gl.glTexCoord3f(-0.5f, 0.5f, 0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glEnd();

//      gl.glColor3f(0.0f, 0.5f, 0.0f);

        // Triangle 2
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glEnd();

        // Triangle 3
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glEnd();

//      gl.glColor3f(0.0f, 0.0f, 0.5f);

        // Triangle 4
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glEnd();

        // Triangle 5
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glEnd();

//      gl.glColor3f(0.5f, 0.0f, 0.5f);

        // Triangle 6
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glEnd();

        // Triangle 7
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glEnd();

//      gl.glColor3f(0.0f, 0.2f, 0.613f);

        // Triangle 8
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glEnd();

        // Triangle 9
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glEnd();

//      gl.glColor3f(0.6134f, 0.4513f, 0.1423f);

        // Triangle 10
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glEnd();

        // Triangle 11
        gl.glBegin(GL3.GL_TRIANGLES);
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glEnd();
    }
}

我已经在这里回答了您:gl.glMatrixMode(GL2.gl_纹理)在您的情况下是无用的。只有第一个三角形有一些纹理坐标。对于其他三角形,应在glBegin()和glEnd()之间添加一些纹理坐标。使用搜索引擎没有帮助,你需要花一些时间学习OpenGL的概念。我知道你这样做了,这个答案很有帮助。我只是在同一个问题上寻找不同的观点。这没什么错。但你的回答确实有帮助。使用google和您指导我的存储库帮助我理解OpenGL的概念。非常感谢。