C # (OpenTK) Треугольники, рисующие примерно с половиной непрозрачности - PullRequest
0 голосов
/ 02 ноября 2018

Совсем недавно каждый треугольник в моем коде начал рисовать примерно с половиной непрозрачности. Я написал новую программу с нуля, и она отлично работает. У меня есть весь код, который, как мне кажется, может вызывать у меня проблемы с этой новой программой, и он работает нормально.

Как это должно выглядеть

Как это выглядит на самом деле

Нет ошибок, выводимых на консоль, кроме некоторых предупреждений о том, что я не реализовал некоторые вещи вращения, к которым я вернусь позже

Все, что я могу придумать, может быть даже немного относительным

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 не работает, и форум с ним, но если бы он был, я бы опубликовал там.

...