2012-04-15 35 views
0

進出口試圖創建使用此訥河Loadraw加載圖像的多邊形和繪製使用紋理大小

GLuint LoadTextureRAW(const char * filename, int wrap) 
{ 
GLuint texture; 
int width, height; 
Byte * data; 
FILE * file; 

// open texture data 
file = fopen("Data/raw.raw", "rb"); 
if (file == NULL) return 0; 

// allocate buffer 
width = 256; 
height = 256; 
data = malloc(width * height * 3); 

// read texture data 
fread(data, width * height * 3, 1, file); 
fclose(file); 

// allocate a texture name 
glGenTextures(1, &texture); 

// select our current texture 
glBindTexture(GL_TEXTURE_2D, texture); 

// select modulate to mix texture with color for shading 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

// when texture area is small, bilinear filter the closest MIP map 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
       GL_LINEAR_MIPMAP_NEAREST); 
// when texture area is large, bilinear filter the first MIP map 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

// if wrap is true, the texture wraps over at the edges (repeat) 
//  ... false, the texture ends at the edges (clamp) 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 
       wrap ? GL_REPEAT : GL_CLAMP); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 
       wrap ? GL_REPEAT : GL_CLAMP); 

// build our texture MIP maps 
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, 
        height, GL_RGB, GL_UNSIGNED_BYTE, data); 

// free buffer 
free(data); 

return texture; 

}

在OpenGL紋理的多邊形,然後創建多邊形 紋理= LoadTextureRAW(「 texture.raw「,TRUE);

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glBegin(GL_POLYGON); 
glVertex3f(-42.0f, -42.0f, 0.0f); 
glTexCoord2f(0.0f, 0.0f); 
glVertex3f( 42.0f, -42.0f, 0.0f); 
glTexCoord2f(1.0f, 0.0f); 
glVertex3f( 42.0f, 42.0f, 0.0f); 
glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-42.0f, 42.0f, 0.0f); 
glTexCoord2f(0.0f, 1.0f); 
glEnd(); 

我能怎樣改變圖像的任何規模大小加載不僅2的冪和創建使用紋理的一側,而不是

回答

2

你已經問了好幾個不同的問題座標的多邊形。

  • 如何下載圖片?

對於圖像數據的二進制轉儲,RAW不是真正的「圖像格式」。 RAW圖像不包含它們有多大的信息(或者它們是什麼格式)。你需要通過其他方式知道它有多大。

你需要做的是使用合適的image loading library加載一個真實的圖像格式。其中一些只是通用的圖像加載程序,但其他一些則是爲了與OpenGL集成而設計的,並且可以爲您自動創建紋理。

  • 如何加載任意大小的圖像?

一個合適的圖像加載器有API來告訴你圖像有多大(以及格式信息)。

請注意,OpenGL 2.0及以上版本支持非功率爲2的圖像。 gluBuild2DMipmaps不!至少,不正確。 gluBuild2DMipmaps將嘗試將任何非冪次冪圖像縮放爲冪次冪。因此,您需要使用實際的OpenGL調用(GLU不是OpenGL的一部分,它位於GL之上),如glTexImage2D

  • 如何以像素精度渲染圖像?

This answer提供了此過程所需的所有信息。

+0

哇,非常感謝你,這幫助我很多我在錯誤的方式爲我需要什麼 – 2012-04-15 01:40:12