【问题标题】:Texturing a sphere primitive对球体图元进行纹理化
【发布时间】:2012-01-01 21:36:50
【问题描述】:

我正在使用 Mathematica 8,但我正在努力处理纹理问题。尽管多面体对象的纹理已被证明相对简单,但我在尝试对球体进行纹理时遇到了问题。在文档中,显示球体纹理的唯一方法是使用SphericalPlot3D,恕我直言,这是一个笨拙的解决方案,特别是因为我试图在球体上执行操作(例如:翻译)。 在 toto 中,我的问题是:有什么方法可以对球体图元进行纹理处理?

【问题讨论】:

标签: wolfram-mathematica


【解决方案1】:

您不能直接为Sphere 设置纹理,但您可以使用例如创建带纹理的球体。 SphericalPlot3D 并提取第一部分以获得可以使用 Translate 操作的原语。例如

sphere = SphericalPlot3D[1, th, phi, Mesh -> False, PlotPoints -> 25,
  PlotStyle -> {Opacity[1], Texture[ExampleData[{"ColorTexture", "GiraffeFur"}]]},
  TextureCoordinateFunction -> ({#4, #5} &)][[1]];

Graphics3D[Translate[sphere, {{0, 0, 0}, {2, 2, 2}}]]

【讨论】:

    【解决方案2】:

    这样的事情会有所帮助:

    sphere = SphericalPlot3D[1, {u, 0, Pi}, {v, 0, 2 Pi},
                                 TextureCoordinateFunction -> ({2 #5, 1 - 2 #4} &), 
                                 PlotStyle -> { Lighting -> "Neutral", Axes -> False,
                                 Boxed -> False, Texture[texture]},     Mesh -> None][[1]];
    
    F[k_] := Graphics3D[ Rotate[ sphere, k, {2, 1, 6}, {0, 0, 0}], Boxed -> False]
    

    现在,我们可以为一个带纹理的球体旋转(围绕向量 {2, 1, 6} 锚定在点 {0,0,0} )设置动画:

    Animate[F[k], {k, 0, 2 Pi}]
    

    【讨论】:

    • 不,这就是我设法做的......我想纹理一个球体 primitive,由 Sphere[] 函数产生。
    • 目前无法将纹理应用于Sphere[]
    【解决方案3】:

    为了完整起见,您还可以使用ParametricPlot3D 生成带有纹理的球体。

    map = ExampleData[{"TestImage", "Lena"}];
    sphere = ParametricPlot3D[{Cos[u] Sin[v], Sin[u] Sin[v], Cos[v]}, {u, 
      0, 2 Pi}, {v, 0, Pi}, Mesh -> None, 
    TextureCoordinateFunction -> ({#4, 1 - #5} &), 
    Lighting -> "Neutral", Axes -> False, Boxed -> False, 
    PlotStyle -> Texture[Show[map]]]
    

    如果我理解正确,Heike 的回答显示结果的第一部分是 GraphicsComplex,它是一个图形基元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多