Anonymous
Как исправить растяжение текстуры объекта OpenGL? [закрыто]
Сообщение
Anonymous » 05 май 2024, 22:06
У меня есть программа на C++ на OpenGL, и я столкнулся с проблемой растяжения текстуры объекта
[img]
https://i .sstatic.net/JmyaMd2C.png[/img]
Мне нужно что-то вроде этого:
[img]https: //i.sstatic.net/pBc8Xpzf.png[/img]
В коде я загружаю текстуры из папки и конвертирую их в единый текстурный атлас; в коде для каждой текстуры в атласе генерируется класс UVRegion, где координаты текстуры:
Код: Выделить всё
class UVRegion {
public:
float u1;
float v1;
float u2;
float v2;
UVRegion(float u1, float v1, float u2, float v2)
: u1(u1), v1(v1), u2(u2), v2(v2) {}
UVRegion() : u1(0.0f), v1(0.0f), u2(1.0f), v2(1.0f) {}
};
Далее я использую их для объекта:
Код: Выделить всё
std::vector vertices = {
0.5f, 0.5f, -0.5f, brick->u1, brick->v2,
0.5f, -0.5f, -0.5f, brick->u1, brick->v1,
-0.5f, -0.5f, -0.5f, brick->u2, brick->v1,
-0.5f, 0.5f, -0.5f, brick->u2, brick->v2,
0.5f, 0.5f, 0.5f, brick->u1, brick->v2,
0.5f, -0.5f, 0.5f, brick->u1, brick->v1,
-0.5f, -0.5f, 0.5f, brick->u2, brick->v1,
-0.5f, 0.5f, 0.5f, brick->u2, brick->v2,
0.5f, 0.5f, 0.5f, brick->u1, brick->v2,
0.5f, 0.5f, -0.5f, brick->u2, brick->v2,
0.5f, -0.5f, -0.5f, brick->u2, brick->v1,
0.5f, -0.5f, 0.5f, brick->u1, brick->v1,
-0.5f, 0.5f, 0.5f, brick->u1, brick->v2,
-0.5f, 0.5f, -0.5f, brick->u2, brick->v2,
-0.5f, -0.5f, -0.5f, brick->u2, brick->v1,
-0.5f, -0.5f, 0.5f, brick->u1, brick->v1,
0.5f, 0.5f, 0.5f, brick->u1, brick->v2,
0.5f, 0.5f, -0.5f, brick->u2, brick->v2,
-0.5f, 0.5f, -0.5f, brick->u2, brick->v1,
-0.5f, 0.5f, 0.5f, brick->u1, brick->v1,
0.5f, -0.5f, 0.5f, brick->u1, brick->v2,
0.5f, -0.5f, -0.5f, brick->u2, brick->v2,
-0.5f, -0.5f, -0.5f, brick->u2, brick->v1,
-0.5f, -0.5f, 0.5f, brick->u1, brick->v1,
};
Сам объект растягиваю с помощью матрицы модели
Подробнее здесь:
https://stackoverflow.com/questions/784 ... ngl-object
1714935982
Anonymous
У меня есть программа на C++ на OpenGL, и я столкнулся с проблемой растяжения текстуры объекта [img]https://i .sstatic.net/JmyaMd2C.png[/img] Мне нужно что-то вроде этого: [img]https: //i.sstatic.net/pBc8Xpzf.png[/img] В коде я загружаю текстуры из папки и конвертирую их в единый текстурный атлас; в коде для каждой текстуры в атласе генерируется класс UVRegion, где координаты текстуры: [code]class UVRegion { public: float u1; float v1; float u2; float v2; UVRegion(float u1, float v1, float u2, float v2) : u1(u1), v1(v1), u2(u2), v2(v2) {} UVRegion() : u1(0.0f), v1(0.0f), u2(1.0f), v2(1.0f) {} }; [/code] Далее я использую их для объекта: [code]std::vector vertices = { 0.5f, 0.5f, -0.5f, brick->u1, brick->v2, 0.5f, -0.5f, -0.5f, brick->u1, brick->v1, -0.5f, -0.5f, -0.5f, brick->u2, brick->v1, -0.5f, 0.5f, -0.5f, brick->u2, brick->v2, 0.5f, 0.5f, 0.5f, brick->u1, brick->v2, 0.5f, -0.5f, 0.5f, brick->u1, brick->v1, -0.5f, -0.5f, 0.5f, brick->u2, brick->v1, -0.5f, 0.5f, 0.5f, brick->u2, brick->v2, 0.5f, 0.5f, 0.5f, brick->u1, brick->v2, 0.5f, 0.5f, -0.5f, brick->u2, brick->v2, 0.5f, -0.5f, -0.5f, brick->u2, brick->v1, 0.5f, -0.5f, 0.5f, brick->u1, brick->v1, -0.5f, 0.5f, 0.5f, brick->u1, brick->v2, -0.5f, 0.5f, -0.5f, brick->u2, brick->v2, -0.5f, -0.5f, -0.5f, brick->u2, brick->v1, -0.5f, -0.5f, 0.5f, brick->u1, brick->v1, 0.5f, 0.5f, 0.5f, brick->u1, brick->v2, 0.5f, 0.5f, -0.5f, brick->u2, brick->v2, -0.5f, 0.5f, -0.5f, brick->u2, brick->v1, -0.5f, 0.5f, 0.5f, brick->u1, brick->v1, 0.5f, -0.5f, 0.5f, brick->u1, brick->v2, 0.5f, -0.5f, -0.5f, brick->u2, brick->v2, -0.5f, -0.5f, -0.5f, brick->u2, brick->v1, -0.5f, -0.5f, 0.5f, brick->u1, brick->v1, }; [/code] Сам объект растягиваю с помощью матрицы модели Подробнее здесь: [url]https://stackoverflow.com/questions/78433445/how-can-i-fix-texture-stretching-on-an-opengl-object[/url]