Как загрузить текстуру из изображения jpg и отобразить ее в качестве фона?

Я делаю простую 3D-программу, и теперь мне нужно вставить 2D-изображение в качестве фона. Мне нужно использовать Дао рамки для колледжа. Это часть кода. Как мне загрузить изображение в int массив?

Gl.glEnable(Gl.GL_TEXTURE_2D);

int texture;        // storage for texture for one picture
texture = ????? ;
Gl.glGenTextures(1, texture); ??????

                                // Create The Texture

  // Typical Texture Generation Using Data From The Bitmap
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);       // Linear Filtering
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);   

1 ответ

Решение

Сама текстура не является массивом int. int texture это просто неузнаваемый идентификатор текстуры - обычно первая созданная текстура имеет идентификатор = 0, второй идентификатор = 1 и т. д. (зависит от драйвера - идентификаторы могут полностью отличаться в вашей системе)

Чтобы указать двухмерное изображение текстуры, вы должны использовать Gl.glTexImage2D(...)

Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture);

// some random data
Random r = new Random(); 
byte[] image = new byte[512 * 512 * 3]; 
for (int i = 0; i < 512 * 512; i++) 
{ 
       image[i * 3 + 0] = (byte)r.Next(0, 255); 
       image[i * 3 + 1] = (byte)r.Next(0, 255); 
       image[i * 3 + 2] = (byte)r.Next(0, 255); 
} 

Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, 512, 512, 0, 
                Gl.GL_BGR_EXT, Gl.GL_UNSIGNED_BYTE, image); 

Вместо использования случайных данных вы также можете преобразовать изображение в байтовый массив, как описано здесь

Другие вопросы по тегам