cocos2d-x повторяющиеся текстуры в 3d

Я бы очень хотел создать повторяющуюся текстуру на 3D-объекте.

Я пытался экспортировать из майя в .obj. Файл материала (.mtl) выглядит следующим образом:

newmtl lambert10SG
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd -s 0.1 0.1 grass.jpg
Ni 1.00

строка «map_Kd -s 0.1 0.1 grass.jpg» должна указывать, что текстура повторяется. Однако это не работает вообще. Текстура не отображается, пока я не уберу «-s 0.1 0.1». Тогда это растягивается.

Я попытался экспортировать в .fbx, а затем конвертировать в .c3b. Тот же результат. Текстура растягивается.

Затем я попытался создать свою собственную текстуру. Я знаю, что в OpenGL мне пришлось бы установить координаты текстуры> 1, чтобы текстура повторялась. Кажется, что они эквивалентны maxS и maxT в текстуре (?).

Это моя настройка текстуры:

cocos2d::Image *textImage = new (std::nothrow) cocos2d::Image();
textImage->initWithImageFile("grass.jpg");

cocos2d::Texture2D *texture = new (std::nothrow)cocos2d::Texture2D();
texture->initWithImage(textImage);

cocos2d::Texture2D::TexParams texParam;
texParam.wrapS = GL_REPEAT;
texParam.wrapT = GL_REPEAT;
texParam.minFilter = GL_LINEAR;
texParam.magFilter = GL_LINEAR;

texture->setTexParameters(texParam);
texture->setMaxS(10.0f);
texture->setMaxT(10.0f);

sprite->getMesh()->setTexture(texture);

Текстура все еще растягивается.

Из поиска в интернете кажется, что я смог бы установить координаты текстуры на 2D-спрайте в Cocos с помощью функции setTextureRect. Однако, кажется, что это не существует для sprite3D.

Любые идеи будут очень цениться!

2

Решение

ОБНОВИТЬ:

Мне удалось получить текстуру, отредактировав файл .obj вручную.

Очевидно, что CCObjLoader не понимает строку в файле материала (.mtl):

map_Kd -s 0.1 0.1 grass.jpg

Удаление «-s 0,1 0,1» заставляет загрузчик распознавать текстуру (хотя все еще растянутую).

После этого мне пришлось вручную изменить все координаты vt в файле .obj, умножив на 10. Тем не менее текстура не повторялась, пока я не изменил параметры текстуры на GL_REPEAT вместо GL_CLAMP_TO_EDGE.

cocos2d::Texture2D::TexParams texParam;
texParam.wrapS = GL_REPEAT;
texParam.wrapT = GL_REPEAT;
texParam.minFilter = GL_LINEAR;
texParam.magFilter = GL_LINEAR;

sprite->getMesh()->getTexture()->setTexParameters(texParam);

Это не решение моей проблемы как таковой, так как мне нужно, чтобы приложение распознало, когда текстура должна повторяться автоматически.

Я еще не расшифровал, где текстурные координаты хранятся в структуре cocos2d, поэтому не смог изменить их после загрузки спрайта. Решением может быть исправление objLoader, однако это не очень подвержено обновлениям Cocos. Или, может быть, сделать небольшой .obj файл Fixer. Ни один из них не кажется идеальным решением …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]