Перейти к содержанию
  • записей
    9
  • комментариев
    18
  • просмотров
    890

Отзеркаливание текста в параметрическом объекте (Модуль СПДС) (2)


dromandon

194 просмотра

В продолжение этого урока "Отзеркаливание текста в параметрическом объекте"

Работать будем с получившимся объектом в предыдущем уроке и будем его упрощать и дорабатывать.

На самом деле, действий не так много придётся совершить =) Благодаря случайности обратил внимание, что у всех объектов разница углов между vecDirection и осью oZ, и vecPlane и осью o Z будет всегда равна 90 градусов. Только у неотзеркаленых она положительная,А у отзеркаленых - отрицательная

Давайте проверим это и добавим два параметра в наш объект:

	rAngleZ1, "Угол Z (Direction)", 
	rAngleZ2, "Угол Z (Plane)", 

Так же добавим их в функцию MirrorObject:

	rAngleZ1 = angleTwoPi(vecDirection,oZ);
	rAngleZ2 = angleTwoPi(vecPlane,oZ);

и закомментируем наши rAngleX и rAngleY в функции MirrorObject, чтобы не производилось отзеркаливание объекта.

Достаём объект из базы, поворачиваем его всячески и зеркалим, убеждаясь в словах выше:

Спойлер

 

Видим, что по-мимо углов в 90 и -90 градусов присутствует углы в -270 и 270 градусов соответственно, причина этому то, что когда величина угла достигает 360 градусов она сбрасывается на 0,  и получается, что 10-280=-270,но при этом 370-280=90.

Не забываем отразить это в нашем коде.

Для удобства в  функции MirrorObject добавим переменную a равную a=rAngleZ1-rAngleZ2

Пишем в функции MirrorObject:

	rAngleZ1 = angleTwoPi(vecDirection,oZ);
	rAngleZ2 = angleTwoPi(vecPlane,oZ);
	a=rAngleZ1-rAngleZ2;
	if(a==-90 || a==270)
	{
		vecDirection=-vecDirection;
	}

Теперь наш объект зеркалится обратно, но остаётся проблема с поворотом текста

Для поворота текста будем работать с переменной rAngleY, "Угол Y", поэтому надо её расскомментировать.

Теперь обновляем наши объекты и определяем уже не точные значения, а промежуток, в котором нам надо развернуть текст на 180 градусов.

У меня он получился от  90<rAngleY<=270

Исходя из этого, обновляем нашу функцию следующим образом, тем самым приводя её к итоговому виду

	rAngleY = angleTwoPi(oY,vecPlane);
	rAngleZ1 = angleTwoPi(vecDirection,oZ);
	rAngleZ2 = angleTwoPi(vecPlane,oZ);
	a=rAngleZ1-rAngleZ2;
	sTextAngle=0;
	if(a==-90 || a==270)
	{
		vecDirection=-vecDirection;
	}
	if(rAngleY>90 && rAngleY<=270)
	{
		sTextAngle=180;
	}

 

Обновляем наши объекты и наслаждаемся результатом =)

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

Изменено пользователем dromandon

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Гость
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...