Direct3D或XNA渲染自定义台球

Direct3D或XNA渲染自定义台球,3d,xna,directx,direct3d,3d-modelling,3d,Xna,Directx,Direct3d,3d Modelling,我正在做一个数学游戏,其中数字(0-99)用于提问和回答(就像标准台球,但它们通常只到15) 因此,我认为,至少通过编程生成数字比用3DSMax或类似工具模拟99个不同的球要聪明得多 我在C#/XNA中工作,但也能处理DX11/C++中的解释 我不是在寻找代码,而是在寻找一种方法:有点像这样的项目符号列表(如果这是接近正确的话): 在3DS中构建一个白色且带有条纹的shphere。 或者,条纹应该是我以后添加的纹理的一部分吗 DrawModel期间更改球(如果为实心)或柄(如果为条纹)的颜

我正在做一个数学游戏,其中数字(0-99)用于提问和回答(就像标准台球,但它们通常只到15)

因此,我认为,至少通过编程生成数字比用3DSMax或类似工具模拟99个不同的球要聪明得多

我在C#/XNA中工作,但也能处理DX11/C++中的解释

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

  • 在3DS中构建一个白色且带有条纹的shphere。
    • 或者,条纹应该是我以后添加的纹理的一部分吗
  • DrawModel期间更改球(如果为实心)或柄(如果为条纹)的颜色
  • 以某种方式将数字添加到球中,使其看起来与球的其余部分质量相同
也许有一种神奇的方法可以将纹理缠绕在球体上而不发生任何变形,然后我可以生成纹理并将其粘贴在球体上。但是你可以猜到,我不知道该走哪条路


谢谢你的指点

如果你想用XNA/MonoGame/ANX来解决这个问题,方法实际上取决于你使用的是Reach配置文件还是HighDef配置文件

对于reach配置文件,我建议:

  • 创建渲染目标
  • 将渲染目标清除为球的颜色
  • 在渲染目标上绘制白色条纹
  • 将编号绘制到渲染目标上
  • 动态创建(或使用现有)球体网格
  • 使用基本效果和rendertarget纹理渲染球体网格
  • 对于high profile,编写像素着色器是一个很好的例子:

  • 采用“白色”纹理、“颜色”纹理、颜色和“数字”纹理
  • 将白色纹理渲染为白色
  • 将颜色纹理渲染为提供的颜色
  • 渲染数字纹理
  • (我建议使用与Reach配置文件示例类似的技术渲染数字纹理。渲染文本是一件痛苦的事情,因此最好尽可能利用内置内容)。
    (前)XNA团队在

    上提供了一个重新着色的例子,如果你想用XNA/MonoGame/ANX解决这个问题,方法实际上取决于你使用的是Reach配置文件还是高清配置文件

    对于reach配置文件,我建议:

  • 创建渲染目标
  • 将渲染目标清除为球的颜色
  • 在渲染目标上绘制白色条纹
  • 将编号绘制到渲染目标上
  • 动态创建(或使用现有)球体网格
  • 使用基本效果和rendertarget纹理渲染球体网格
  • 对于high profile,编写像素着色器是一个很好的例子:

  • 采用“白色”纹理、“颜色”纹理、颜色和“数字”纹理
  • 将白色纹理渲染为白色
  • 将颜色纹理渲染为提供的颜色
  • 渲染数字纹理
  • (我建议使用与Reach配置文件示例类似的技术渲染数字纹理。渲染文本是一件痛苦的事情,因此最好尽可能利用内置内容)。
    (前)XNA团队在

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

    通过为每个顶点指定适当的纹理坐标,或者(可能更干净地)编写一个像素着色器,从三维模型坐标计算纹理坐标,可以将贴花映射到球体


    无论哪种方式,球体上都会出现扭曲。我建议你看看,这些都解决了在平面图像和球体之间转换的基本问题。我特别建议您查看“gnomonic”和“正交”投影,这两种投影都很容易理解和实现。

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

    通过为每个顶点指定适当的纹理坐标,或者(可能更干净地)编写一个像素着色器,从三维模型坐标计算纹理坐标,可以将贴花映射到球体


    无论哪种方式,球体上都会出现扭曲。我建议你看看,这些都解决了在平面图像和球体之间转换的基本问题。我特别建议大家看一下“灵知”和“正交”投影,这两种投影都很容易理解和实现。

    我确实找到了这本关于如何做到这一点的相当详细的教程:我确实找到了这本关于如何做到这一点的相当详细的教程: