0

この例では、誰かが解決してくれることを期待して、できるだけ問題を単純化しようとしました。

テクスチャを表示するための C# OpenGL コードの簡単な作業例が見つかりませんでした。ということで、こちらを作ってみました。残念ながら、このコードは私には機能しません。エラーは発生しませんが、テクスチャも発生しません。

多分私はそれを間違って設定しました。おそらく、誰かがこのコードを貼り付けて、実行されるかどうかを確認できます。

using System;
using System.Drawing;
using Tao.OpenGl;
using Tao.DevIl;
using System.Windows.Forms;

namespace TextureTest
{
public partial class Form1 : Form
{
    int imageID = 1;
    int texture = 1;

    public Form1()
    {
        InitializeComponent();
        OpenGlControl.InitializeContexts();

        Il.ilInit();
        Il.ilBindImage(imageID);

        bool success = Il.ilLoadImage(@"test.bmp");

        Il.ilConvertImage(Il.IL_RGBA, Il.IL_UNSIGNED_BYTE);

        Gl.glEnable(Gl.GL_TEXTURE_2D);
        Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture);
        Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
        Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
        Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Il.ilGetInteger(Il.IL_IMAGE_BPP), 
                        Il.ilGetInteger(Il.IL_IMAGE_WIDTH), Il.ilGetInteger(Il.IL_IMAGE_HEIGHT), 0, 
                        Il.ilGetInteger(Il.IL_IMAGE_FORMAT), Gl.GL_UNSIGNED_BYTE, Il.ilGetData());

        Il.ilDeleteImage(imageID);

        Gl.glBegin(Gl.GL_QUADS);

            Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex2f(-1.0f, -1.0f);
            Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex2f(1.0f, -1.0f);
            Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex2f(1.0f, 1.0f);
            Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex2f(-1.0f, 1.0f);

        Gl.glEnd();

        Gl.glFlush();
        Gl.glDeleteTextures(1, ref texture); 
     }
}
}
4

2 に答える 2

0

この問題に対する非常に簡単な解決策を見つけました。

Ulut 関数 "Ilut.ilutGLLoadImage" を使用すると、ほとんどすべてが処理されます。少なくとも、ここに示した単純な例では。

うまくいけば、他の誰かがこのコードが役に立つと思うでしょう。

using System;
using System.Drawing;
using Tao.OpenGl;
using Tao.DevIl;
using System.Windows.Forms;

namespace TextureTest
{
    public partial class Form1 : Form
    {
        int texture;

        public Form1()
        {
            InitializeComponent();
            OpenGlControl.InitializeContexts();

            Il.ilInit();
            Ilut.ilutInit();

            texture = Ilut.ilutGLLoadImage("test.bmp");

            Gl.glBegin(Gl.GL_QUADS);

                Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex2f(-1.0f, -1.0f);
                Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex2f(1.0f, -1.0f);
                Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex2f(1.0f, 1.0f); 
                Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex2f(-1.0f, 1.0f);

            Gl.glEnd(); 
        }
    } 
}
于 2011-04-30T21:17:36.110 に答える
0

をいじらずにテクスチャを読み込んでみてくださいglEnable。描画する準備ができたらglEnable(GL_TEXTURE_2D);、テクスチャを呼び出して再度バインドします。

また、シングル バッファまたはダブル バッファのどちらで使用するように構成されているかわかりません。への電話が必要な場合がありますSwapBuffers

于 2011-04-30T19:46:06.643 に答える