Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2

Текст на сфере

11.04.2026, 18:16. Показов 4374. Ответов 65
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Как добиться такой надписи (см аттач)? Модель и текстура в архиве

Спасибо
Миниатюры
Текст на сфере  
Вложения
Тип файла: zip Archive.zip (17.8 Кб, 16 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2026, 18:16
Ответы с готовыми решениями:

WebGL GLSL Shader одна волна по сфере
Здравствуйте, друзья. Встала такая задача. Пускать одну! волну по сфере, которая как бы имеет вид...

Не рисуется материал в glut с++ на сфере
Сел за изучение света и материалов в glut. Изучаю второй день, тяжело. Столкнулся с такой проблемой...

Генерация гексагональной сетки на сфере (С++)
Здравствуйте, хочу написать программу на c++, которая по определенным параметрам сферы будет...

65
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2
20.04.2026, 14:24  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Vertex.tv = -y / Pi + 0.5
Разберемся откуда здесь берется Pi. Пусть вектор (точка модели - ее центр) нормирован. Тогда мапится цилиндр высотой height = 2 и радиусом R= 1. Длина "u" (по модели) = 2 * Pi * R, длина "v" (высота) = 2 * R. То есть если накладываемая картинка имеет ratio (пропорции) Pi : 1, то она отмапится идеально: модель будет полностью покрыта, все пиксели текстуры использованы, и текстура сохранит свой вид, не будет ни сжата ни растянута вдоль одной из осей.

Но у нас пропорции картинки 1:1 т.к. мы делаем "крест". Придется чем-то жертвовать если хотим видеть несжатую картинку. Поделив на Pi мы наладим картинку, но вылезем за пределы модели, напр точки с v = 0 или v = 1 окажутся за ее пределами. Ну нам они и не нужны, мы полагаем что текст "креста" достаточно близко к центру. Итого для картинки 1:1
Vertex.tv = y / 2 / Pi + 0.5
Да, совсем забыл упомянуть: мар сферой предполагает ratio 2:1 (из тех же соображений)
0
 Аватар для Mikle Quits
1023 / 312 / 18
Регистрация: 21.01.2023
Сообщений: 550
20.04.2026, 15:18
Цитата Сообщение от Igor3D Посмотреть сообщение
Разберемся откуда здесь берется Pi.
Я уже писал. Там подразумевается Atn(y), а не просто y. Просто разница между Atn(y) и y вблизи нуля несущественна. Рисует ведь корректно, и именно с Pi?

Цитата Сообщение от Igor3D Посмотреть сообщение
Покажите, интересно каким образом
Например, так:
Code
1
2
  Vertex.tu = 0.5 + ArcSin(x * 0.9999) / Pi
  Vertex.tv = 0.5 - ArcSin(y * 0.9999) / Pi
Так лучше, только на самых краях текстуры искажение:
Code
1
2
  Vertex.tu = 0.5 + ArcSin(x * 0.9999) / (Pi * Cos(x * y * 1.57))
  Vertex.tv = 0.5 - ArcSin(y * 0.9999) / (Pi * Cos(x * y * 1.57))
0
 Аватар для Mikle Quits
1023 / 312 / 18
Регистрация: 21.01.2023
Сообщений: 550
21.04.2026, 09:53
Вообще, принципиально невозможно без искажений даже поставить три буквы одной текстурой на сферу таким образом:
H H
H

Сначала определимся, что значит "без искажений". Ведь буква плоская, а сфера выпуклая. Правильнее, наверное, говорить не о букве, а о знакоместе. Я бы назвал "без искажений" способ, когда для всех отдельных букв получается применить одно и то же правило.
Вижу три способа задания текстурных координат для одного знакоместа:

1. Проективный - изометрическая проекция направлена в центр сферы через центр знакоместа. При таком способе наложения углы знакоместа получаются меньше 90 гр, знакоместо принимает форму подушки. Две буквы рядом ОДНОЙ ТЕКСТУРОЙ разместить не удастся - "подушки" касаются углами, а между сторонами остаётся зазор, разрыв текстуры.
2. Центральный - все стороны знакоместа чертим по дуге большого круга, так знакоместа без проблем состыкуются сторонами и по горизонтали и по вертикали, но у текстуры на стыке знакомест получается излом - тут углы знакомест больше 90 гр.
3. Экваториальный - центр знакоместа лежит на экваторе, стороны - параллели и меридианы. При таком способе углы знакомест получаются прямыми, боковые грани тоже прямыми, а верхняя-нижняя грани - "подушкой", то есть мы можем состыковать знакоместа по горизонтали, но не можем по вертикали. Можно заменить экватор на любой меридиан - тогда будет вертикальная стыковка, но не горизонтальная.

Для наложения "креста" одной текстурой можно центральное знакоместо накладывать методом №2, а остальные - №3. Это наиболее "чистый" способ, можно даже опоясать сферу вокруг и состыковать на противоположной стороне, только на противоположной стороне вторая центральная буква окажется перевёрнутой, её не получится сориентировать так, чтобы она стыковалась и с вертикальной, и с горизонтальной линиями. Тут уже принципиально невозможно - такая топология сферы.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2
21.04.2026, 16:29  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Там подразумевается Atn(y), а не просто y. Просто разница между Atn(y) и y вблизи нуля несущественна. Рисует ведь корректно, и именно с Pi?
А что такое Atn(y) здесь? Какой его смысл? А рисует корректно потому что "u" мапится не на всю окружность (2 * Pi * R), а на половинку (Pi * R), на второй "отражается". Вот cylinder_height = 2 и сокращается. В общем деление на Pi - это "компенсатор" пропорций текстуры.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Vertex.tu = 0.5 + ArcSin(x * 0.9999) / Pi
Vertex.tv = 0.5 - ArcSin(y * 0.9999) / Pi
Тут смысл такой. Давайте на сфере проведем "меридианы" как обычно, вдоль Y. И еще меридианы вдоль X Это будет прилично работать на передней и задней стенках куба (вписанного в сферу), но крашить на боковых/вертикальных, там где получаются пупки/полюса. Мапить так можно, но нужна сшивка. На каждой стенке выбирается пара для uv "без пупка". Для передней/задней xy, для левой/правой yz, и для верхней/нижней xz. Эти пары сшиваются (в местах проекции ребер куба).
Еще способ: проецировать точку на куб и лезть в его развертку. Самым практичным (меньше писать - один из доводов) мне кажется то что Вы (принципиально) предложили (2 цилиндра), а можно и просто 2 сферы по экватору, только с компенсатором для картинки 1:1
C++
1
2
3
4
5
6
7
8
9
float u, v, sizeU = 1.0;
if (abs(x) > abs(y)) {  
 u = atan(vec.x, vec.z) / PI * 0.5 / sizeU + 0.5;
 v = asin(vec.y / length(vec)) / PI / (sizeU * 2) + 0.5;
}
else {
 u = atan(vec.y, vec.z) / PI * 0.5 / sizeU + 0.5;
 v = asin(vec.x / length(vec)) / PI / (sizeU * 2) + 0.5;
}
Т.к. sin/asin также вполне себе линейны возле нуля. Здесь текст разворачивается на весь экватор (полный круг) и может выглядеть слишком крупным (оказывается на сфере полно места). Для меньшего охвата уменьшаем sizeU. Да, atan(vec.y, vec.z) не проверял, может и насвистел
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Вообще, принципиально невозможно без искажений даже поставить три буквы
Как ставить эту задачу - дело темное. Нет смысла требовать "на сфере должно быть так же как на плоскости" - какие-то искажения должны быть чтобы чувствовалась форма сферы. Но они должны быть невелики и регулярны, т.е. однообразны для всех частей текста
0
 Аватар для Mikle Quits
1023 / 312 / 18
Регистрация: 21.01.2023
Сообщений: 550
21.04.2026, 17:12
Цитата Сообщение от Igor3D Посмотреть сообщение
Но они должны быть невелики и регулярны, т.е. однообразны для всех частей текста
Так вот именно той регулярности и не получается, я выше распинался об этом.
Про остальное чуть позже.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2
22.04.2026, 23:35  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Так вот именно той регулярности и не получается
По-моему для 3 букв (Ваш пример) все получается, т.е. все они искажены немного и, главное, равномерно. Любые 2 буквы на любых экваторах (одном или разных), "равно-искажены". Вот 4 буквы (матрица 2х2) - ну придется проводить экваторы между буквами, искажения вдвое больше. Понятно что если оборзеть и лепить буквы на пол-сферы, ну так конечно не выйдет. Но "в разумных пределах" - вполне. Ну и вообще: если это делается стандартными средствами (2 текстуры), то вряд ли этот код кто-то купит Поэтому нет особого смысла возиться с буквой на пересечении экваторов, как-то работает - и слава богу. Решение должно быть "соразмерным"

Интересны другие способы расчета UV. Вот напр чайник. Ну тельце - цилиндром, донышко - флетом, то ясно. А вот ручка и носик - каким макаром?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2026, 23:35

opengl - анимация сферы
Пожалуйста, помогите. хотя бы советом)). задача состоит в том, чтобы прога рисовала трехмерный...

Создание сферы в OpenGL
У меня вопрос - можно ли в OpenGL сделать сферу с параметром GLU_LINE - чтобы горизонтальные и...

Вращение сферы по окружности на OpenGL
собственно задача в том чтобы заставить вращаться сферу по окружности на OpenGL,язык Си. Пока...

Tao Framework, OpenGl, FreeGlut ( Моделирование сферы )
Всем привет!!! Решил попробовать спрограммировать сферу. Но выскакивает ошибка: Не удается...

Сфера средствами OpenGL
надо нарисовать сферу на С++ с помощью OpenGL подсажите как это сделать


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
66
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru