Autor | Zpráva | ||
---|---|---|---|
1Pupik1989 Profil |
#1 · Zasláno: 26. 11. 2012, 21:25:56 · Upravil/a: Moderátor (editace znemožněna) 30. 11. 2012, 00:01:10
Zdravím, už třetí den řeším triangulaci čtyřúhelníku. Nejde mi do hlavy ten výpočet úhlů a následné zkosení.
Pro představu to myslím takto: Toho chci přesně dosáhnout. Jde o to, že pokud má obrázek všechny vrcholy třeba na x:-100, tak to prostě nerozdělím. Proto mě logicky napadlo počítat to až po aplikován perspektivy. Nebo jde nějakým způsobem vykreslit síť u ve 3D? Jako vždy potřebuji jen nakopnout. Děkuji všem za nápady. |
||
peta Profil |
má obrázek všechny vrcholy třeba na x:-100
delka = odm (a*a + b*b + c*c) http://www.karlin.mff.cuni.cz/katedry/kdm/diplomky/jan_koncel/rovina.php?kapitola=vzdalenost http://www.karlin.mff.cuni.cz/katedry/kdm/diplomky/jan_koncel/prostor.php?kapitola=vzdalenost Se muzes podivat, jak to resi tady http://blog.nihilogic.dk/2008/03/javascriptcanvas-3d-renderer-now-with.html http://www.nihilogic.dk/labs/canvas3dtexture_0.2/ Tady maji dokonce podobnou plachtu. Nevim ale jestli to mrizkovali scriptem... http://gyu.que.jp/jscloth/ |
||
juriad Profil |
#3 · Zasláno: 27. 11. 2012, 10:04:27
Nedávno jsi petovi radil s jeho otočením ve 3D, není toto snad stejná úloha?
* - jen nad body A, B, C, D budeš mít body A, B, C, D - vrcholy čtyřúhelníku všechny body, které se ve čtyřúhleníku vyskytují vypočítáš: pseudokód (počítání s vektory JS neumí) var maxI = 4; // vodorovne var maxJ = 4; // svisle for(var i = 0; i<=maxI; i++) { for(var j =0; j<=maxJ; j++) { var v1 = A+(i/maxI)*(B-A); // na usečce AB var v2 = D+(i/maxI)*(C-D); // na úsečce DC var v = (j/maxJ)*v1+((maxJ-j)/maxJ)*v2; // vnitřní bod poleBodu[i][j] = v; // pokud je i>0, tak propoj s bodem vlevo - poleBodu[i-1][j] // pokud je j>0, tak propoj s bodem dole - poleBodu[i][j-1] // pokud je i>0 && j>0, pak propoj s bodem sikmo dolu vlevo - poleBodu[i-1][j-1] usecky.push([v, druhyBodUsecky]); } } ** - nad všemi body v poli usecky vykreslíš všechny úsečky v místě *, nebo ** projedeš maticovou transformaci; jelikož je lineární, nezáleží na tom, jestli budeš počítat síť ve 2D nebo 3D určitě se vůbec nechceš zabývat výpočtem úhlů, stačí ti přece znát koncové body úsečky |
||
1Pupik1989 Profil |
Otočit to umím, na to jsem si udělal speciálně objekt pro matice. Jde o to, že třeba čtverec nebo obdélník umím rozdělit jen podle X a Y Už ale neumím podle Z. Bohužel je to asi jediná možnost, jak obrázek transformovat libovolně v prostoru.
Já vlastně vytvořím trojúhelník a přiřadím mu souřadnice v textuře. Takže jeden bod má proměnné x, y, z, u a v a po transformaci jen x,y,u,v. Bohužel jsem na tom s myšlením tak blbě, že ani ten příklad nechápu. Na ty stránky mrknu, děkuji. |
||
peta Profil |
#5 · Zasláno: 27. 11. 2012, 15:03:34
http://gyu.que.jp/jscloth/
Tohle je nahodou pekna hracka. Kliknutim na tu vlajku se to rozvlni :) Ale nevim, zda to resi tvuj problem nebo to tam maji napevno definovane, kde daji mrizku. |
||
1Pupik1989 Profil |
#6 · Zasláno: 27. 11. 2012, 22:09:50
Už se v tom ztrácím, jsem z toho tupý ja poleno. Asi to budu muset vymyslet úplně jinak.
|
||
juriad Profil |
#7 · Zasláno: 27. 11. 2012, 22:40:43
Asi nechápu o co se snažíš. Máš čtyři body v rovině, které reprezentují čtyřúhelník a ty na něj chceš namapovat texturu; k tomu potřebuješ provést triangulaci popsanou obrázkem nahoře, poté chceš výsledný čtyřúhelník vykreslil ve 3D.
Myslel jsem, že jen nevíš jak vypočítat vnitřní body čtyřúhelníku a úsečky jednotlivých trojúhelníčků. To jsem ve svém příspěvku snad popsal. Napiš, co už máš a čeho se snažíš dosáhnout. |
||
1Pupik1989 Profil |
#8 · Zasláno: 27. 11. 2012, 23:53:56
Mám krychly, mám funkci na počítání a násobení matic 4x4. Mám funkci na výpočet perspektivy z matice a vzdálenosti. Bohužel mi ale docvaklo, že to čtyřůhelník vždycky být nemusí. Mám dokonce napsanou i delónovu triangulaci. Chtěl jsem si jen ulehčit práci s definováním vnitřních bodů.
Jde o to, že už ani ten příklad nepochopím. |
||
_es Profil |
#9 · Zasláno: 28. 11. 2012, 01:58:36
1Pupik1989:
Niečo podobné sa riešilo v Canvas - Transformace obrázku ve třech osách. |
||
1Pupik1989 Profil |
Já vím, ale co si pamatuji, tak se vydedukovalo, že to nejde. Jenže ono to jde. Tenkrát nikdo o triangulaci nepsal a já se zaměřil na jiné zobrazení. Po dlouhé době jsem se ale vrátil k původnímu plánu a jsem rozhodnut to tentokrát pokořit.
//edit: tak teď mi teprve došlo, že si o tom psal. I transformaci mezi body mám. Já teď potřebuji jen vyplnit obrazec trojúhelníky kvůli jemnosti. |
||
1Pupik1989 Profil |
#11 · Zasláno: 29. 11. 2012, 19:18:18
juriad:
Děkuji, už mi docvaklo co si tím příkladem zamýšlel. Nakonec se zadařilo. |
||
Časová prodleva: 5 dní
|
|||
1Pupik1989 Profil |
#12 · Zasláno: 4. 12. 2012, 10:48:41
Ještě mám jeden dotaz. Řešil někdo perspektivu v matici 4x4? Nemá někdo doporučení na nějakou rozumnou stránku?
|
||
1Pupik1989 Profil |
#13 · Zasláno: 5. 12. 2012, 12:37:24
|
||
juriad Profil |
#14 · Zasláno: 5. 12. 2012, 13:52:39
1Pupik1989:
Gratuluji. Docela mi to připomíná naši úlohu na grafiku. Jen pro inspiraci, pokud bys chtěl generovat terén. |
||
1Pupik1989 Profil |
#15 · Zasláno: 5. 12. 2012, 14:08:45
Jo, generovat terén bude potřeba, děkuji. Zatím mám jen pevně definované body a trojúhelníky pro test. Teď akorát vyměním trojúhelníky za delaunovu triangulaci ve 3d. Při počátečním generování to ušetří v kódu místo.
Ještě kamera mě zlobí. Její pozici nastavit umím, ale zorné pole už ne. Nemá s tím někdo zkušenost? |
||
Časová prodleva: 4 dny
|
|||
1Pupik1989 Profil |
#16 · Zasláno: 9. 12. 2012, 11:41:32
Opravdu nikdo neví? Četl jsem nějaké návody i na opengl, jenže marně. Mají definované nějaké vektory up, right a out, jenže jsem za boja nepřišel na to, kde je vzali. Dokonce jsem přepsal celou třídu Vector3, abych si to zjednodušil a pořád nic. Neleze mi to do hlavy.
|
||
juriad Profil |
#17 · Zasláno: 9. 12. 2012, 12:44:57
můžu ti poslat svůj program v C#, který používá OpenGL; je to řešení zmíněné domácí úlohy 039terrain
možná by ti stačilo si jen projít repozitory s úlohami (potřebuješ k tomu svn-klienta) svn checkout svn://cgg.mff.cuni.cz/grcis/trunk/ vektor out nejspíš směřuje ve směru pohledu kamery vektory up a right je kolmé na out, udávají pozici (jak je natočená) kamery vzhledem k ose dané vektorem out vektory up a right jsou navzájem kolmé pro úplnou informaci o kameře je jeden z nich (out, up, right) redundantní: je vektorovým součinem ostatních kus relevantního kódu: /// <summary> /// Camera setup, called for every frame prior to any rendering. /// </summary> private void SetCamera () { Vector3 cameraPosition = new Vector3( 0.0f, 0, (float)upDownZoom.Value ); Matrix4 rotateX = Matrix4.CreateRotationX( (float)-elevationAngle ); Matrix4 rotateY = Matrix4.CreateRotationY( (float)azimuthAngle ); cameraPosition = Vector3.Transform( cameraPosition, rotateX ); cameraPosition = Vector3.Transform( cameraPosition, rotateY ); GL.MatrixMode( MatrixMode.Modelview ); Matrix4 lookAt = Matrix4.LookAt( cameraPosition, Vector3.Zero, up ); GL.LoadMatrix( ref lookAt ); } |
||
1Pupik1989 Profil |
#18 · Zasláno: 10. 12. 2012, 11:32:09
No už jsem přišel na to, že up, right a out jsoum první 3 řádky v matici. Což bylo celkem podstatné. Kameře jsem vytvořil matici 4x4 s rotacemi a posunutím. Teď musím zjistit co dál. Vlastně ta matice je hodně podobná té v knihovně sylvester.
Mrknu na ten repozitář, třeba budu chytřejší, díky. |
||
Časová prodleva: 11 let
|
0