Создание 2d игры на C# при помощи OpenGL
игра двухмерная (вид сверху).
игрок управляет работом.
нижняя часть робота - передвигается по 8 направлениям (север, сереро-запад и тд).
верхняя часть робота - вышка. она вращается вокруг центра робота.
за вращение отвечает позиция мыши. куда курсор туда и направлена вышка.
сейчас вместо нижней части работа ездит квадрат.
как можно поместить в него рисунок робота? пытаюсь так:
// текстурный объект
public uint mGlTextureObject = 0;
// индефекатор текстуры
public int imageId = 0;
public Form1()
{
InitializeComponent();
AnT.InitializeContexts();
}
private void Form1_Load(object sender, EventArgs e)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
Il.ilInit();
Il.ilEnable(Il.IL_ORIGIN_SET);
Gl.glClearColor(255, 255, 255, 1);
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluOrtho2D(0.0, AnT.Width, 0.0, AnT.Height);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
//Gl.glEnable(Gl.GL_DEPTH_TEST);
//Gl.glEnable(Gl.GL_LIGHTING);
//Gl.glEnable(Gl.GL_LIGHT0);
Il.ilGenImages(1, out imageId);
Il.ilBindImage(imageId);
if (Il.ilLoadImage(“1.jpg”))
{
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);
RenderTimer.Start();
Thread thP = new Thread(deystvie);
thP.Start();
}
else
{
Application.Exit();
}
}
private static uint MakeGlTexture(int Format, IntPtr pixels, int w, int h)
{
// индетефекатор текстурного объекта
uint texObject;
// генерируем текстурный объект
Gl.glGenTextures(1, out texObject);
// устанавливаем режим упаковки пикселей
Gl.glPixelStorei(Gl.GL_UNPACK_ALIGNMENT, 1);
// создаем привязку к только что созданной текстуре
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texObject);
// устанавливаем режим фильтрации и повторения текстуры
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);
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.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE);
// создаем RGB или RGBA текстуру
switch (Format)
{
case Gl.GL_RGB:
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, w, h, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, pixels);
break;
case Gl.GL_RGBA:
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, w, h, 0, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, pixels);
break;
}
// возвращаем индетефекатор текстурного объекта
return texObject;
}
public bool bUp = false;
public bool bRight = false;
public bool bDown = false;
public bool bLeft = false;
public static int Nap = 0;
private void RenderTimer_Tick(object sender, EventArgs e)
{
Draw();
}
private void Draw()
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
//Gl.glClearColor(255, 255, 255, 1);
Gl.glColor3f(255, 0, 0);
Gl.glLoadIdentity();
Gl.glEnable(Gl.GL_TEXTURE_2D);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, mGlTextureObject);
Gl.glPushMatrix();
Gl.glBegin(Gl.GL_QUADS);
Gl.glVertex2d(player.posX - player.width / 2, player.posY - player.height / 2);
Gl.glTexCoord2f(0, 0);
Gl.glVertex2d(player.posX - player.width / 2, player.posY + player.height / 2);
Gl.glTexCoord2f(0, 1);
Gl.glVertex2d(player.posX + player.width / 2, player.posY + player.height / 2);
Gl.glTexCoord2f(1, 1);
Gl.glVertex2d(player.posX + player.width / 2, player.posY - player.height / 2);
Gl.glTexCoord2f(1, 0);
Gl.glEnd();
//Gl.glFlush();
Gl.glPopMatrix();
Gl.glDisable(Gl.GL_TEXTURE_2D);
AnT.Invalidate();
}
static Robots player = new Robots();

получается только красный квадрат
как в него поместить рисунок из файла?