![7bbe67cec192237e1ecab17363b0a105.png](https://i-blog.csdnimg.cn/blog_migrate/fbb461ab2c591576213876bec4e40d5d.jpeg)
认怂声明:该项目仅为本人学习图形学所用,本着能用就行的思想开发
![07cdb01763b2ff04446f9916f78670e3.png](https://i-blog.csdnimg.cn/blog_migrate/b7369ed61e2b1baba6f733973e4fa146.jpeg)
前言
离高考还有两个多月,静下心来看看rtr4,写个软渲染练习,顺便尝试在c#管理内存。说实话这玩意多少人都做过了,比如这个:C++控制台可以写出什么样的厉害的游戏? 所以造轮子?不存在的
TODO List
- 实现大多数常用渲染模型及流水,rtr读到哪写到哪
- 伪Shader支持,类似于ShaderLab的语法
- 支持SIMD,需要.net core 3.0及以上
- 消除不必要的alloc,随着.net提供操作底层的途径,这一步有望实现
- ...
正文
该项目地址:
Jacks8n/CRendergithub.com![103968f4fa2e19150ad07acb149fbb74.png](https://i-blog.csdnimg.cn/blog_migrate/ca7e177a82f42efbb909b28ec93cd1f2.jpeg)
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/coreclrgithub.com![58711ddb84f3c93dcb5f7b32d31c26d3.png](https://i-blog.csdnimg.cn/blog_migrate/81156a9b5193428ae2756b6783b2b3d1.jpeg)
if (typeof(T) == typeof(int))
int foo = (int)(object)bar;
else if ...
这类操作是会被优化的,所以搬过来放到GenericVector<T>了,实现shader中类似color0.rgb += color1.rgb的语法而避免使用delegate
再说下去就丢人了 为了不显得太low 本文到此终结