私が尋ねた最後の質問は、OpenGL でさまざまなモデルを描画する方法についてでした。私はそれをカバーしましたが、今はテクスチャを行うことに行き詰まっています。ここでも、テクスチャを1 つしか使用しない限り、テクスチャを簡単に機能させることができます。
テクスチャをロードするクラス:
public class Textures
{
public static int tex, tex2;
public static void load() throws IOException
{
tex = glGenTextures();
tex2 = glGenTextures();
load(tex2, "moreModels/robot.jpg", "jpg");
load(tex, "moreModels/sample.jpg", "jpg");
}
public static void load(int tex, String name, String type) throws IOException
{
glBindTexture(GL43.GL_TEXTURE_2D, tex);
glTexParameterIi(GL43.GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterIi(GL43.GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glGenerateMipmap(GL43.GL_TEXTURE_2D);
glTexParameterIi(GL43.GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterIi(GL43.GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
Texture texture = TextureLoader.getTexture(type, ResourceLoader.getResourceAsStream(name));
byte[] pixels = texture.getTextureData();
ByteBuffer buffer = BufferUtils.createByteBuffer(pixels.length);
buffer.put(pixels);
buffer.flip();
glTexImage2D(GL43.GL_TEXTURE_2D, 0, GL_BGR, texture.getImageWidth(), texture.getImageHeight(), 0, GL_BGR, GL_BYTE, buffer);
}
}
さて、 glBindTexture(GL43.GL_TEXTURE_2D, textureID)を呼び出すだけでテクスチャが変更されると思いますが、そうではありません。いつでも glBindTexture メソッドを呼び出すと、すべてが黒くレンダリングされます。
テクスチャを変更する必要があるたびに、ロード メソッド全体を実行する必要がある以前と同じですか? (おそらく Texture オブジェクトを保存するので、何度も読み込む必要はありません)。もしそうなら、変更されたときに glGenTextures() が明らかにすべてを忘れている場合、glGenTextures() を使用する意味は何ですか?