Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Master
Založen: 28. 08. 2007 Příspěvky: 35
|
Zaslal: 11. listopad 2007, 09:23:23 Předmět: Výběr vertexu nebo line? |
|
|
Zdarec.Mam problem.Vykresluju si body nebo linky na obrazovku a potreboval bych je jakoby uchytit a presouvat.Bohuzel ale nevim,jak se uchopuji vertexy a line.Na vertexy bych jeste vedel(kontroloval bych pozici mysi s nejakym radiusem),ale na line nemam tucha,jak bych ho mohl vybrat.
Sou na to nejake algoritmy nebo nejaky popis jak to udelat?
Diky moc za radu. |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 11. listopad 2007, 09:45:04 Předmět: |
|
|
na priamku sa ide tak isto ako na bod. tiez zistis ci nie je pozicia dost blizko k linke. tento vzorecek ti vyrata vzdialenost bodu od plochy v 3D x y z su suradnice bodu nx ny a nz su zlozky normaloveho vektoru plochy teda vektoru ktory je kolmy na tu plochu. ak to chces v 2D tak staci vynechat tie tretie suradnice. (x*nx+y*ny)/sqrt(nx^2+ny^2) ak vyde kladne cislo je bod v polopriestore kam ukazuje normalovy vektor ak zaporne tak v opacnom. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Master
Založen: 28. 08. 2007 Příspěvky: 35
|
Zaslal: 11. listopad 2007, 16:02:38 Předmět: |
|
|
No mam v tom ted trochu zmatek.Normalove vektory k jake plose?Ja mam na mysli neco jako picking(asi).Proste moznost uchopit mysi bod a pretahnout ho(jako v maxku).Jestli,tak by pomohl i maly example,kde bych videl kod a nejak si to uz prebral. |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 11. listopad 2007, 16:56:19 Předmět: |
|
|
Pre tvoju aplikaciu bude stacit OpenGL picking (to aj hladaj - glSelect()).
Kazdej lajne/bodu das unikatne "meno" (tj cislo) a potom uz len budes testovat co vsecko je pod kurzorom ked ho stlacis a budes tahat...
A nefungujes pod OpenGL, tak to co nou napisal, myslel sice dobre, ale nebude to ok
Ty budes mat tie body/ciary v 2D (budes pocitat s window coordinates) no a vzorec, ako zistit, ktora ciara je najblizsie k nejakemu pixelu (kurzoru) je taka ista, akurat Z suradnice budu nula... Je to vzorec pre vzdialenost bodu od roviny v 3D (v nasom pripade od priamky v 2D). _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Master
Založen: 28. 08. 2007 Příspěvky: 35
|
Zaslal: 11. listopad 2007, 17:41:42 Předmět: |
|
|
takze ono se to pocitalo k plose jako ke kurzoru?Ok,zkusim to s tim glSelect.
Nemate primo nejaky zdrojak po ruce,na kterem bych to pekne okoukal  |
|
Návrat nahoru |
|
 |
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 11. listopad 2007, 19:44:31 Předmět: |
|
|
Stačilo by promítnout úsečku na viewport a testovat ve 2D. Je to jednoduché a univerzálnější než to s glSelect... |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 11. listopad 2007, 19:54:22 Předmět: |
|
|
Ano, akurat glSelect to robi (aspon by mal ) hardwarovo
Inak nam prosim, Icek, vysvetli, ako konkretne to teda inak myslis, ako to co som napisal ja. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Master
Založen: 28. 08. 2007 Příspěvky: 35
|
Zaslal: 11. listopad 2007, 20:00:11 Předmět: |
|
|
No popisu zde muj konkretni problem.Mam za ukol udelat bezierovy plochy pomoci vlastni vypoctu.A to tak,ze si zadam vlastni body nejake krivky,to vypocita toho beziera a pak tu krivku oznacim a dam ji jakoby extrudovat.Tudiz ji vlastne okopiruju.
Jde mi taky o to,ze u beziera se propocitava vice casti,tak jak rozpoznat celou tu line a ne jenom tu cast ,ktera se vypocitala.
Popripade by icek fakt mohl vysvetlit,jak to presne mysli. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. listopad 2007, 20:23:58 Předmět: |
|
|
pcmaster napsal: |
Ano, akurat glSelect to robi (aspon by mal ) hardwarovo  |
Nikoliv, selection buffer se počítá softwarově. Je to jedna z těch zastaralých funkcí v GL, které se vymyslely před 13 lety a v další verzi GL to už nebude. Je to moc pomalý - nepoužíval bych to. Aby to bylo hardwarově akcelerované, muselo by to být na způsob queries (tzn. výsledek bys dostal asi za N framů, kde N je počet gpu). Řešení pomocí analytické geometrie je vždy upřednostňovaný způsob. _________________ AMD Open Source Graphics Driver Developer
Naposledy upravil Marek dne 11. listopad 2007, 20:27:40, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 11. listopad 2007, 20:26:06 Předmět: |
|
|
Promítnutí úsečky na viewport se dá udělat buď pomocí gluProject, nebo "ručním" násobením matic.
2DPos = 3DPos * (ModelView * Projection);
2DPos /= 2DPos.w;
2DPos *= ViewPortWidth;
2DPos *= ViewPortHeight;
Psal jsem to z placu, takze brát s rezervou.
Pak prostě jen zjistit vzdálenost bodu od té úsečky, a pokud je menší než nějaké zvolené minimum, tak je kurzor na úsečce. |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 11. listopad 2007, 20:31:53 Předmět: |
|
|
Vsak ale to ano, Icek, to je jasne Vsak to som napisal - musis brat suradnice v window-space
Ale dalej plati to co som napisal, ty si premietnes koncove body do window-space ale aby si zistil, ci je dany bod X k usecke AB blizsie ako k BC, musis otestovat vzdialenost, co je vzorec, ktory napisal nou.
Eo> hej, ja viem, ze dnes to uz HW nevie, ale nejako som v kutiku pcmastra dufal, ze to kedysi HW vedel  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 11. listopad 2007, 21:07:48 Předmět: |
|
|
PCMASTER > čoveče asi jsem si špatně přečetl co jsi napsal.... |
|
Návrat nahoru |
|
 |
Master
Založen: 28. 08. 2007 Příspěvky: 35
|
Zaslal: 11. listopad 2007, 21:15:40 Předmět: |
|
|
dikes,zkusim si to nejak prebrat. |
|
Návrat nahoru |
|
 |
|