C# 如何绘制 ;使用.NET ;核心?
有没有办法用.NET内核在屏幕上绘制和显示图形?我想创建一个在多个平台上运行的图形应用程序。您可以使用.NET Core绘制图形,但如果您只是致力于使用C#而不是.NET Core,这似乎有点麻烦,可能是一个更好的选择 如果您试图用GUI元素创建一个“桌面应用程序”,您也可以研究它与GUI元素的组合(这有点类似于C#),例如,他们就是这样创建Visual Studio代码的 编辑:我刚刚发现另一篇非常有趣的文章(由我在评论中提到的同一个人写的),名为《如何使用OpenTK、Veldrid和ImGui.NET在屏幕上绘图》,我相信你可以从中获得一些灵感。你可以使用 说明:如何为OpenGL图形创建第一个窗口C# 如何绘制 ;使用.NET ;核心?,c#,.net,graphics,drawing,.net-core,C#,.net,Graphics,Drawing,.net Core,有没有办法用.NET内核在屏幕上绘制和显示图形?我想创建一个在多个平台上运行的图形应用程序。您可以使用.NET Core绘制图形,但如果您只是致力于使用C#而不是.NET Core,这似乎有点麻烦,可能是一个更好的选择 如果您试图用GUI元素创建一个“桌面应用程序”,您也可以研究它与GUI元素的组合(这有点类似于C#),例如,他们就是这样创建Visual Studio代码的 编辑:我刚刚发现另一篇非常有趣的文章(由我在评论中提到的同一个人写的),名为《如何使用OpenTK、Veldrid和ImG
- dotnet新控制台
- dotnet添加包OpenTK.NetStandard
- 网络运行
另一个支持基本2D图形并监听窗口事件(如输入)的库是SFML,它以 只需启动一个新的NetCore控制台应用程序,并将SFML.NETNuGet包添加到项目中 然后用以下代码替换程序主体:
使用SFML.Graphics;
使用SFML.Window;
使用制度;
班级计划
{
静态void Main(字符串[]参数)
{
RenderWindow=new RenderWindow(新视频模式(640480),“这是一个新窗口”);
圆形cs=新圆形(100.0f);
cs.FillColor=Color.Green;
SetActive();
window.Closed+=新的EventHandler(OnClose);
while(window.IsOpen)
{
window.Clear();
window.DispatchEvents();
窗口绘制(cs);
window.Display();
}
}
静态void OnClose(对象发送方、事件参数)
{
RenderWindow=(RenderWindow)发送方;
window.Close();
}
}
这将为您提供一个带有绿色圆圈的窗口。关闭图形窗口时,应用程序将关闭
希望这将帮助你开始 也许你可以去看看,在那里找到一些你可能感兴趣的答案。好吧,我知道没有任何东西是真正跨平台的,可以使用.NET Core在屏幕上绘制的,所以我们必须依赖一组特定于平台的“平台调用”,对吧?在图形操作方面,我不是一个真正的专业人士,但在文章的最后,我在我的回答中提到了作者,从快速浏览中,他有4个非常有趣的项目,都以一种更抽象的方式进行.NET核心图形处理(ImGui.NET、vk、veldrid、ge),他还贡献了一种叫做Avalonia的东西,你也可以查看,但我还没有弄清楚这是否在.NET核心编辑上运行:还可以看看OpenTK Avalonia吗?我也在和它合作!我来看看@SuperJMN我刚刚做了一个编辑,因为我发现了另一篇有趣的文章,所以也许还可以研究一下,不管您选择什么最终呈现,尝试以清晰的层边界逻辑地编写代码,如果您需要更改并且不需要花费太多时间,这将对您有所帮助。例如,您的自定义方法DrawSphere(…)将给出绘制球体的逻辑指令。对于您选择的库,只有此方法下面的代码是特定于图形的,而上面的代码是完全符合逻辑的。
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();
}
}
}