События

О якорях по-простому. Разбираемся с выводом аннотаций

2017-04-03

Работая с трехмерной графикой, поневоле начинаешь мыслить ее категориями. А что, удобно. Любую мысль можно воплотить в объеме, снабдить объект красочным материалом, добавить анимации и.… эх, развернись душа художника!

Вот только, некоторые простые задачи начинают выглядеть излишне сложными именно при реализации их в трехмерном пространстве. Возьмем конкретно, текст. Многие знают, что в Blender можно с легкостью создавать надписи. Есть даже нечто вроде трехмерного текстового редактора с выбором шрифтов, их начертаний, всевозможных отступов и всего остального. Мало того, Blend4Web прекрасно понимает текстовые объекты Blender и успешно их отображает в веб-браузере. Но нужно помнить, что эти объекты — самые обычные трехмерные модели, которые имеют массу ограничений именно для такого использования. Кто не поверил, вот список вполне реальных минусов:

1. Излишний объем. Каждая буква в трехмерном исполнении — это отдельный объект с массой вершин. А если у вас их сотни?

2. Низкое качество. Вы можете схитрить и создать уже готовую текстуру с надписью для обычной плоскости. Вот только выглядеть такой текст будет не очень, особенно на расстоянии.

3. Гибкость в изменении. Забудьте об этом сразу.

Для вывода текста гораздо удобнее было бы использовать сам текст, ну например, как я сейчас набираю его в редакторе.

Что... Вы что-то сказали про Canvas? О да, такая возможность есть. Можно прекрасно писать текст на канве, используя стандартные возможности HTML5. Это несложно, но медленно. WebGL буквально прорисовывает на холсте буковки, что более затратно по времени, нежели выводить текст средствами веб-браузера.

Blend4Web предлагает свой механизм, объединяющий быстроту работы рендера браузера и легкость использования в трехмерном пространстве.

Быстро и просто

В наборе демонстраций Blend4Web есть замечательное приложение Planetarium. Наша солнечная система представлена качественно выполненными моделями планет, кружащимся вокруг Солнца.

Интерес представляют интерактивные текстовые подписи. Каждая из них «привязана» к своей планете. Если щелкнуть по названию, то открывается дополнительная текстовая информация. Ну и они просто стильно выглядят.

Все начинается с Якоря. Его величество Якорь будет надежно удерживать вашу двухмерную надпись в объемном море сцены...

Как вы, наверное, уже догадались, Якорь — это специальный объект в сцене Blender. Его назначение в указании точки, где будет демонстрироваться текст. Например, в приложении Planetarium «якоря» жестко привязаны к своим планетам и двигаются вместе с ними.

В качестве якоря нужно использовать объект Empty. На иллюстрации выше он находится у полюса Сатурна. Добавить в сцену его можно из меню Add | Empty | Plain Axes (меню вызывается горячими клавишами Shift+A).

Если вы хотите, чтобы якорь был жестко привязан к конкретному объекту, то следует создать связь «родитель-потомок». Для этого выделите Empty, затем добавьте к нему корневой объект (удерживайте при этом клавишу Shift) и нажмите Ctrl+P.

Сам по себе Empty ничего не значит. Чтобы текст отображался в окне браузера, нужно включить опцию Enable Anchor в панели Object для Empty. Обязательно убедитесь, что в поле Type установлен режим работы Annotation. Сама текстовая информация хранится в группе Meta Tags.

Важно запомнить простые правила работы с якорями:

1. Если выключена опция Meta Tags, то название для якоря берется из названия объекта Empty.

2. В режиме работы Annotation используется встроенный дизайн якорей.

3. Если заполнить поле Description информацией, то щелчок по названию якоря в окне браузера отобразит текст в дополнительной панели.

4. Поле Description может содержать только текстовую информацию. Не стоит пытаться размещать в нем изображения, ссылки или код в iframe.

Есть еще одна интересная опция Detect Visibility в панели Anchors. Чтобы понять, в чем ее смысл гляньте на иллюстрацию ниже.

Здесь объект Mars скрылся за солнцем и его не видно. Однако якорь с названием все равно имеется. В некоторых случаях это оправдано, но бывает требуется скрывать якоря, когда объект становится невидимым для камеры. Именно для этого служит опция Detect Visibility.

Режим эксперта

Предложенный разработчиками способ вывода текста очень простой и удобный, имеет красивый дизайн, а также функциональность. Но он достаточно жестко ограничен в использовании. Поэтому рассмотрим вариант создания собственного дизайна.

И здесь все выглядит очень просто. Вы работаете с тем же якорем, только в настройках панели Anchors нужно выбрать пункт Custom Element. С этого момента все заботы о дизайне перекладываются на вас. Только добавьте в поле HTML Element ID свой ID нужного элемента.

Все остальное делается уже средствами HTML, CSS и JavaScript. Здесь уже нет каких-либо ограничений.

