簡體   English   中英

JOGL在3d立方體上使用2d紋理

[英]JOGL use 2d texture on a 3d Cube

我使用以下代碼在JOGL中創建了一個3d立方體:

/**
 * Function used to draw a cube
 */
public void drawCube(GL gl) {


    gl.glBegin(gl.GL_QUADS);

    //gl.glColor3f(1, 0, 0);
        gl.glTexCoord3f(0, 0, 0);
        gl.glVertex3f(0, 0, 0);
        gl.glTexCoord3f(4, 0, 0);
        gl.glVertex3f(1, 0, 0);
        gl.glTexCoord3f(4, 4, 0);
        gl.glVertex3f(1, 1, 0);
        gl.glTexCoord3f(0, 4, 0);
        gl.glVertex3f(0, 1, 0);
    gl.glEnd();



    gl.glBegin(gl.GL_QUADS);
        gl.glTexCoord3f(0, 0, 0);
    // gl.glColor3f(0, 1, 0);
        gl.glVertex3f(0, 0, 0);
        gl.glTexCoord3f(0, 4, 0);
        gl.glVertex3f(0, 1, 0);
        gl.glTexCoord3f(0, 4, 4);
        gl.glVertex3f(0, 1, 1);
        gl.glTexCoord3f(0, 0, 4);
        gl.glVertex3f(0, 0, 1);
    gl.glEnd();



    gl.glBegin(gl.GL_QUADS);
    //  gl.glColor3f(0, 0, 1);
        gl.glTexCoord3f(0, 4, 0);
        gl.glVertex3f(0, 1, 0);
        gl.glTexCoord3f(4, 4, 0);
        gl.glVertex3f(1, 1, 0);
        gl.glTexCoord3f(4, 4, 4);
        gl.glVertex3f(1, 1, 1);
        gl.glTexCoord3f(0, 4, 4);
        gl.glVertex3f(0, 1, 1);
      gl.glEnd();


    gl.glBegin(gl.GL_QUADS);
    //  gl.glColor3f(1, 1, 0);
        gl.glTexCoord3f(4, 4, 0);
        gl.glVertex3f(1, 1, 0);
        gl.glTexCoord3f(4, 0, 0);
        gl.glVertex3f(1, 0, 0);
        gl.glTexCoord3f(4, 0, 4);
        gl.glVertex3f(1, 0, 1);
        gl.glTexCoord3f(4, 4, 4);
        gl.glVertex3f(1, 1, 1);
    gl.glEnd();

     gl.glBegin(gl.GL_QUADS);
    // gl.glColor3f(1, 0, 1);
        gl.glTexCoord3f(4, 0, 0);
        gl.glVertex3f(1, 0, 0);
        gl.glTexCoord3f(0, 0, 0);
        gl.glVertex3f(0, 0, 0);
        gl.glTexCoord3f(0, 0, 4);
        gl.glVertex3f(0, 0, 1);
        gl.glTexCoord3f(4, 0, 4);
        gl.glVertex3f(1, 0, 1);
    gl.glEnd();

     gl.glBegin(gl.GL_QUADS);
    //   gl.glColor3f(0, 1, 1);
        gl.glTexCoord3f(0, 4, 4);
        gl.glVertex3f(0, 1, 1);
        gl.glTexCoord3f(4, 4, 4);
        gl.glVertex3f(1, 1, 1);
        gl.glTexCoord3f(4, 0, 4);
        gl.glVertex3f(1, 0, 1);
        gl.glTexCoord3f(0, 0, 4);
        gl.glVertex3f(0, 0, 1);

     gl.glEnd();

立方體在屏幕上,現在我正試圖在每個面上放置一個紋理,如下所示:

public void init(GLAutoDrawable gld) {
    //Init the gl
    GL gl = gld.getGL();

    //Init the glu
    GLU glu = new GLU();

    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(90, 1.6, 0.6, 30.0);
    glu.gluLookAt(0, 0, 10, 0, 0, 0, 0, 2, 0);


    gl.glEnable(gl.GL_TEXTURE_2D);


    int id_textura = Gen_Textura(gl);


    gl.glBindTexture(gl.GL_TEXTURE_2D, id_textura);


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

問題是紋理只顯示在立方體的一個面上,而不是全部6個面上。

如何在立方體的所有面上繪制紋理?

根據我上面的評論回答。

您應該使用glTexCoord2f ,因為您正在使用2D紋理。 此外,紋理坐標通常在[0, 1]范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM