如何使用.NET Core进行绘图?

21

有没有一种方法可以在.NET Core上绘制和显示图形?我想创建一个可以在多个平台上运行的图形应用程序。


也许你可以查看这个问题,那里有一些可能对你有趣的答案。 - Ludricio
4个回答

11

你可以使用OpenGL在.NET Core中绘制图形,但这似乎有点繁琐,如果你只想使用C#而不是.NET Core,也许Unity是一个更好的选择Unity

如果您正在尝试制作带有GUI元素的“桌面应用程序”,您还可以尝试使用ElectronTypeScript(类似于C#),例如Visual Studio Code就是这样制作的。

编辑:我刚刚发现了另一篇非常有趣的文章(由我在评论中提到的同一个人编写)使用.NET Core构建3D游戏引擎,我相信你可以从中获得一些灵感,了解如何使用OpenTK、Veldrid和ImGui.NET进行屏幕绘制。


好的,我明白了,使用.NET Core在屏幕上绘制跨平台内容是不可能的,因此我们必须依赖于特定于平台的一组“平台调用”,对吗? - SuperJMN
2
我在图形处理方面并不是专家,但在我的回答中,文章的结尾处提到了这些人 https://github.com/mellinoe ,从快速浏览来看,他有4个非常有趣的项目,都以更抽象的方式进行.NET Core图形处理(ImGui.NET、vk、veldrid、ge),他还为一些名为Avalonia的东西做出了贡献,你也可以去看看,但我还没有弄清楚它是否在.NET Core上运行编辑:还要看看OpenTK https://www.nuget.org/packages/OpenTK.NETCore/ - Staeff
Avalonia?我也在与它合作!我会去看看的! - SuperJMN
1
@SuperJMN,我刚刚进行了编辑,因为我发现了另一篇有趣的文章,所以也许你可以看一下。 - Staeff
1
无论您选择什么最终呈现方式,都要尝试以清晰的层次边界逻辑编写代码,这将有助于您进行更改而不会浪费太多时间。例如,您的自定义方法DrawSphere(...)将提供绘制球体的逻辑指令。只有在该方法下方的代码才是针对您选择的库的具体绘制内容,而上方的代码则完全是逻辑性的。 - Stefanos Zilellis

3

您可以使用 System.Drawing.Common NuGet 包,支持 .net core,但请注意有些方法不支持跨平台。


2

另一个支持基本2D图形和监听窗口事件(如输入)的库是SFML,它有C#绑定形式的SFML.Net

只需启动新的NET Core控制台应用程序并将SFML.Net NuGet包添加到项目中。

然后使用以下代码替换程序的主体:

using SFML.Graphics;
using SFML.Window;
using System;

class Program
{
    static void Main(string[] args)
    {
        RenderWindow window = new RenderWindow(new VideoMode(640, 480), "This is a new window");

        CircleShape cs = new CircleShape(100.0f);
        cs.FillColor = Color.Green;

        window.SetActive();
        window.Closed += new EventHandler(OnClose);

        while (window.IsOpen)
        {
            window.Clear();
            window.DispatchEvents();
            window.Draw(cs);
            window.Display();
        }
    }

    static void OnClose(object sender, EventArgs e)
    {
        RenderWindow window = (RenderWindow)sender;
        window.Close();
    }
}

这将为您提供一个带有绿色圆圈的窗口。当您关闭图形窗口时,应用程序将关闭。
希望这能帮助您入门!

2
你可以使用 https://www.nuget.org/packages/OpenTK.NetStandard/
指导:如何创建你的第一个OpenGL图形窗口
  • 运行命令:dotnet new console
  • 运行命令:dotnet add package OpenTK.NetStandard
  • 运行命令:dotnet run
using System;
using OpenTK;
using OpenTK.Graphics.OpenGL;

namespace dotnet_opentk
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var window = new Window())
            {
                window.Run();
            }
        }
    }

    class Window : GameWindow
    {
        protected override void OnLoad(System.EventArgs e)
        {
            GL.ClearColor(0.1f, 0.2f, 0.3f, 1f);

            Console.WriteLine(GL.GetString(StringName.Version));
        }

        protected override void OnRenderFrame(FrameEventArgs e)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit);
            SwapBuffers();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接