1

これは、キューブ マップを作成する私の試みです。

glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_CUBE_MAP);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
PNGDecoder pngDecoder = new PNGDecoder(ResourceLoader.getResourceAsStream("C:/desert_skymap_sample.png"));
ByteBuffer temp = ByteBuffer.allocateDirect(4*pngDecoder.getWidth() * pngDecoder.getHeight());
pngDecoder.decode(temp, pngDecoder.getWidth()*4, PNGDecoder.Format.RGBA);
temp.flip();
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,GL_RGBA,pngDecoder.getWidth(), pngDecoder.getHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,temp);


    gluLookAt(0,0,0, xtrans+xpos,ytrans+walkbias,ztrans+zpos, 0,1,0);

    glPushAttrib(GL_ENABLE_BIT);
    glDisable(GL_DEPTH_TEST);

    glColor4f(1,1,1,1);

    glBindTexture(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_POSITIVE_X);
    glBegin(GL_QUADS);
      glTexCoord2f(0, 0);
      glVertex3f(1f, -1f, -1f);
      glTexCoord2f(1, 0);
      glVertex3f(-1f, -1f, -1f);
      glTexCoord2f(1, 1);
      glVertex3f(-1f, 1f, -1f);
      glTexCoord2f(0, 1);
      glVertex3f(1f, 1f, -1f);
    glEnd();

    glBindTexture(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_NEGETIVE_X);
    glBegin(GL_QUADS);
        glTexCoord2f(0, 0);
        glVertex3f(1f, -1f, 1f);
        glTexCoord2f(1, 0);
        glVertex3f(1f, -1f, -1f);
        glTexCoord2f(1, 1);
        glVertex3f(1f, 1f, -1f);
        glTexCoord2f(0, 1);
        glVertex3f(1f, 1f, 1f);
    glEnd();

TWL の PngDecoder を使用しています。問題は、テクスチャ ID を取得する方法や TexImage2D を取得する方法がわからない、または正しく行っているかどうかです。

LWJGL でキューブマップを作成するにはどうすればよいですか?

4

2 に答える 2

1

コードを機能させるには、コードに追加する必要があるものがいくつかあります。

  1. mikera が述べたように、glLookAt で「カメラ」をセットアップする必要があります。
  2. テクスチャをレンダリングするジオメトリも定義する必要があります。これを行うには、2 次元空間でカメラの周りにボックスを定義するのが最も簡単です。顔の法線も忘れずに設定してください。

ここには、opengl を使用したハードウェア キューブ マッピングに関するかなり広範な記事があります (これはマルチベンダー拡張です): http://www.nvidia.com/object/cube_map_ogl_tutorial.html

于 2012-10-08T11:15:38.660 に答える
1

gluLookAtカメラの変換を適切に設定するために、最初にどこかに電話が必要になると思います。

見て:

上記camera->x, camera->y, camera->zの例の要素は、カメラが見ている方向を表すベクトルに置き換える必要があります。

于 2012-10-06T00:52:01.857 に答える