<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; нормали</title>
	<atom:link href="http://web.snauka.ru/issues/tag/normali/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Трехмерное моделирование методом экструдирования в среде Three.js</title>
		<link>https://web.snauka.ru/issues/2025/12/104020</link>
		<comments>https://web.snauka.ru/issues/2025/12/104020#comments</comments>
		<pubDate>Fri, 26 Dec 2025 17:11:48 +0000</pubDate>
		<dc:creator>Хасанов Даниэль Рустамович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-моделирование]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[вершины]]></category>
		<category><![CDATA[выдавливание]]></category>
		<category><![CDATA[нормали]]></category>
		<category><![CDATA[полигональное моделирование]]></category>
		<category><![CDATA[экструдирование]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/12/104020</guid>
		<description><![CDATA[Метод экструдирования (выдавливания) остаётся одним из фундаментальных и наиболее интуитивно понятных инструментов в арсенале 3D-моделлера. Этот процесс, преобразующий двумерные контуры в трёхмерные объёмные объекты, десятилетиями используется как в профессиональных пакетах (Blender, Maya, 3ds Max), так и в веб-ориентированных фреймворках, таких как Three.js. В эпоху повсеместного распространения интерактивной 3D-графики в браузерах, веб-приложениях и играх освоение базовых [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Метод экструдирования (выдавливания) остаётся одним из фундаментальных и наиболее интуитивно понятных инструментов в арсенале 3D-моделлера. Этот процесс, преобразующий двумерные контуры в трёхмерные объёмные объекты, десятилетиями используется как в профессиональных пакетах (Blender, Maya, 3ds Max), так и в веб-ориентированных фреймворках, таких как Three.js. В эпоху повсеместного распространения интерактивной 3D-графики в браузерах, веб-приложениях и играх освоение базовых техник моделирования сохраняет свою практическую ценность. Оно позволяет наглядно демонстрировать переход от абстрактной геометрии к визуальному объекту: от задания вершин на плоскости и формирования профиля до управления параметрами выдавливания и получения готовой модели. Использование доступных библиотек, таких как Three.js, делает процесс создания 3D-контента достижимым даже для новичков, а сама техника экструзии служит отправной точкой для понимания более сложных методов моделирования, скульптинга и анимации.</p>
<p style="text-align: justify;"><span>В данной работе для создания трёхмерной фигуры используется метод экструдирования, реализованный средствами Three.js. Моделирование начинается с определения плоского замкнутого контура (профиля) на плоскости XY, координаты вершин которого задаются относительно начала координат. Затем этот контур выдавливается вдоль оси Z (или иной заданной нормали) на определённую высоту, формируя объёмное тело. Ключевым преимуществом является полный контроль над топологией: процесс создаёт боковые грани, соединяющие исходный и конечный контуры, а также при необходимости закрывает торцы полученного объекта. Такой подход позволяет быстро генерировать сложные архитектурные элементы, технические детали или абстрактные формы, демонстрируя стандартный пайплайн для задач параметрического моделирования в среде WebGL.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/122625_0607_11.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Исходный 2D-профиль фигуры в плоскости XY<br />
</span></p>
<p style="text-align: justify;"><span>Алгоритм создания трёхмерной модели методом экструдирования с использованием Three.js включает следующие последовательные шаги.<br />
</span></p>
<ul>
<li>Импортируем необходимые библиотеки: Three.js, а также, при необходимости, вспомогательные модули для управления кривыми (CurvePath) и геометрией (ExtrudeGeometry);</li>
<li>Определяем форму (Shape) — массив двумерных точек (Vector2), описывающих замкнутый контур будущего профиля. Координаты задаются относительно центра (0,0);</li>
<li>Создаём геометрию выдавливания (ExtrudeGeometry), передавая в неё объект Shape и параметры экструзии: depth (глубина/высота выдавливания), bevelEnabled (скос кромок) и другие;</li>
<li>Настраиваем материал (например, MeshStandardMaterial) для визуализации модели;</li>
<li>Создаём объект Mesh, объединяя полученную геометрию и материал, и добавляем его на сцену (Scene);</li>
<li>Настраиваем освещение (AmbientLight, DirectionalLight) и камеру (PerspectiveCamera) для корректного отображения объекта;</li>
<li>Инициируем рендерер (WebGLRenderer) и запускаем цикл анимации для отрисовки сцены;</li>
<li>При необходимости добавляем элементы управления (OrbitControls) для интерактивного вращения и масштабирования модели;</li>
</ul>
<p style="text-align: justify;"><span>Этот алгоритм является типовым для создания простых экструдированных объектов в Three.js и демонстрирует ключевые этапы работы с геометрией и материалами.<br />
</span></p>
<p style="text-align: justify;"><span>Ниже приведен фрагмент кода, реализующий ключевые шаги алгоритма:</span></p>
<p>import * as THREE from &#8216;three&#8217;;</p>
<p>import { OrbitControls } from &#8216;three/addons/controls/OrbitControls.js&#8217;;</p>
<p>&nbsp;</p>
<p>const scene = new THREE.Scene();</p>
<p>const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);</p>
<p>const renderer = new THREE.WebGLRenderer({ antialias: true });</p>
<p>renderer.setSize(window.innerWidth, window.innerHeight);</p>
<p>document.body.appendChild(renderer.domElement);</p>
<p>&nbsp;</p>
<p>const shape = new THREE.Shape();</p>
<p>const radius = 2;</p>
<p>const sides = 6;</p>
<p>for (let i = 0; i &lt;= sides; i++) {</p>
<p style="padding-left: 30px;">const angle = (i / sides) * Math.PI * 2;</p>
<p style="padding-left: 30px;">const x = Math.cos(angle) * radius;</p>
<p style="padding-left: 30px;">const y = Math.sin(angle) * radius;</p>
<p style="padding-left: 30px;">if (i === 0) shape.moveTo(x, y);</p>
<p style="padding-left: 30px;">else shape.lineTo(x, y);</p>
<p>}</p>
<p>&nbsp;</p>
<p>const extrudeSettings = {</p>
<p style="padding-left: 30px;">depth: 5,</p>
<p style="padding-left: 30px;">bevelEnabled: true,</p>
<p style="padding-left: 30px;">bevelThickness: 0.5,</p>
<p style="padding-left: 30px;">bevelSize: 0.5,</p>
<p style="padding-left: 30px;">bevelSegments: 3</p>
<p>};</p>
<p>const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);</p>
<p>&nbsp;</p>
<p>const material = new THREE.MeshStandardMaterial({ color: 0x00aaff, metalness: 0.2, roughness: 0.7 });</p>
<p>const mesh = new THREE.Mesh(geometry, material);</p>
<p>scene.add(mesh);</p>
<p>&nbsp;</p>
<p>const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);</p>
<p>scene.add(ambientLight);</p>
<p>const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);</p>
<p>directionalLight.position.set(10, 20, 5);</p>
<p>scene.add(directionalLight);</p>
<p>&nbsp;</p>
<p>camera.position.z = 15;</p>
<p>const controls = new OrbitControls(camera, renderer.domElement);</p>
<p>&nbsp;</p>
<p>function animate() {</p>
<p style="padding-left: 30px;">requestAnimationFrame(animate);</p>
<p style="padding-left: 30px;">controls.update();</p>
<p style="padding-left: 30px;">renderer.render(scene, camera);</p>
<p>}</p>
<p>animate();</p>
<p style="text-align: justify;"><span><br />
</span></p>
<p style="text-align: justify;"><span>Процесс выдавливания, описанный в коде, визуально представлен на Рисунке 1 и Рисунке 2. На первой иллюстрации показан исходный профиль, а на второй — итоговая трёхмерная модель после применения экструзии:<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/122625_0607_21.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 2. Результат экструдирования профиля вдоль оси Z<br />
</span></p>
<p style="text-align: center;"><span><strong>Заключение<br />
</strong></span></p>
<p style="text-align: justify;"><span>Техника экструдирования, несмотря на свою простоту и повсеместное использование, продолжает оставаться важным учебным и практическим инструментом в области трёхмерного моделирования и компьютерной графики. Её применение в среде Three.js, как показано в работе, позволяет эффективно создавать объёмные объекты из плоских контуров, демонстрируя типичный пайплайн для параметрического моделирования в веб-среде. Ключевыми этапами являются корректное задание профиля, настройка параметров выдавливания и управление материалами с освещением. Освоение этого метода формирует прочную основу для перехода к более сложным техникам, таким как булевы операции, модификация геометрии, скелетная анимация и работа с воксельными данными, что открывает путь к решению современных задач в разработке игр, симуляций и интерактивных визуализаций.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/104020/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
