如何从jpg图像加载纹理并将其显示为背景?

时间:2013-02-08 10:30:22

标签: c# opengl tao-framework

我正在制作一个简单的3D程序,现在我需要插入一个2D图像作为背景。我需要将tao框架用于大学。这是代码的一部分。如何将图像加载到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 个答案:

答案 0 :(得分:2)

纹理本身不是int数组。 int texture只是纹理的一个唯一标识符 - 通常第一个创建的纹理具有id = 0,第二个id = 1等(其驱动程序依赖 - 系统上的ID可能完全不同)

要指定二维纹理图像,您必须使用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); 

您可以将图像转换为字节数组,而不是使用随机数据,如here

所述
相关问题