Совсем недавно каждый треугольник в моем коде начал рисовать примерно с половиной непрозрачности. Я написал новую программу с нуля, и она отлично работает. У меня есть весь код, который, как мне кажется, может вызывать у меня проблемы с этой новой программой, и он работает нормально.
Как это должно выглядеть
Как это выглядит на самом деле
Нет ошибок, выводимых на консоль, кроме некоторых предупреждений о том, что я не реализовал некоторые вещи вращения, к которым я вернусь позже
Все, что я могу придумать, может быть даже немного относительным
Game.cs
public void GameRender()
{
foreach (GameObject obj in gameObjects)
{
obj.Draw();
}
foreach (Glider obj in gliders)
{
obj.GO.Draw();
}
terrain.draw();
RenderGameHud();
}
public void RenderGameHud()
{
//switch to 2d rendering
GL.MatrixMode(MatrixMode.Projection);
GL.PushMatrix();
GL.LoadIdentity();
GL.Ortho(0.0, Width, Height, 0.0, -1.0, 10.0);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Clear(ClearBufferMask.DepthBufferBit);
//draw all hud elements
foreach (HudElement item in Hud)
{
item.Draw();
}
// switch back to 3d rendering
GL.MatrixMode(MatrixMode.Projection);
GL.PopMatrix();
GL.MatrixMode(MatrixMode.Modelview);
}
HudElement.cs
public void Draw()
{
GL.BindTexture(TextureTarget.Texture2D, texture.ID);
GL.Begin(PrimitiveType.Quads);
GL.Color3((byte)255, (byte)255, (byte)255);
GL.TexCoord2((CurrTexture)/ (float)subs, 0);
GL.Vertex2(Game.gamesize.Width * xP, Game.gamesize.Height * yP);
GL.TexCoord2((CurrTexture + 1) / (float)subs, 0);
GL.Vertex2(Game.gamesize.Width * (xP + xS), Game.gamesize.Height * yP);
GL.TexCoord2((CurrTexture + 1) / (float)subs, 1);
GL.Vertex2(Game.gamesize.Width * (xP + xS), Game.gamesize.Height * (yP + yS));
GL.TexCoord2((CurrTexture) / (float)subs, 1);
GL.Vertex2(Game.gamesize.Width * xP, Game.gamesize.Height * (yP + yS));
GL.End();
}
Gameobject.cs
public void Draw()
{
Translate(pos);
foreach (Tri tri in tris)
{
tri.Draw();
}
Translate(-pos);
}
Tri.cs
public void Draw()
{
if (isRenderable())
{
GL.Begin(PrimitiveType.Triangles);
GL.Color3(p1c);
GL.Vertex3(p1);
GL.Color3(p2c);
GL.Vertex3(p2);
GL.Color3(p3c);
GL.Vertex3(p3);
GL.End();
}
}
Terrain.cs
public void draw()
{
GL.PushMatrix();
for (int i = 0; i < terrainData.GetLength(0)-1; i++)
{
for (int j = 0; j < terrainData.GetLength(1)-1; j++)
{
if ((terrainData[i, j].height) * scaleY > waterHeight * scaleY)
{
using (Tri tri = new Tri(new Vector3(i * scaleX, (terrainData[i, j].height) * scaleY, j * scaleZ) + offset, new Vector3((i + 1) * scaleX, (terrainData[i + 1, j].height) * scaleY, j * scaleZ) + offset, new Vector3((i + 1) * scaleX, (terrainData[i + 1, j + 1].height) * scaleY, (j + 1) * scaleZ) + offset))
{
tri.setColour(terrainData[i, j].col);
tri.Draw();
}
using (Tri tri = new Tri(new Vector3(i * scaleX, (terrainData[i, j].height) * scaleY, j * scaleZ) + offset, new Vector3((i + 1) * scaleX, (terrainData[i + 1, j + 1].height) * scaleY, (j + 1) * scaleZ) + offset, new Vector3(i * scaleX, (terrainData[i, j + 1].height) * scaleY, (j + 1) * scaleZ) + offset))
{
tri.setColour(terrainData[i, j].col);
tri.Draw();
}
}
}
}
//draw water
GL.Begin(PrimitiveType.Quads);
GL.Color3(Color.Blue);
GL.Vertex3(new Vector3(0, waterHeight * scaleY, 0) + offset);
GL.Vertex3(new Vector3(terrainData.GetLength(0) * scaleX, waterHeight * scaleY, 0) + offset);
GL.Vertex3(new Vector3(terrainData.GetLength(0) * scaleX, waterHeight * scaleY, terrainData.GetLength(1) * scaleZ) + offset);
GL.Vertex3(new Vector3(0, waterHeight * scaleY, terrainData.GetLength(1) * scaleZ) + offset);
GL.End();
GL.PopMatrix();
}
(inb4 "квадратные скобки в неправильных строках")
Я экспериментировал с перемещением объектов, таких как RenderGameHud (), но это приводит к тому, что после того, как все в функции рисования перестало рисоваться, а полное его удаление делает невозможным рисование всего
Я работал над этим довольно долго, и он может быть слишком раздутым, чтобы понять, что идет не так, но я пытался около недели, и я просто не понял, что происходит неправильно, и это начинает сводить меня с ума. Я не хотел бы спрашивать здесь, потому что каждый раз, когда я делаю, я, кажется, получаю что-то не так, но я терял надежду получить помощь любым другим способом. Веб-сайт OpenTK не работает, и форум с ним, но если бы он был, я бы опубликовал там.