我問的最後一個問題是關於如何在OpenGL中繪製不同的模型。我已經覆蓋了,但現在我堅持做紋理。我再次可以輕鬆地獲取紋理,只要我只使用一個紋理。OpenGL使用每個模型的特定紋理
加載紋理類:現在
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()改變時它忘記了它的一切時有什麼意義?
這是一個想法;在將OpenGL東西封裝在對象中之前,首先使用OpenGL *而不使用*對象。一旦你習慣了那樣,*然後*你可以圍繞它構建你的結構。 –
這是什麼API? JOGL?你能顯示你的片段着色器嗎? –