0

基本的に、シーン内のさまざまなウィンドウをシミュレートするためにいくつかのテストを行っています。シーン内で描画しているウィンドウをより適切に配置しようとするまで、すべてが正常に機能します。

重要なコードは次のとおりです。

// camFront = glReadPixels ...

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//glRasterPos3f(1.0, 0.5, 0.0);  // <-- commented out

// Zooming window
glPixelZoom(0.5, 0.5);      

glDrawPixels(500, 250, GL_RGB, GL_UNSIGNED_BYTE, camFront);  //> camFront is the buffer of the window
glutSwapBuffers();  

基本的にglRasterPos3fがコメントアウトされると、素敵なウィンドウがシーン内に描画されます。

ここに画像の説明を入力

今、そのウィンドウを で配置しようとするとglRasterPos3f、ウィンドウはシーンから完全に消えます... 手がかりはありますか?

4

1 に答える 1

2

1 つの可能性 この問題の原因は、無効な rasterpos です。ラスター pos は、他のピクセルと同様に x、y、z を変換した後に設定されます。これにはクリッピング段階が含まれます。

簡単なテストは、x、y、z に明るい点 (またはより目立つもの) が描画されたときに画面に表示されるかどうかを確認することです。

(1.0, 0.5, 0.0) は画面のどこにありますか? 見えますか?

座標は、画面に投影されて 2D 座標になる可視点でなければなりません。モデルビュー部分の前にコードを配置してみてください。おそらく、座標は期待した場所になります。

glLoadIdentity でマトリックスをリセットするため、ポイント (1.0, 0.5, 0.0) は画面の右端になります。

GLboolean valid;
glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid);
if(valid == GL_FALSE) 
    printf("Error");

(2 番目のテストは、何かを描画するよりも優れていますが、無効でない場合はどこに描画されているかを知るのに役立ちません)

于 2013-12-29T15:42:13.903 に答える