【解決方法】C++ glteximage2d が int 配列で機能しない

プログラミングQA


glTexImage2D を使用してビットマップ int 配列を描画しようとしてきましたが、白い何も出力されません。 代わりにint配列をchar配列として初期化すると、範囲外のメモリからごちゃごちゃした乱雑なピクセルが出力されますが、int配列をchar配列にキャストしようとすると、白さしかレンダリングされません。

私が試したこと:

memcpy を使用して、int を PixelsTemp という 4 倍の大きな配列にコピーしようとしましたが、何らかの理由でまだ白です。 PixelsTemp のいくつかの値を手動で変更した場合[211]、単一の青いピクセルが表示されますが、memcpy からは何も表示されません。 PixelsTemp は実際には glDrawPixels で問題なく動作するため、意味がありませんが、glTexImage2D では白にすぎません。 助けてください。

C++
void beginRefresh() {
            //BITMAPINFO bmi = tbmi;
            //while (true) {                                                      //v these may be important later
            //StretchDIBits(bp, 0, 0, realwidth, realheight, 0, 0, width, height, Pixels, &bmi, DIB_RGB_COLORS, SRCCOPY);

            /*glDrawPixels(width,
                height,
                GL_RGBA,
                GL_UNSIGNED_BYTE,
                Pixels);*/
            unsigned char* PixelsTemp = new unsigned char[width * height * 4];
            memcpy(PixelsTemp, Pixels, width * height * 4);

            glEnable(GL_TEXTURE_2D);
            glGenTextures(1, &glBuffer);
            glBindTexture(GL_TEXTURE_2D, glBuffer);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
            glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
            //unsigned char* PixelsTemp = (unsigned char*)Pixels;
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, PixelsTemp);
            UpdateViewport();
            glClear(GL_COLOR_BUFFER_BIT); // Thanks Benedani!
            glViewport(nViewX, nViewY, nViewW, nViewH);
            glBegin(GL_QUADS);
            glTexCoord2f(0.0, 1.0); glVertex3f(-1.0f + (fSubPixelOffsetX), -1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(0.0, 0.0); glVertex3f(-1.0f + (fSubPixelOffsetX), 1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(1.0, 0.0); glVertex3f(1.0f + (fSubPixelOffsetX), 1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(1.0, 1.0); glVertex3f(1.0f + (fSubPixelOffsetX), -1.0f + (fSubPixelOffsetY), 0.0f);
            glEnd();
            //glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, PixelsTemp);
            delete[] PixelsTemp;

            SwapBuffers(glDeviceContext);
        }

解決策 1

答えはありませんが、ヒントが得られるかもしれないいくつかのサンプル プロジェクトを次に示します。
50 の OpenGL Win32 プロジェクトを 1 つに[^]
50 の OpenGL MFC プロジェクトを 1 つに[^]
OpenGL MFC で独自の Quadrics[^]

コメント

タイトルとURLをコピーしました