0

次のコードを使用して、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 つの面すべてではなく、1 つの面だけに表示されることです。

立方体のすべての面にテクスチャを描画するにはどうすればよいですか?

4

1 に答える 1

2

上記の私のコメントに基づいて答えてください。

glTexCoord2f2D テクスチャを使用しているため、を使用する必要があります。また、テクスチャ座標は通常、範囲内にあります[0, 1]

于 2012-04-19T20:59:38.443 に答える