Tag: vertexdata

什么是api独立顶点处理的良好代码结构?

目前正在使用C#开发3D媒体引擎,我遇到了一个小难题。 我找到了我的rending循环,我有一个很棒的插件架构和内容管理系统,甚至还有一个计划好的材料管道。 然后引擎计划使用DirectX和OpenGL(通过’渲染器’插件),以及两个API的可编程管线。 无论如何,在本周初,我开始研究用于处理顶点的引擎抽象层(我已经担心这几周了)。 正如你们中的一些人所知,图形API之间的顶点处理并不完全相关或相同。 好吧有点相关;),但不一样。 在OpenGL处理​​顶点非常简单,您可以创建自定义顶点结构,将其发送到GPU,然后让着色器处理其余部分。 这对于灵活的图形管线是完美的,OpenGL不需要知道每个顶点包含哪些元素。 另一方面,DirectX要求我们为每个顶点结构创建声明,然后将它们发送到GPU。 问题是我不知道传递了什么类型的顶点结构,我肯定希望避免创建抽象层,该抽象层涉及通过枚举和一些抽象的“VertexDeclaration”类声明顶点的每个元素; 这会导致一些问题: 1)获得顶点元素至少可以说是一种痛苦。 我可以使用一些’VertexSemantic’并询问顶点’a – z’的位置,但是当处理像骨骼动画这样的顶点时,它可能会有很多开销。 2)考虑到发动机的主要焦点是“新手”,不是非常人性化。 我希望用户能够创建自定义顶点和网格缓冲区,而不必声明大量对象,从而消耗宝贵的开发时间。 3)更多? 现在,我可以使用属性执行某些操作,然后在DirectX渲染器内创建顶点结构的声明。 例如,继续创建一些枚举: // for getting the format layout of the element public enum ElementFormat { Float, Float2, Float3, Byte, etc, etc } // for determining the ‘usage’ // (here is ‘another’ where DirectX limits vertex structures ><) […]