【问题标题】:How do I change the texture of a particular Geom in a GeomNode?如何更改 GeomNode 中特定 Geom 的纹理?
【发布时间】:2018-12-02 09:12:31
【问题描述】:

一些上下文:我通过为每个图块(仅包含几个 tris)创建一个 Geom 来动态生成一些基于图块的图形,然后将所有 Geom 组合成一个用于整个地图的 GeomNode。

根据panda3d docs,GeomNode 的用途之一是能够更改单个 Geom 的纹理。但是,它没有说明如何执行此操作。

在 Geom 本身上调用 set_texture 不起作用(可能是因为 RenderState 在 GeomNode 中,而不是在 Geom 中)。我可以用geom_node.get_geom_state(n)得到第n个Geom对应的RenderState,然后用geom_node.set_geom_state(n, state)再次设置它,但我不知道如何改变RenderState以便它应用纹理,从API参考它看起来很复杂。

如何更改 GeomNode 中单个 Geom 的纹理(如果答案是“将每个 Geom 放入其自己的 GeomNode”,那么是否有理由让每个 GeomNode 拥有多个 Geom)?

【问题讨论】:

    标签: python panda3d


    【解决方案1】:

    如果您仔细阅读文档,就会发现它是says

    您不应尝试直接创建或修改 RenderState 对象。相反,请调用其中一个 make() 函数来为您创建一个。而不是修改 RenderState 对象,而是创建一个新对象。

    所以要更新 Geom n 上的纹理,给定一些纹理 texture 和 GeomNode node,您需要执行以下操作:

    attrib = TextureAttrib.make(texture)
    state = RenderState.make(attrib)
    node.set_geom_state(n, state)
    

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多