c = p.loadURDF('cube.urdf',
[-.1, 0, .1],
p.getQuaternionFromEuler([0, 0, 0]),
globalScaling=1,
physicsClientId=PYB_CLIENT
)
x = p.loadTexture('tag.png')
p.changeVisualShape(c, -1, textureUniqueId=x)
# -1 value is "link index"
#(link index has something to do with "joints", of which the cube apparently has none)
Данный способ работает не со всеми изображениями, причина такого поведения пока неизвестна
При таком способе добавления текстуры изображение будет добавлено на все стороны куба
-
Нажать New чтобы создать новый материал
-
Убедиться, что Display mode выставлен на Material Preview (иначе текстуру не будет видно, по умолчанию отображаются лишь геометрические формы)
-
Кликнув на левый верхний угол и задерживая кнопку мыши, тянуть вправо чтобы раздвоить экран.
-
В 3д редакторе выделить куб и нажать Tab, в результате слева должно появиться разделение изображения на области, которые будут видны на гранях куба.
-
Расположить желаемую часть изображение на одной из граней (Связи между областями можно разорвать при помощи Rip region).
Обратите внимание на ориентацию куба на следующем скриншоте
Обратите внимание на ориентацию куба в пространстве в правом верхнем углу, (верхняя грань в блендере не будет являться верхней гранью куба в симуляции).
Нужно изменять текстуру на грани, нормалью которой будет вектор -oY, именно эта грань будет верхней гранью в симуляции
-
Экспортировать в качестве obj файла (убедитесь, что выбрано Export Materials)
-
В urdf файле в mesh filename указать имя obj файла, в Material указать такое же имя материала как в Блендере, в texture filename указать имя изображения
-
В симуляции загрузить созданный urdf file
c = p.loadURDF('cube_copy.urdf',
[-.1, 0, .1],
p.getQuaternionFromEuler([0, 0, 0]),
globalScaling=1,
physicsClientId=PYB_CLIENT
)