2

私はOpenGLに比較的慣れていないので、同じサイズのQUADのテクスチャとして画像をレンダリングするときに、いくつかの問題が発生します。これが私のコードです。誰かがこの問題を解決するのを手伝ってくれたらとてもありがたいです。画像はずっと小さく見え、押しつぶされています。(ところで、画像のサイズは500x375です)。

glGenTextures( 1, &S_GLator_InputFrameTextureIDSu );
        glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

        glTexImage2D( GL_TEXTURE_2D, 0, 4, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataP);
glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, GL_RGBA, GL_UNSIGNED_BYTE, bufferP);
//set the matrix modes
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        //gluPerspective( 45.0, (GLdouble)widthL / heightL, 0.1, 100.0 );
        glOrtho (0, 1, 0, 1, -1, 1);
        // Set up the frame-buffer object just like a window.
        glViewport( 0, 0, widthL, heightL );
        glDisable(GL_DEPTH_TEST);
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );


        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();


        glBindTexture( GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu );


        //Render the geometry to the frame-buffer object


        glBegin(GL_QUADS); //input frame
            glColor4f(1.f,1.f,1.f,1.f);
            glTexCoord2f(0.0f,0.0f);    
            glVertex3f(0.f ,0.f ,0.0f);
            glTexCoord2f(1.0f,0.0f);    
            glVertex3f(1.f ,0.f,0.0f);
            glTexCoord2f(1.0f,1.f); 
            glVertex3f(1.f ,1.f,0.0f);
            glTexCoord2f(0.0f,1.f); 
            glVertex3f(0.f ,1.f,0.0f);
        glEnd();
4

2 に答える 2

1

ここで問題が発生していると思います。glViewport は、ウィンドウ サイズではなく、ビューポート サイズを定義します。したがって、(glut、sdl、wgl などを使用して) ウィンドウを作成するときは、サイズを指定する必要があります。このウィンドウへの glViewport の 1:1 マッピングを取得するには、これら 2 つが一致する必要があります。

于 2010-03-17T18:33:53.233 に答える
0

まず、画像のサイズは、任意の500x375ではなく、2の累乗である必要があります。次に、internalformat(3番目の)引数glTexImage2Dはシンボリック定数である必要があります"4"。これは、OpenGL 1.2以降で非推奨になったため、内部フォーマットのレイアウトだけでなく、内部フォーマットのレイアウトを記述します。第三に、dataPストレージbufferPレイアウトは現在のに対応している必要がありますGL_UNPACK_ALIGNMENT。第4に、テクスチャを配置しようとしている正三角形は基本的に正方形であるため、非正方形のテクスチャは、そのようなテクスチャ座標で押しつぶされたり引き伸ばされたりして表示されます。

于 2011-01-11T17:22:15.327 に答える