Как изменить текстуру конкретного Geom в GeomNode? - PullRequest
0 голосов
/ 01 декабря 2018

Некоторый контекст: я динамически генерирую некоторую графику на основе плиток, создавая Geom для каждой плитки (содержащей только пару трис), а затем объединяю все Geom в один GeomNode для всей карты.

Согласно документам panda3d , одно из применений GeomNode - возможность изменять текстуру для отдельных Geoms.Однако это не объясняет, как это сделать.

Вызов set_texture для самого Geom не работает (предположительно, поскольку RenderState находится в GeomNode, а не в Geom).Я могу получить RenderState, соответствующий n-му Geom с geom_node.get_geom_state(n), и установить его снова с geom_node.set_geom_state(n, state), но я не знаю, как изменить RenderState, чтобы он применял текстуру, и из справочника API это выглядит оченьсложный.

Как изменить текстуру на отдельном Geom в GeomNode (и если ответ «поместить каждый Geom в свой собственный GeomNode», то есть ли причина иметь более одного Geom наGeomNode)

1 Ответ

0 голосов
/ 02 декабря 2018

Оказывается, если вы прочитаете документацию чуть внимательнее, она говорит :

Вы не должны пытаться создавать или изменять объект RenderState напрямую.Вместо этого вызовите одну из функций make (), чтобы создать ее для вас.И вместо изменения объекта RenderState создайте новый.

Таким образом, чтобы обновить текстуру на Geom n, учитывая некоторую текстуру texture и GeomNode node, вам нужно сделатькак то так:

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