Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Заблокирован

Рисование линии/ отрезка штрихами или точками

12.08.2017, 23:51. Показов 3290. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть отрезок в 1D, у которого известно:
1. его длинна L в абсолютных значениях (допустим 100 или 555.765)
2. есть нормализованный диапазон по Х от 0.0 до 1.0, где 0.0 - это стартовая точка отрезка, а 1.0 - конечная.

Как записать функцию, которая бы в зависимости от текущего Х закрашивала бы или не закрашивала бы пиксель, что бы линия рисовалась штрихами?

Речь о OpenGL/GLSL, эти координаты - текстурная координата Х прямоугольника примитива линии, хочу, что бы этот прямоугольник закрасился штрихами слева на право... Как записать зависимость от X?
Нужно что - то вроде:
C++
1
2
3
bool drawPixel = calcStep(X, stepSize, saceSize);
If(!drawPixel)
    discard;
Добавлено через 11 минут
Сам разобрался, оставлю тут для истории:
C++
1
2
3
4
5
6
7
8
float dashFactor = 100.0f;
float spaceFactor = 0.3;
 
float ip;
float fx = modf(fTexCoords.x * dashFactor, ip);
if(fx < spaceFactor)
    discard;
fragColor = vec4(1, 0, 0, 1);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2017, 23:51
Ответы с готовыми решениями:

Рисование на экране ломаной линии между точками
Помогите составить программу рисования на экране ломаной линии между точками, в которых производится нажатие левой клавиши мыши. ...

Рисование на экране линии или фигуры
Доброго времени суток.Суть задачи в том что нужно нарисовать на экране линию или фигуру и что бы курсор мышки прошелся по линии фигуры.С...

Рисование дополнительной линии под углом к основной линии
Доброго времени суток, всем. Помогите решить вопрос. Есть макрос рисующий линию между двумя координатами. Как изменить макрос,...

4
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
13.08.2017, 15:13
По-моему в OpenGL маску можно вставить т.е. штрих сам OpenGL делает.(читал в красной книге скорее всего, могу поискать, если интересно)
0
Заблокирован
13.08.2017, 19:40  [ТС]
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
По-моему в OpenGL маску можно вставить т.е. штрих сам OpenGL делает
Нде? В смысле, штрихом прямоугольник красит или чего?
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
могу поискать, если интересно
Если не сложно - поищите, буду признателен
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
13.08.2017, 20:53
another_reality, отрывок из red book по opengl
2.5.2 Подробно о линиях
В OpenGL вы можете рисовать линии различной толщины, а также линии, имеющие
шаблон – пунктирные, штриховые, штрих – пунктирные и так далее.
2.5.2.1 Толщина линий
void glLineWidth (GLfloat width);
Устанавливает толщину линии в пикселях, width должно быть больше 0.0 и по
умолчанию равно 1.0.
Реальная визуализация линий зависит от механизма антиалиасинга по аналогии с
точками. Без антиалиасинга значения толщины равные 1, 2 и 3 задают линии на экране
в 1, 2 и 3 пикселя толщиной. При включенном антиалиасинге для толщины допустимы
дробные значения и пиксели по границе линии обычно рисуются с меньшей
интенсивностью. Как и в случае с точками, конкретная реализация OpenGL может
ограничивать толщину несглаженной линии, максимальной толщиной сглаженной
линии, округленной до ближайшего целого. Вы можете получить диапазон
поддерживаемых значений толщины несглаженных линий посредством команды
glGetFloatv() с аргументом GL_ALIASED_LINE_WIDTH_RANGE. Чтобы получить
минимум и максимум значений толщины для сглаженных линий и величину
гранулирования, поддерживаемые вашей реализацией OpenGL, следует употребить с
той же командой аргументы GL_SMOOTH_LINE_WIDTH_RANGE и
GL_SMOOTH_LINE_WIDTH_GRANULARITY соответственно.
Замечание: Имейте в виду, что по умолчанию линии имеют толщину в 1 пиксель,
так что они кажутся толще при низком разрешении монитора и тоньше при
высоком. Для мониторов это, как правило, не проблема, но если вы используете
OpenGL для вывода изображения на другое устройство, например, плоттер
высокого разрешения, линия в 1 пиксель толщиной может быть практически
неразличима. В подобных случаях приходится вычислять значения толщины для
каждого разрешения, принимая в расчет физический размер пикселя на экране или
устройстве.
Дополнительно: При рисовании несглаженных линий следует учесть, что их толщина
измеряется вовсе не перпендикулярно самой линии. Вместо этого толщина измеряется
в направлении оси ординат при условии, что |y2-y1|<|x2-x1|(где (x1,y1) и (x2,y2) -
координаты концов отрезка) и в направлении оси абсцисс в иных случаях. Рисование
сглаженного отрезка определенной толщины полностью эквивалентно рисованию
закрашенного прямоугольника соответствующей высоты, центрированного отрезку в
один пиксель
Добавлено через 1 минуту
Чтобы задать шаблон отрезка (например, для получения пунктирных или штриховых
отрезков) следует использовать команду glLineStipple() и затем включить
шаблонирование командой glEnable().
glLineStipple(1,0x3F07);
glEnable(GL_LINE_STIPPLE);
void glLineStipple (Glint factor, GLushort pattern);
Устанавливает текущий шаблон для отрезка. Аргумент pattern – это 16-битная серия из
нулей и единиц, определяющая, как будет рисоваться отрезок. Она повторяется по
необходимости для шаблонирования всего отрезка. Единица означает, что
соответствующая точка отрезка будет нарисована на экране, ноль означает, что точка
нарисована не будет (на попиксельной основе). Шаблон применяется, начиная с
младшего бита аргумента pattern. Шаблон может быть растянут с учетом значения
фактора повторения factor. Каждый бит шаблона при наложении на отрезок
расценивается как factor битов того же значения, идущих друг за другом. Например,
если в шаблоне встречаются подряд три единицы, а затем два нуля и factor равен 3, то
шаблон будет трактоваться как содержащий 9 единиц и 6 нулей. Допустимые значения
аргумента factor ограничены диапазоном от 1 до 256. Шаблонирование должно быть
включено передачей аргумента GL_LINE_STIPPLE в функцию glEnable(). Оно
блокируется передачей того же аргумента в glDisable().
Итак, в предыдущем примере с шаблоном равным 0x3F07 (что в двоичной системе
счисления соответствует записи 0011111100000111) отрезок будет выведен на экран,
начинаясь (по порядку) с 3 нарисованных пикселей, 5 отсутствующих, 6 нарисованных
и 2 отсутствующих (если вам кажется, что мы применили шаблон задом - наперед
вспомните, что он применяется, начиная с младшего бита). Если длина нашего отрезка
на экране больше 16 пикселей, начиная с 17-го, шаблон будет применен заново и так
далее до конца отрезка. Если бы factor был равен 2, шаблон был бы растянут, и
отрезок выглядел бы следующим образом: вначале 6 нарисованных пикселей, затем 10
отсутствующих, 12 нарисованных и 4 отсутствующих. На рисунке 2-9 показаны
отрезки, нарисованные с применением различных шаблонов и факторов повторения
шаблона. Если шаблонирование заблокировано, все отрезки рисуются таким же
образом, как если бы шаблон был установлен в 0xFFFF, а фактор повторения в 1.
Обратите внимание, что шаблонирование может применяться в комбинации с линиями
различной толщины.
Рисунок 2-9. Шаблонированные отрезки
Если рисуется ломаная (с помощью GL_LINE_STRIP или GL_LINE_LOOP) то шаблон
накладывается на нее непрерывно, независимо от того, где кончается один сегмент и
начинается другой. В противовес этому для каждой индивидуальной линии (рисуемой с
помощью GL_LINES) шаблон начинается заново, даже если все команды указания
вершин вызываются внутри одного блока glBegin() – glEnd().
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
14.08.2017, 05:18
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
glLineStipple
Deprecated в 3-м OpenGL. ТС делал все отностиельно правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2017, 05:18
Помогаю со студенческими работами здесь

Выделите из строки части, заключенные между точками или точками с запятой, заполнив ими массив
Создайте строку str4 с содержимым &quot;Люблю тебя, Петра творенье; Люблю твой строгий, стройный вид; Невы державное теченье; Береговой ее...

Начертить штриховые линии между точками
Даны натуральные числа x1, y1, x2, y2. Начертить штриховые линии между точками (графически) (x1, y1) и (x2, y2) так, как показано на...

Начертить штриховые линии между точками
Помогите пожалуйста! Даны натуральные числа x1,y1,x2,y2. Начертить штриховые линии между точками (x1,y1) и (x2,y2) так, как показано на...

Доказать, что прямая не пересекает отрезка, ограниченного данными точками
Доказать, что прямая 2x-3y+6=0 не пересекает отрезка, ограниченного точками M1(-2; -3), M2(1; -2). Пожалуйста, максимально обоснуйте...

Рисование отрезка по кликам мыши
Здраствуйте. Помогите пожалуйста - что нужно писать, что бы при нажатии мышкой на Picturebox появлялась первая точка отрезка, а после того,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru