eclipse 控制台 ascii 颜色_C#写个控制台软渲染

博主分享了使用C#进行图形学学习的项目,旨在理解渲染模型和流水线。通过WinAPI而非Console类实现输出,利用双缓冲技术,项目还实现了类似ShaderLab的语法支持。此外,探讨了.NET Core对底层操作的支持,以及在数值运算中的性能优化技巧。
摘要由CSDN通过智能技术生成

7bbe67cec192237e1ecab17363b0a105.png

认怂声明:该项目仅为本人学习图形学所用,本着能用就行的思想开发

07cdb01763b2ff04446f9916f78670e3.png
https://www.zhihu.com/video/1089663071861075968

前言

离高考还有两个多月,静下心来看看rtr4,写个软渲染练习,顺便尝试在c#管理内存。说实话这玩意多少人都做过了,比如这个:C++控制台可以写出什么样的厉害的游戏? 所以造轮子?不存在的

TODO List

  1. 实现大多数常用渲染模型及流水,rtr读到哪写到哪
  2. 伪Shader支持,类似于ShaderLab的语法
  3. 支持SIMD,需要.net core 3.0及以上
  4. 消除不必要的alloc,随着.net提供操作底层的途径,这一步有望实现
  5. ...

正文

该项目地址:

Jacks8n/CRender​github.com
103968f4fa2e19150ad07acb149fbb74.png

c#的Console类输出效果过于感人,所以采用winapi的方式,可以在ms doc查到详细信息就不展开了,有一点要注意的是CreateConsoleScreenBuffer()的dwFlag值在doc中是查不到的,需要在wincon.h中找到它的值为1

        [DllImport("Kernel32.dll")]
        private static extern IntPtr CreateConsoleScreenBuffer(uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwFlags, IntPtr lpScreenBufferData);

        [DllImport("Kernel32.dll")]
        private static extern bool WriteConsoleOutputCharacter(IntPtr hConsoleOutput, char[] lpCharacter, uint nLength, _COORD dwWriteCoord, out uint lpNumberOfCharsWritten);

        [DllImport("Kernel32.dll")]
        private static extern bool SetConsoleActiveScreenBuffer(IntPtr hConsoleOutput);

双缓冲什么的自然是必须,网上都有

为了实现方便的数值运算,有个操作,看

dotnet/coreclr​github.com
58711ddb84f3c93dcb5f7b32d31c26d3.png
if (typeof(T) == typeof(int))
    int foo = (int)(object)bar;
else if ...

这类操作是会被优化的,所以搬过来放到GenericVector<T>了,实现shader中类似color0.rgb += color1.rgb的语法而避免使用delegate

再说下去就丢人了 为了不显得太low 本文到此终结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值