![]() |
1
0
更改代码时,应该这样做:
请注意,可能需要一些同时合并所有属性的代码,而不是一次合并2个属性(考虑位置+法线+纹理坐标+颜色+…)。还要注意的是,您可以在填写顶点缓冲区时进行合并,这样就不需要分配
类似于:
|
![]() |
2
1
不,不,不。FVF系统已经被弃用多年,甚至在D3D10或更高版本中都不可用。D3D9使用顶点系统。示例代码:
除此之外,如果你想创建一个运行时变量顶点数据格式,那么你需要为你想要的每一个可能的变量编写一个明暗器,然后编译它们,并用你的生命来交换它们。而且,对最终产品的影响将是疯狂的-例如,如果你决定拿出你需要的灯光数据来制作阴影,你怎么可能编写一个有竞争力的渲染引擎?
不过,我想我还是帮个忙吧。你真正需要的是一个多态的函数对象和一些普通的内存-D3D使用void*s或者其他类似的东西,所以这不是什么大问题。当您调用函数对象时,它会添加到FVF声明并将数据复制到内存中。
请原谅我使用lambda,我使用C++ 0x编译器。 |
![]() |
3
1
你的解决方案看起来不错。但是如果你想要更多的C++,你可以试试这样的: 编辑 我以前的解决方案基本上重新创建了一些已经存在的东西,std::pair。我不知道我在想什么,这里是更为C++的解决方案:
您不必担心填充,因为D3D顶点中的所有元素要么是32位浮点,要么是32位整数。 编辑 这是一个可行的解决方案。它可以同时满足您的所有需求,而且您不必担心尺寸的问题:
|
![]() |
4
0
我不知道DirectX,但在OpenGL中存在完全相同的概念,在OpenGL中可以指定每个顶点属性的位置和跨距。您可以使用交替的属性(如第一个结构)或扫描将它们存储在不同的块中。在OpenGL中,使用glVertexPointer来设置这些东西。考虑到DirectX最终运行在同一个底层硬件上,我怀疑在DirectX中有某种方法可以做同样的事情,但我不知道它是什么。 一些以DirectX和glVertexPointer为关键字的google会显示SetFVF和SetVertexDeclaration |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |