<?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/author/nael-kulahmetov/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>
	</channel>
</rss>
