BG Development


  Reply to this topicStart new topicStart Poll

> OpenGL текст по крива
PxL
Публикувано на: 21-11-2019, 00:01
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3158
Регистриран на: 26.04.05



Значи имам задачка да наредя растеризиран текст по крива. Т.е. буквално някакви правоъгълници трбва да може да се извиват по тая крива. В момента правя следното: Смятам си съответната крива със отделните и сегменти, също и разстоянията м-у "кутийките" за растера са си сметнати. Съответно вземам най-близката точка от кривата, преди точката, която покрива разстоянието между две букви и налагам там кутийката с оставащото отстояние и завъртам буквата, по посока на сегмента между текущата и следващата точка, това си работи добре.

Гледам обаче, че в популярни векторни софтуери по някакъв друг начин го смятат, например на тази картинка, моят алгоритъм няма да може да го направи, в сучая буква е почти съвпаднала с точка от кривата с малко отстояние, но не се премества с отместване към следващат или текущият сегмент, а се ротира по някакъв ъгъл, докато този ъгъл не стане прекалено голям. В моят случай това "а" ще е обърнато перпендикулярно от 2->3 та точка, или 3->4-та в зависимост от разстоянието.

Не съм гледал готови кодове още, но си го представям, като да трябва да сложа някакво контролно отстояние, и ако разликата ми е по-малка от него, да държа позиция и само да ротирам на база точката, но почти съм убеден, че има по-лесен начин. Някакви идеи?

Това мнение е било редактирано от DarkOne на 22-11-2019, 12:26

Прикачена картинка (Кликнете на картинката, за да я увеличите!)
Прикачена картинка


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 21-11-2019, 07:49
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 8546
Регистриран на: 11.11.06



ами предлагам ти следния метод - смяташ ориентацията на буквата като претеглема сума на всички сегменти които покрива. позицията смяташ "до допир" . така както си го представям, бутайки буквата напред, в момента в който се покаже зад чупката (примерно 10%), трябва ориентацията и да стане смес 0.9 от сегмент н и 0.1 от сегмент н+1. позицията - до допир на основата в чупката (за изпъкнала чупка). така бутайки я напреде тя ще се завърти около чупката, но пак ще се движи, просто точката на допир ще я дели в пропорцията в което сме смесили нормалите
PM
Top
PxL
Публикувано на: 21-11-2019, 09:21
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3158
Регистриран на: 26.04.05



QUOTE (Дон Реба @ 21-11-2019, 08:49)
ами предлагам ти следния метод - смяташ ориентацията на буквата като претеглема сума на всички сегменти които покрива. позицията смяташ "до допир" . така както си го представям, бутайки буквата напред, в момента в който се покаже зад чупката (примерно 10%), трябва ориентацията и да стане смес 0.9 от сегмент н и 0.1 от сегмент н+1. позицията - до допир на основата в чупката (за изпъкнала чупка). така бутайки я напреде тя ще се завърти около чупката, но пак ще се движи, просто точката на допир ще я дели в пропорцията в което сме смесили нормалите

Стана така, мерси. Вземам средното от двете нормали. Снощи нещо бях забил icon_lol.gif


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
DarkOne
Публикувано на: 21-11-2019, 10:55
Quote Post


Group Icon
Име: Александър Петков
Група: Администратор
Ранг: Почетен член

Мнения: 3450
Регистриран на: 30.01.04



Аз бих го интерпретирал като претеглена сума от посочните вектори на отсечките - не че има особено значение, но нали искаш да формираш една виртуална права, която плавно преминава от съвпадаща с първата отсечка до съвпадаща с втората отсечка - няма нужда да правиш перпендикулярни вектори два пъти icon_smile.gif Пускаш правата да минава през крайната точка и по теглата можеш лесно да определиш позицията на началната и крайната точка на правоъгълника върху тази права icon_wink.gif


--------------------
The man who learns only what others know
is as ignorant as if he learns nothing.
The treasures of knowledge are the most rare,
and guarded most harshly.
-- Chronicle of the First Age
PMICQ
Top
PxL
Публикувано на: 21-11-2019, 11:59
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3158
Регистриран на: 26.04.05



QUOTE (DarkOne @ 21-11-2019, 11:55)
Аз бих го интерпретирал като претеглена сума от посочните вектори на отсечките - не че има особено значение, но нали искаш да формираш една виртуална права, която плавно преминава от съвпадаща с първата отсечка до съвпадаща с втората отсечка - няма нужда да правиш перпендикулярни вектори два пъти icon_smile.gif Пускаш правата да минава през крайната точка и по теглата можеш лесно да определиш позицията на началната и крайната точка на правоъгълника върху тази права icon_wink.gif

Съгласен съм, аз тях и без това си ги имам, за да преместя с разликата от разстоянието.


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0