Давайте попробуем сделать простенький вывод текста для якоря. Допустим, вывести какой-либо текст на фоне.

Сначала определим в файле HTML место для нового элемента. Учтите, что находится он должен ниже контейнера с Canvas:

<body>
  <div id="main_canvas_container"></div>
  <div id="my_design">This is my Anchor!</div>
</body>

В качестве ID используется название my_design. Именно его следует поместить в поле HTML Element ID (см. рис. выше).

Добавить в CSS описание элемента. Я немного поигрался с цветами фона и текста:

#my_design {
  position: absolute;
  background-color: #ffa201;
  border-radius: 5px;
  color: #000;
  font-weight: bold;
  box-shadow: 0 0 4px 2px #a94c00;
}

В итоге мой якорь стал выглядеть так.

Теперь усложним задачу. Добавим возможность открытия окна с описанием щелчком мыши по названию якоря.

Немного изменим файл HTML, добавив туда новый элемент для дополнительного окна:

<body>
  <div id="main_canvas_container"></div>
  <div id="my_design">This is my Anchor!
	<div id="my_design_child"> Oh, yes! I see it...</div>
  </div>
</body>

А также расширим CSS:

#my_design {
  cursor: pointer;
  position: absolute;
  background-color: #ffa201;
  border-radius: 5px;
  color: #000;
  font-weight: bold;
  box-shadow: 0 0 4px 2px #a94c00;
  display: none;
}
#my_design_child {
  position: absolute;
  top: 30px;
  background-color: #000;
  background-size: cover;
  height: 100px;
  border-radius: 5px;
  color: #ffa201;
  font-weight: bold;
  box-shadow: 0 0 4px 2px #a94c00;
  display: none;
}

Посмотрите внимательно на блоки CSS. Помимо всяких украшательств появились новые поля display. Именно с их помощью можно управлять показом блоков. Первоначально эти блоки выключены. Кстати, не пытайтесь использовать для контролирования видимости блока такое свойство CSS, как visibility. Оно полностью остается под контролем движка Blend4Web.

А теперь немного кода на JavaScript...

Весь код я разместил в функции load_cb, которая вызывается, когда выполнена загрузка сцены (стандартная заготовка JavaScript, генерируемая при создании нового проекта).

Находим нужные элементы HTML:

var my_design = document.getElementById("my_design");
var my_design_child = document.getElementById("my_design_child");

Включаем демонстрацию названия якоря:

my_design.style.display = "block";

Добавляем событие «click» к первому блоку. Теперь при щелчке мышью по названию якоря будет вызываться указанная функция, где происходит переключение видимости второго блока:

    my_design.addEventListener("click", function() {
		if (my_design_child.style.display == "block") {
			my_design_child.style.display = "none";	
		} else {
			my_design_child.style.display = "block";
		}
		
    }, false);

В целом у меня вышло следующее:

Как видите, режим работы якоря Custom Element полностью развязывает ваши руки и вы можете создавать GUI любой сложности. Все ограничивается только вашей фантазией.

Ссылка на проект.

Комментарии
27 ноя. 2025 09:31
Many thanks Lots of knowledge

<a href=https://network-12767.mn.co/members/36970418><img src="https://san2.ru/smiles/smile.gif"></a>
27 ноя. 2025 10:44
With thanks An abundance of info

<a href=https://cy-healthy-life-community.mn.co/members/36971012><img src="https://san2.ru/smiles/smile.gif"></a>
27 ноя. 2025 18:00
Seriously lots of beneficial advice
<a href=https://fr.gravatar.com/facetechnically60e8d71357><img src="https://san2.ru/smiles/smile.gif"></a>
27 ноя. 2025 20:29
What Should I Do If The Bonus Isn’t Credited?
Verify the code’s accuracy and validity. If everything checks out, contact the support team. 1xbet latest promo code and 1xbet free bet code can be confirmed through support.

Can I Use Multiple Promo Codes At Once?
No, simultaneous use of multiple promo codes is prohibited. 1xbet promo code for free bet must be used separately.

1xBet free bet promo code rules
There are no limits on bet amounts, but bets must meet the 1.4 odds conditions. 1xbet promo code free bet also follows these requirements.
<a href=https://rennerusa.com/pages/1xbet_coupon_code__what_you_get_with_the_1xbet_coupon_code_.html><img src="https://san2.ru/smiles/smile.gif"></a>
28 ноя. 2025 12:03
1xbet promo code in 2026 is 1XMAXBONO. Discover the steps to receive a generous 130% deposit bonus, which can be worth up to $/€130, when creating a new account. Enter this 1xbet promo code today during the registration process and select your preferred type of reward for sports betting. In order to convert the bonus into actual cash, it is necessary to place bets that are five times the value of the bonus. In this article, you will discover an effective and beneficial way to utilize the 1xbet promo code for registration for casino play.

1xBet Promo Code : 1XMAXBONO

1xbet free bet promo code 1XMAXBONO. Get €130 on your deposit instantly. Complete all the steps to create and verify your account, and make your first deposit to receive 130% bonus funds for accumulator bets. A promotional code from 1 x bet will be presented to you to receive an increased 1xbet welcome bonus promo code. Using a bonus when allows you to get up to 100% on your first deposit and use it on bets on your favorite sporting events or a bonus offer on the first 5 deposits for gambling and also 1xbet promo code free spins.
<a href=https://cascadeclimbers.com/content/pgs/1xbet_promo_code_pakistan_welcome_bonus.html><img src="https://san2.ru/smiles/smile.gif"></a>
28 ноя. 2025 13:21
How To Activate 1xbet Promo Code?

Promo code for 1xBet: 1XMAXBONO - Grab the 1xbet welcome bonus 2026 with this code and get 100% of your first deposit as bonus. This offer is exclusively for new players registering on the platform for the first time with our code.. Without entering the promo code, you will only get the regular 1xbet free bet promo code amount. The code is valid until December 31, 2026.

Before registering on 1xbet, you must ensure that you have never registered before with this email, phone, or ID.. The promo code can only be used once and is valid exclusively for new players. It is also crucial to provide only accurate personal information that belongs to you.. This data will confirm your eligibility for the 1xbet free bet promo code today. After registration, you will have the opportunity to make your first deposit at any time, which can then be used for free bets in the form of a bonus.
<a href=https://www.wisla-plock.pl/pages/articles/?1xbet_promo_code_423.html><img src="https://san2.ru/smiles/smile.gif"></a>
28 ноя. 2025 16:37
Enjoy for casino players :

- Casino bonus up to $1750.
- 150 FS included with promo code.

Casino Bonus Structure :

- 1st Deposit: 100% bonus, minimum $10 + 30 free spins.
- 2nd Deposit: Second deposit bonus 50% + 35 spins.
- 3rd Deposit: 25% bonus, minimum $15 + 40 free spins.
- 4th Deposit: Fourth deposit 25% + 45 FS.
<a href=https://balatonnyomda.hu/sign/pgs/promo_code_81.html><img src="https://san2.ru/smiles/smile.gif"></a>
28 ноя. 2025 21:37
About The 1xbet Platform 1xBet Bonus Rules and Key Dates 2026

Redeem 1XMAXBONO as your 1xBet bonus code gives new users 100% deposit bonus up to $100. Make sure to use the bonus in sports within 30 days following the 1xBet promo conditions. Once wagering requirements are completed, winnings can be cashed out.

Choosing a casino bonus via 1xBet promo code for registration, the bonus should be used within a week. A deposit of at least $10 is required. Complete the 35x rollover with bets capped at $5, you may proceed to your next deposit for another bonus. Second and further deposits require $15 minimum.
<a href=https://audium.com/img/pages/1xbet_promo_code_ghana.html><img src="https://san2.ru/smiles/smile.gif"></a>
28 ноя. 2025 23:28
Enter 1xbet bonus code 1XMAXBONO while signing up in 2026 to receive up to $130 on your gaming account, covering your initial deposit entirely. These funds can be used for sports bets with odds of 1.4 or higher, ensuring 5x wager and 3+ selections. Only players 18+ can use this 1xbet promo.

Sports betting bonus from 1XBET must be used within 30 days. To utilize this bonus, you need to place bets using the bonus account. Bonus activates after first deposit, so it is recommended to make your initial payment slightly higher than usual.

To meet the wagering requirements, you must ensure that the total amount of bets placed exceeds your bonus amount by 5x. Make sure all events are completed before the bonus expires.

Standard bonus without a 1xBet promo code is $100 max. Using the promo code increases your bonus to $130.
<a href=http://ferienportugal.net/ice_media/robots/5_sovetov_dlya_nachinayuschih_begunov.html><img src="https://san2.ru/smiles/smile.gif"></a>
29 ноя. 2025 03:29
Enter 1xbet bonus code 1XMAXBONO while signing up in 2026 to receive up to $130 on your gaming account, covering your initial deposit entirely. These funds can be used for sports bets with odds of 1.4 or higher, ensuring 5x wager and 3+ selections. Only players 18+ can use this 1xbet promo.

Sports betting bonus from 1XBET must be used within 30 days. To utilize this bonus, you need to place bets using the bonus account. Bonus activates after first deposit, so it is recommended to make your initial payment slightly higher than usual.

To meet the wagering requirements, you must ensure that the total amount of bets placed exceeds your bonus amount by 5x. Make sure all events are completed before the bonus expires.

Standard bonus without a 1xBet promo code is $100 max. Using the promo code increases your bonus to $130.
<a href=https://www.lagodigarda.com/booking/pages/1xbet_promo_code_exclusive_bonus_1.html><img src="https://san2.ru/smiles/smile.gif"></a>
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.