@News_Bot

Как расположить плоскую текстуру сегмента на кольцо?

У меня есть текстура сегмента кольца(выделена синим), бесшовная, как мне расположить её на кольце?

671781528fdc0134231910.png

вот мой код создания кольца

class Rings {
    constructor(innerRadius, outerRadius, textureUrl) {
        const textureLoader = new THREE.TextureLoader();
        const texture = textureLoader.load(textureUrl);
        
        texture.wrapS = THREE.RepeatWrapping; 
        texture.wrapT = THREE.RepeatWrapping; 

        const geometry = new THREE.RingGeometry(innerRadius, outerRadius, 32);
        const material = new THREE.MeshBasicMaterial({
            map: texture,
            side: THREE.DoubleSide,
            transparent: true,
            depthWrite: false,
        });

        material.blending = THREE.NormalBlending;

        this.mesh = new THREE.Mesh(geometry, material);
        this.mesh.rotation.x = Math.PI / 2; 
    };
}
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Не знаю, как UV-маппинг задается в этом вашем JS, но формулы для получения координат в прямоугольной текстуре по координатам на кольце такие:

x_r = (sqrt(x^2+y^2)-r0)/(r1-r0)*Width
y_r = (atan(y/x)/pi+1/2)*Height


Тут (x,y) - координаты на кольце. Центр кольца в (0,0), внутренний радиус r0, внешний r1. Width, Height - размеры прямоугольной текстуры.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы