<?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; drag-and-drop</title>
	<atom:link href="http://web.snauka.ru/issues/tag/drag-and-drop/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +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>Создание интерактивных 3D-объектов с помощью WebGL</title>
		<link>https://web.snauka.ru/issues/2024/01/101327</link>
		<comments>https://web.snauka.ru/issues/2024/01/101327#comments</comments>
		<pubDate>Fri, 19 Jan 2024 16:26:06 +0000</pubDate>
		<dc:creator>Кулахметов Наиль Рустамович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-моделирование]]></category>
		<category><![CDATA[drag-and-drop]]></category>
		<category><![CDATA[Eventcontrols]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[интерактивность]]></category>
		<category><![CDATA[компьютерная графика]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/01/101327</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Создание интерактивных объектов в 3D может придать вашим проектам совершенно новый уровень интерактивности и погружения. Разрабатываете ли вы игру, опыт виртуальной реальности или симуляцию, предоставление пользователям возможности манипулировать объектами в 3D-пространстве может значительно улучшить общий пользовательский опыт. В этой статье мы рассмотрим процесс создания [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em><span>к.ф.-м.н., </span>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Создание интерактивных объектов в 3D может придать вашим проектам совершенно новый уровень интерактивности и погружения. Разрабатываете ли вы игру, опыт виртуальной реальности или симуляцию, предоставление пользователям возможности манипулировать объектами в 3D-пространстве может значительно улучшить общий пользовательский опыт. В этой статье мы рассмотрим процесс создания перетаскиваемых объектов в 3D-среде. Примеры будут реализован в виде html-страницы с помощью WebGL, что обеспечит их легкое встраивание на любой сайт.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">WebGL, сокращение от Web Graphics Library, представляет собой JavaScript API, который позволяет отображать интерактивную 2D и 3D графику в любом совместимом веб-браузере. Он основан на OpenGL ES, широко используемой графической библиотеке для встраиваемых систем.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Используя WebGL, веб-разработчики могут создавать и отображать высокопроизводительную графику и визуальные эффекты в веб-приложениях без необходимости установки дополнительных плагинов или программного обеспечения. WebGL поддерживается большинством современных веб-браузеров и работает на различных платформах, включая настольные компьютеры и мобильные устройства.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Чтобы работать с WebGL, вам необходимо иметь четкое представление о концепциях JavaScript и компьютерной графики. Существуют также библиотеки и фреймворки, такие как Three.js и Babylon.js, которые упрощают процесс разработки, предоставляя абстракции более высокого уровня и утилиты для программирования на WebGL.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">В этой статье будет использоваться Three.js. Внутри этой библиотеки есть класс EventsControls, который упрощает создание интерактивных приложений. Он предоставляет следующие возможности:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">– Добавление события клика мышкой по объекту;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">– Добавление события наведения мышки на объекты;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">– Перетаскивание объектов с помощью мышки;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">– Добавленные события работают с классом Mesh и с классом Object3D.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Для работы нам нужна библиотека Three.js и её класс EventsControl, подключаем их:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">&lt;script type=&#8221;module&#8221;&gt;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">    import * as THREE from &#8216;three&#8217;;<br />
</span></p>
<p style="background: white;"><span style="color: #111111;">    import { EventControls } from &#8216;https://alexan0308.github.io/threejs/examples/js/controls/EventControls.js&#8217;;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cоздадим переменную, которая будет отвечать за перемещение объектов:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">const dragObjects = [];<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Прописываем события:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">eventControl = new EventControls( [ ... dragObjects ], camera, renderer.domElement );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">eventControl.setDraggable( render, true );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">eventControl.setMap ( checkerboard );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">eventControl.setOrbitControl( controls );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Прописываем функцию, в которой будет работать перемещение объекта:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">eventControl.attachEvent( &#8216;dragAndDrop&#8217;, function () {<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">    this.event.object.position.x =<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">        100*Math.round( this.event.object.position.x / 100);<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">    this.event.object.position.z =<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">        100*Math.round( this.event.object.position.z / 100);<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">});<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Для примера создадим объект, к примеру куб и прописываем ему параметры: размер, координаты расположения, высоту и т.д.:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">var geometry = new THREE.BoxGeometry( 200, 200, 200 );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">var material = new THREE.MeshPhongMaterial( { color: 0x32CD32 } );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube = new THREE.Mesh( geometry, material );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube.position.set( 200, 0, -400 );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube.rotation.y = 300;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">scene.add( Cube );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">var Cube_bbox = new THREE.Box3();<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube_bbox.setFromObject( Cube );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube.height = Cube_bbox.max.y &#8211; Cube_bbox.min.y;<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Cube.position.set( 200, Cube.height/2, -400 );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">А чтобы можно было сделать куб интерактивным допишем ему переменную, которую создали, для реализации перемещения объектов:<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;"><span><strong>    </strong></span><span>dragObjects.push( Cube );<br />
</span></span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">    scene.add( Cube );<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Для подробного показа примера, были созданы несколько фигур, и чайник:<br />
</span></p>
<p style="background: white; text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/01/011924_1431_1.png" alt="" /><span style="color: #111111;"><br />
</span></p>
<p style="text-align: center; background: white;"><span style="color: #111111;">Рисунок 1. Интерактивные 3D-объекты созданные в WebGL.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;">Теперь их можно переместить, для наглядной демонстрации:<br />
</span></p>
<p style="background: white; text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/01/011924_1431_2.png" alt="" /><span style="color: #111111;"><br />
</span></p>
<p style="text-align: center; background: white;"><span style="color: #111111;">Рисунок 2. Перемещённые 3D-объекты.<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;"><span>Технология WebGL позволяет отрисовывать качественную графику прямо в браузере. Библиотека three.js дает понятный и доступный набор классов и методов для работы с трехмерной графикой. А создание интерактивных 3D-объектов, к примеру для сайтов, позволит вам разнообразить опыт пользователя, и даже его заинтересовать.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/01/101327/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drag and Drop в 3D: перетаскивание трехмерных геометрических фигур в веб-приложении</title>
		<link>https://web.snauka.ru/issues/2026/01/104100</link>
		<comments>https://web.snauka.ru/issues/2026/01/104100#comments</comments>
		<pubDate>Mon, 05 Jan 2026 05:49:59 +0000</pubDate>
		<dc:creator>Яковлев Юлиан Юрьевич</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-графика]]></category>
		<category><![CDATA[drag-and-drop]]></category>
		<category><![CDATA[Ray Casting]]></category>
		<category><![CDATA[rendering]]></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/2026/01/104100</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович Уфимский университет науки и технологий Нефтекамский филиал Кандидат физико-математических наук, доцент Интерактивность является ключевым аспектом современных графических приложений. Возможность напрямую манипулировать объектами в трехмерном пространстве значительно улучшает пользовательский опыт. В контексте учебных лабораторных работ по компьютерной графике добавление функциональности перетаскивания к базовым 3D-фигурам позволяет студентам глубже понять принципы работы с [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em>Уфимский университет науки и технологий Нефтекамский филиал<br />
</em><em>Кандидат физико-математических наук, доцент</em></p>
<p style="text-align: justify;"><span>Интерактивность является ключевым аспектом современных графических приложений. Возможность напрямую манипулировать объектами в трехмерном пространстве значительно улучшает пользовательский опыт. В контексте учебных лабораторных работ по компьютерной графике добавление функциональности перетаскивания к базовым 3D-фигурам позволяет студентам глубже понять принципы работы с трехмерными сценами и взаимодействия пользователя с графическими системами.<br />
</span></p>
<p style="text-align: justify;"><span>Основная сложность реализации Drag and Drop в 3D заключается в преобразовании координат из двумерного пространства экрана в трехмерное пространство сцены. Для этого используется техника Ray Casting:<br />
</span></p>
<ol style="margin-left: 53pt;">
<li>
<div style="text-align: justify;"><span>Преобразование координат мыши в нормализованные координаты устройства (-1 до 1);<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Создание луча из камеры через точку на экране;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Определение пересечения луча с объектами сцены:<br />
</span></div>
</li>
</ol>
<p style="text-align: justify;"><span>Ключевые матрицы для преобразований:<br />
</span></p>
<ul style="margin-left: 42pt;">
<li>
<div style="text-align: justify;"><span>Матрица проекции (projectionMatrix);<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Матрица вида (viewMatrix);<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Мировая матрица объекта (modelMatrix).<br />
</span></div>
</li>
</ul>
<p style="text-align: justify;"><span>Система состоит из трех основных компонентов:<br />
</span></p>
<ol style="margin-left: 53pt;">
<li>
<div style="text-align: justify;"><span>Менеджер объектов - хранит информацию о всех фигурах в сцене;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Обработчик событий - управляет вводом пользователя;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span>Система выбора объектов - определяет, какой объект выбран.<br />
</span></div>
</li>
</ol>
<p style="text-align: justify;"><span>Создадим восемь различных 3D-геометрических объектов с помощью библиотеки Three.js и добавим их в сцену – сферу, призму, пирамиду, цилиндры и т.д. (рисунок 1):<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Демонстрация Drag and Drop в WebGL<br />
</span></p>
<p style="text-align: justify;"><span>Объявим массив dragObjects, который будет использоваться для хранения объектов, которые пользователь хочет сделать интерактивными:<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop2.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span>Все объекты добавляются в массив dragObjects для поддержки функционала перетаскивания мышью.<br />
</span></p>
<p style="text-align: justify;"><span>Ниже приведены фрагменты кода:<br />
</span></p>
<p style="text-align: justify;"><span> 1. Сфера<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop3.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 2. Цилиндр<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop4.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 3. Куб<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop5.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 4. Пирамида<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop6.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 5. Конус<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop7.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 6. Призма (треугольная)<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop8.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 7. Кубоид (прямоугольный параллелепипед)<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop9.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span> 8. 6-угольная призма:<br />
</span></p>
<p style="text-align: justify;"><img src="https://web.snauka.ru/wp-content/uploads/2026/01/011626_0546_DragandDrop10.png" alt="" /><span><br />
</span></p>
<p style="text-align: justify;"><span>Теперь фигуры можно перетаскивать мышью (рисунок 1).<br />
</span></p>
<p style="text-align: center;"><span><strong>Заключение<br />
</strong></span></p>
<p style="text-align: justify;"><span>Реализация механизма Drag and Drop для 3D-фигур значительно расширяет возможности интерактивного взаимодействия с графическими сценами. Представленный подход позволяет интегрировать функциональность перетаскивания в существующие лабораторные работы по компьютерной графике без значительной переработки кода. Разработанное решение демонстрирует практическое применение математических основ компьютерной графики и может служить базой для более сложных интерактивных систем.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/01/104100/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
