2017-07-18 8 views
1

テクスチャを四方に描画したい。私は次のように整理する画素の1D unsigned char型バッファから私のテクスチャをバインドしたい:Open GL - ピクセルバッファからテクスチャをロードする方法

enter image description here

各ピクセルは2バイトで構成され、これらの2つのバイトは、16ビットグレースケール値です。

私は実際に多くのことを試してみましたが、私は私のクワッドに何を見ることができない。

void RawImageDrawer::initializeGL() { 
    glShadeModel(GL_SMOOTH); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0f); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_TEXTURE_2D); 
    glDepthFunc((GL_LEQUAL)); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
} 

void RawImageDrawer::resizeGL(int width, int height) { 
    if (height == 0) 
    height = 1; 
    glViewport(0, 0, width, height); 
    glMatrixMode(GL_MODELVIEW);*/ 
    glLoadIdentity(); 
} 

void RawImageDrawer::loadTexture() { 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexImage2D(
    GL_TEXTURE_2D, 
    0, 
    GL_RED, 
    1024, 
    1024, 
    0, 
    GL_LUMINANCE, 
    GL_UNSIGNED_BYTE, 
    buffer //unsigned char* described up there 
); 
} 

void RawImageDrawer::paintGL() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, 0.0f); 

    glBindTexture(GL_TEXTURE_2D, texture); 

    glBegin(GL_QUADS); 
    glTexCoord2i(0,0); glVertex3f(-0.5f, -0.5f, 0); 
    glTexCoord2i(0,1); glVertex3f(0.5f, -0.5f, 0); 
    glTexCoord2i(1,1); glVertex3f(0.5f, 0.5f, 0); 
    glTexCoord2i(1,0); glVertex3f(-0.5f, 0.5f, 0); 
    glEnd(); 
} 

私もTEXTURE_1DにTEXTURE_2Dを変更しようとしました、ので...

答えて

0

を何も変更しませんでしたバッファが16ビットグレースケールの場合、GL_UNSIGNED_BYTEの代わりにGL_UNSIGNED_SHORTと指定します。 16ビットデータの場合、65535が完全な明度値であるため、値が[0、65535]の範囲全体に広がっていることを確認してください。

また、internalFormatパラメータの有効値はglTexImage2Dではありませんでした。代わりに、format引数の場合は、internalFormatGL_REDにはGL_R16を使用する必要があります。

+0

答えをくれてありがとう、これらの変更を加えましたが、私はまだ問題があります。TEXTURE_2Dを使用すると、glTexImage2D関数呼び出しでプログラムがクラッシュします。 TEXTURE_1Dを使用してもプログラムはクラッシュしませんが、クワッドには何もしません。私のuchar *配列は、実際のデータの前後にパディングする必要がありますか? –

+0

@LaurentJerber:デフォルトでは、行間のオフセットは4バイトの倍数でなければなりませんが、投稿したコードではすでにそうです。それでもクラッシュした場合は、投稿していないコードのどこかに問題がなければなりません。特に、バッファをどのように割り当てるかを見てください。おそらくバグがあります。 – ybungalobill

関連する問題