たとえば、Windows フォームで SimpleOpenGLControl コンポーネントを使用して、線を描画しようとしています。または他のテクスチャのないもの。glcolor3b、3ub、3d、3f 関数、4 つのパラメーターを持つ類似関数を使用しても、何も起こりません。色はそのままで、この色がどうなるかわかりません。あるプロジェクトでは緑のようで、別のプロジェクトではライトグレーのようです. これで、メソッド LoadTextureForModel の Background クラスに問題があることがわかりました。
public class Background : Visible
{
public Background(string Path)
{
LoadTextureForModel(Path);
}
public override void Display()
{
MyGlutUser.DrawRect((int)TextureObj(), new FPoint(0, 0),
MyGlutUser.WorldW + 100, MyGlutUser.WorldH + 100);
}
}
public abstract class Visible
{
public abstract void Display();
public String PathToImage
{ get; set; }
public RGBubColor Color
{ get; set; }
protected int imageID;
public int ImageID
{
get
{
return imageID;
}
set
{
imageID = value;
}
}
protected int mGlTextureObject { get; set; }
public FPoint Location
{ get; set; }
public static int Counter = 0;
public int TextureObj()
{
return mGlTextureObject;
}
public void LoadTextureForModel(string FileName)
{
PathToImage = FileName;
Il.ilGenImages(1, out imageID);
Il.ilBindImage(imageID);
if (Il.ilLoadImage(PathToImage))
{
int width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH);
int height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT);
int bitspp = Il.ilGetInteger(Il.IL_IMAGE_BITS_PER_PIXEL);
switch (bitspp) // в зависимости оп полученного результата
{
case 24:
mGlTextureObject = MakeGlTexture(Gl.GL_RGB, Il.ilGetData(), width, height);
break;
case 32:
mGlTextureObject = MakeGlTexture(Gl.GL_RGBA, Il.ilGetData(), width, height);
break;
}
Il.ilDeleteImages(1, ref imageID);
}
}
線を引くためのコード:
public static void DrawLine(FPoint p1, FPoint p2)
{
Gl.glBegin(Gl.GL_LINES);
Gl.glVertex2d(p1.x, p1.y);
Gl.glVertex2d(p2.x, p2.y);
Gl.glEnd();
}
public static void DrawLine(RGBubColor Color, FPoint p1, FPoint p2)
{
Gl.glColor3d((double)Color.r / 255.0, (double)Color.g / 255.0, (double)Color.b / 255.0);
DrawLine(p1, p2);
}
public struct RGBubColor
{
public byte r; public byte g; public byte b;
public RGBubColor(byte r, byte g, byte b)
{
this.r = r;
this.g = g;
this.b = b;
}
};
呼び出し:
GlutUser.DrawLine(new RGBubColor(127, 0, 0), 5, new FPoint(0, 0), new FPoint(500, 500));
LoadTextureForModel 関数を修正する方法が必要です。