<?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/konus/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>Создание трехмерных фигур с помощью WebGL</title>
		<link>https://web.snauka.ru/issues/2026/03/104338</link>
		<comments>https://web.snauka.ru/issues/2026/03/104338#comments</comments>
		<pubDate>Wed, 18 Mar 2026 10:42:28 +0000</pubDate>
		<dc:creator>Жеребцова Ксения Владимировна</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-графика]]></category>
		<category><![CDATA[JavaScript]]></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>
		<category><![CDATA[призма]]></category>
		<category><![CDATA[цилиндр]]></category>
		<category><![CDATA[шейдеры]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/03/104338</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал WebGL – это программная библиотека для JavaScript, которая позволяет создавать 3D графику, функционирующую в браузерах. Данная библиотека основана на архитектуре OpenGL. WebGL использует язык программирования шейдеров GLSL, имеющий C-подобный синтаксис. Особенность WebGL заключается в том, что код моделируется непосредственно в браузере с использованием элемента [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;" align="right">Научный руководитель: <em>Вильданов Алмаз Нафкатович<br />
</em><em>к.ф.-м.н., </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p>WebGL – это программная библиотека для JavaScript, которая позволяет создавать 3D графику, функционирующую в браузерах. Данная библиотека основана на архитектуре OpenGL. WebGL использует язык программирования шейдеров GLSL, имеющий C-подобный синтаксис. Особенность WebGL заключается в том, что код моделируется непосредственно в браузере с использованием элемента canvas, введенного в HTML5.</p>
<p>Работа с WebGL и шейдерами в частности — довольно трудоемкий процесс, требующий описания каждой точки, линии и грани. Для визуализации необходимо прописывать объемные фрагменты кода. Чтобы ускорить разработку, была создана библиотека Three.js, которая представляет собой набор готовых классов для создания и отображения интерактивной 3D графики. Three.js для WebGL — это как jQuery для JavaScript: библиотека предлагает декларативный синтаксис и абстрагирует разработчика от сложностей, связанных с 3D в браузере.</p>
<p>Для создания сцены с геометрическими фигурами мы использовали современный подход с импортом модулей:</p>
<p><em>javascript</em></p>
<p><em>import * as THREE from &#8216;three&#8217;;</em></p>
<p><em>import { OrbitControls } from &#8216;three/addons/controls/OrbitControls.js&#8217;;</em></p>
<p><em> </em></p>
<p>Такой способ подключения (с использованием import maps) является более чистым и предпочтительным в современных веб-приложениях.</p>
<p>Инициализация сцены и основных компонентов</p>
<p>Первым шагом мы создаем сцену, камеру и рендерер:</p>
<p>javascript</p>
<p>const container = document.createElement(&#8216;div&#8217;);</p>
<p>document.body.appendChild(container);</p>
<p>&nbsp;</p>
<p>camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 5000);</p>
<p>camera.position.set(300, 500, 1200);</p>
<p>&nbsp;</p>
<p>renderer = new THREE.WebGLRenderer({ antialias: true });</p>
<p>renderer.setSize(window.innerWidth, window.innerHeight);</p>
<p>container.appendChild(renderer.domElement);</p>
<p>Камера установлена на оптимальном расстоянии (1200 единиц), чтобы хорошо видеть оба ряда фигур. Параметр antialias включает сглаживание для более плавных краев объектов.</p>
<p><strong>Освещение сцены</strong></p>
<p>Для корректного отображения цветов и теней мы добавили два типа освещения:</p>
<p><em>javascript</em></p>
<p><em>ambientLight = new THREE.AmbientLight(0&#215;404040, 2.0);</em></p>
<p><em>light = new THREE.DirectionalLight(0xffffff, 1.5);</em></p>
<p><em>light.position.set(1, 2, 1);</em></p>
<p>Фоновый свет (AmbientLight) обеспечивает базовое освещение всех поверхностей, а направленный свет (DirectionalLight) создает объем и подчеркивает форму объектов.</p>
<p><strong>Управление камерой</strong></p>
<p>Для интерактивного взаимодействия с пользователем подключены контроллеры OrbitControls, позволяющие вращать камеру вокруг сцены, приближать и отдалять изображение:</p>
<p><em>javascript</em></p>
<p><em>controls = new OrbitControls(camera, renderer.domElement);</em></p>
<p><em>controls.rotateSpeed = 0.5;</em></p>
<p><em>controls.enableZoom = true;</em></p>
<p><em>controls.minDistance = 300;</em></p>
<p><em>controls.maxDistance = 2000;</em></p>
<p><em>controls.enableDamping = true;</em></p>
<p><strong>Размещение фигур в пространстве</strong></p>
<p>Для организации фигур мы использовали Декартову систему координат и расположили объекты в два ряда. Каждая фигура имеет свои координаты position.set(x, y, z):</p>
<p><em>javascript</em></p>
<p><em>// Параметры расположения</em></p>
<p><em>const spacingX = 300;       // расстояние между фигурами по X</em></p>
<p><em>const startX = -450;        // начальная координата X</em></p>
<p><em>const row1Z = -200;         // координата Z для первого ряда (задний)</em></p>
<p><em>const row2Z = 200;          // координата Z для второго ряда (передний)</em></p>
<p><strong>Создание геометрических фигур</strong></p>
<p>В нашей сцене представлены различные типы геометрических тел, созданные с помощью встроенных классов Three.js:</p>
<p><strong>1. </strong><strong>Прямоугольник (BoxGeometry)</strong></p>
<p><em>javascript</em></p>
<p><em>const geomBox = new THREE.BoxGeometry(300, 200, 220);</em></p>
<p><em>const box = new THREE.Mesh(geomBox, new THREE.MeshPhongMaterial({ color: 0xFFFF00 }));</em></p>
<p><strong>2. Цилиндры и призмы (CylinderGeometry)</strong></p>
<p>Класс CylinderGeometry универсален и позволяет создавать различные фигуры путем изменения параметров:</p>
<ul>
<li>Цилиндр (равные радиусы сверху и снизу, много сегментов)</li>
<li>Треугольная призма (равные радиусы, 3 сегмента)</li>
<li>Пятиугольная и шестиугольная призмы (равные радиусы, 5 и 6 сегментов)</li>
</ul>
<p><strong>3. Пирамиды и конусы</strong></p>
<p>Установка верхнего радиуса в 0 превращает цилиндр в пирамиду или конус:</p>
<ul>
<li>Четырехугольная пирамида (верхний радиус 0, 4 сегмента)</li>
<li>Шестиугольная пирамида (верхний радиус 0, 6 сегментов)</li>
<li>Конус (верхний радиус 0, много сегментов для гладкости)</li>
</ul>
<p><strong>Цветовое оформление</strong></p>
<p>Для каждой фигуры подобран индивидуальный цвет, делающий композицию яркой и наглядной:</p>
<ul>
<li>Желтый прямоугольник (0xFFFF00)</li>
<li>Синий цилиндр (0x0000FF)</li>
<li>Красная треугольная призма (0xFF0000)</li>
<li>Зеленая шестиугольная пирамида (0x00FF00)</li>
<li>Голубая пятиугольная призма (0x87CEEB)</li>
<li>Салатовая четырехугольная пирамида (0x90EE90)</li>
<li>Розовая шестиугольная призма (0xFFC0CB)</li>
<li>Золотой конус (0xFFD700)</li>
</ul>
<p><strong>Визуализация и анимация</strong></p>
<p>Для непрерывной отрисовки сцены используется цикл анимации:</p>
<p><em>javascript</em></p>
<p><em>function animate() {</em></p>
<p style="padding-left: 30px;"><em>    requestAnimationFrame(animate);</em></p>
<p style="padding-left: 30px;"><em>    controls.update();</em></p>
<p style="padding-left: 30px;"><em>    render();</em></p>
<p><em>}</em></p>
<p><em> </em></p>
<p><em>function render() {</em></p>
<p style="padding-left: 30px;"><em>    renderer.render(scene, camera);</em></p>
<p><em>}</em></p>
<p>Обработчик изменения размера окна обеспечивает корректное масштабирование сцены:</p>
<p><em>javascript</em></p>
<p><em>window.addEventListener(&#8216;resize&#8217;, onWindowResize, false);</em></p>
<p><strong>Результат</strong></p>
<p>В результате выполнения кода мы получаем интерактивную 3D-сцену с двумя рядами геометрических фигур (всего 8 объектов), расположенных на сером фоне со вспомогательной сеткой. Пользователь может свободно вращать камеру, приближать и рассматривать каждую фигуру с разных ракурсов, что делает данное решение отличным демонстрационным материалом для изучения возможностей Three.js и WebGL.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-104339" title="ris1" src="https://web.snauka.ru/wp-content/uploads/2026/03/ris11.png" alt="" width="643" height="293" /></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/03/104338/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
