1

我正在开发一个数学游戏,其中数字(0-99)用于问题和答案(如标准台球,但它们通常只能达到 15)。

因此,我认为至少以编程方式生成数字会比在 3DSMax 或类似软件中模拟 99 个不同的球要聪明得多。

我在 C#/XNA 中工作,但也可以在 DX11/C++ 中处理解释。

我不是在寻找代码,而是在寻找一种方法:一种看起来像这样的项目符号列表(如果这接近正确的话):

  • 在 3DS 中构建一个白色且上面有条纹的 shpere。
    • 或者,条带应该是我稍后添加的纹理的一部分吗?
  • 在 DrawModel 期间更改球的颜色(如果是实心的)或菌柄的颜色(如果是条纹的)
  • 以某种方式将数字添加到球中,使其看起来与球的其余部分具有相同的质量

也许有一种神奇的方法可以获取纹理并将其包裹在球体周围而不会产生任何扭曲,然后我可以生成纹理并将它们粘贴在球体上。但正如你可以猜到的,我不知道该走哪条路。

感谢您的任何指导!

4

2 回答 2

1

你会想要在纹理贴图上打印你的数字。这个纹理实际上是一个“贴花”,它被粘贴到你的球体的一部分上。实现这样一个简单的固定贴花的一种简单方法是编写一个像素着色器,该着色器确定该点是在贴花区域的内部还是外部。如果不是,您可以进行额外测试以确定像素应该是白色背景还是彩色条纹。

您可以通过为每个顶点指定适当的纹理坐标来将贴花映射到您的球体,或者,您可以编写一个像素着色器,从 3D 模型坐标计算纹理坐标。

无论哪种方式,你总是会在球体上得到扭曲。我建议您查看地图投影,它们都可以解决您在平面图像和球体之间转换的基本问题。我特别建议查看“gnomonic”和“orthographic”投影,这两种投影都易于理解和实现。

于 2013-03-07T23:09:13.397 回答
0

如果您希望使用 XNA / MonoGame / ANX 来解决它,该方法实际上取决于您使用的是 Reach 配置文件还是 HighDef 配置文件。

使用覆盖面配置文件,我建议:

  1. 创建渲染目标
  2. 将渲染目标清除为球的颜色
  3. 在渲染目标上绘制白色条纹
  4. 将数字绘制到渲染目标上
  5. 动态创建(或使用现有的)球体网格
  6. 使用基本效果和 rendertarget 纹理渲染球体网格

有了高调,这是一个编写像素着色器的案例:

  1. 采用“白色”纹理、“颜色”纹理、颜色和“数字”纹理
  2. 将白色纹理渲染为白色
  3. 渲染颜色纹理提供的颜色
  4. 渲染数字纹理

(我建议使用与 Reach 配置文件示例类似的技术来渲染数字纹理。渲染文本是一种痛苦,因此不妨尽可能利用内置的东西)。(前)XNA 团队在http://create.msdn.com提供了一个重新着色示例

于 2013-03-07T22:51:45.640 回答