python - 如何更改 GeomNode 中特定 Geom 的纹理?
问题描述
一些上下文:我通过为每个图块(仅包含几个 tris)创建一个 Geom 来动态生成一些基于图块的图形,然后将所有 Geom 组合到整个地图的单个 GeomNode 中。
根据panda3d 文档,GeomNode 的用途之一是能够更改单个 Geom 的纹理。但是,它没有解释如何执行此操作。
调用set_texture
Geom 本身不起作用(大概是因为 RenderState 在 GeomNode 中,而不是在 Geom 中)。我可以使用 获取与第 n 个 Geom 对应的 RenderState geom_node.get_geom_state(n)
,然后使用 再次设置它geom_node.set_geom_state(n, state)
,但我不知道如何更改 RenderState 以使其应用纹理,从 API 参考来看,它看起来非常复杂。
如何更改 GeomNode 中单个 Geom 的纹理(如果答案是“将每个 Geom 放入其自己的 GeomNode”,那么每个 GeomNode 是否有理由拥有多个 Geom)?
解决方案
事实证明,如果您更仔细地阅读文档,它会说:
您不应尝试直接创建或修改 RenderState 对象。相反,请调用其中一个 make() 函数来为您创建一个。而不是修改 RenderState 对象,而是创建一个新对象。
因此,要更新 Geom 上的纹理n
,给定一些纹理texture
和 GeomNode node
,您需要执行以下操作:
attrib = TextureAttrib.make(texture)
state = RenderState.make(attrib)
node.set_geom_state(n, state)
推荐阅读
- r - 地图功能中的波浪号运算符
- javascript - 调用console.log 中的函数没有在firefox 控制台中输出任何内容?
- file - 在python中将base64字符串写入文件不起作用
- xpages - Xpages - 使用旧值刷新文档
- c# - 如何从文本框中获取日期并将其用于 SELECT 语句
- ios - 如何在“AWSIoT”iOS SDK 中订阅多个主题?
- sql - 使用存储过程更新数据库中的现有值
- c - 当您在 C 中的结构中有一个数组时,最佳实践是什么?
- angular - Angular Material Stepper - 在我点击视图之前调用 next() 不起作用
- javascript - 下一个.js。如何在 Layout 中调用组件的 getInitialProps