簡體   English   中英

在c中讀取OpenGL的jpg紋理

[英]Reading jpg texture for OpenGL in c

這是一個1024 x 512 jpg。
size變量返回84793。
我不明白的一件事是當1024 * 512 = 524288時84793作為文件的大小。
我認為這將是* 3,因為每個像素3個通道。
count變量返回65。
現在,當我設置OpenGL紋理參數時,我正在獲取此行上的訪問沖突讀取位置:

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,texWidth,texHeight,0,GL_RGB,GL_UNSIGNED_BYTE,texPtr);

其中texWidth和texHeight的寬度和高度從下面。

這是我目前的情況:

int width = 1024;
int height = 512;
long size  = 0;
GLubyte * data;
FILE * file;
char name[100];
int count;

int test;

strcpy(name, filename);
// open texture data
file = fopen( name, "r" );
if ( file == NULL )
{
fputs ("File error",stderr); 
exit (1);
 }
 fseek (file , 0 , SEEK_END);
 size = ftell( file );
 rewind(file);
// allocate buffer
data = (unsigned char *)malloc( sizeof(char)*size );

count = (int) fread (data,sizeof(unsigned char) ,size,file);
fclose( file );

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

initTexture(dayGLTexture, width, height, data);

OpenGL不處理JPEG壓縮,也不處理JPEG圖像文件格式。 你不能只是在磁盤上取一個文件,將它放入內存並將其交給OpenGL。 您必須閱讀文件格式,將其處理為OpenGL實際可以讀取的表單,然后將其提供給OpenGL。

對於各種不同的圖像格式,您可以使用許多庫來執行此操作。 您還應該了解OpenGL如何理解您提供的像素數據 ,以及了解內部圖像格式參數的含義。

您無法直接將圖像文件直接傳遞給OpenGL。 圖像文件是容器。 它們包含的數據必須首先解壓縮並解碼。 有些文件格式可能包含OpenGL(平面數據)可直接消化的形式的數據,其中包括TGA和BMP。

但是,您永遠不應將文件的數據直接傳遞給某些API(除非您正在構建文件傳輸或復制程序)。

讀取圖像文件始終需要執行以下步驟:

  • 讀取和解釋元數據(標題,尾部或兩者)。
  • 基於元數據信息准備中間緩沖區和讀取/解碼過程。
  • 從文件中讀取數據並對其進行解碼(對於平面文件,這可能仍需要一些字段調整,位掩碼和顏色校正)。 必須首先解壓縮壓縮數據。 JPEG是一種有損壓縮方案
  • 將數據傳遞給OpenGL,或者將其保存在緩沖區中供以后使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM