0

SharpGL ラッパーを使用して、実行時に生成されたテクスチャで三角形をテクスチャリングしようとしています。

三角形がテクスチャ化されていない理由がわかりません。

描画ループに置かれた gl.Error() は、GL_NO_ERROR を意味する 0 を返します。

 private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
    {

        OpenGL gl = openGLControl.OpenGL;
        gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT );
        gl.LoadIdentity();
        gl.Color(1.0f,1.0f,1.0f,1.0f);
        gl.Begin(OpenGL.GL_TRIANGLES);
        gl.TexCoord(0, 1.0f);
        gl.Vertex(0.0f, 0.0f);
        gl.TexCoord(1.0f, 0f);
        gl.Vertex(1.0f, 0f);
        gl.TexCoord(1.0f, 1.0f);
        gl.Vertex(1.0f, 1.0f);
        gl.End();

    }

    private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
    {

        Random rnd = new Random();
        OpenGL gl = openGLControl.OpenGL;
        gl.ClearColor(0, 0, 0, 0);

        gl.Enable(OpenGL.GL_TEXTURE_2D);

        byte[] colors = new byte[256 * 256 * 4];

        for (int i = 0; i < 256 * 256 * 4; i++)
        {
            colors[i] = (byte)rnd.Next(256);
        }

        uint[] textureID = new uint[1];
        gl.GenTextures(1, textureID);
        gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGBA, 256, 256, 0, OpenGL.GL_RGBA, OpenGL.GL_BYTE, colors);
        gl.BindTexture(OpenGL.GL_TEXTURE_2D, textureID[0]);

    }
4

2 に答える 2

0

テクスチャが表示されなかった理由は、設定が不足していたためです。

uint[] array = new uint[] { OpenGL.GL_NEAREST };
        gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, array);
        gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, array);

デフォルトでは、SharpGL は生成されなかった MipMap を使用しています。

于 2016-10-11T22:17:01.963 に答える