« 1 2
Autor Zpráva
kozusnik.jan
Profil *
no mi přijde jednodušší použít funkci scale a transfer než přepočítávat body ne? nicméně do jedné funkce to hodím. jak byste ale vyřešil to předávání načtených obrázků?
Ještě dotaz k té funkci textureMap zkusil jsem napsat něco takového:
function drawPerson() {
    var pts = [10,100,10];
    
var Img = new Image();
Img.onload = function() {
    ImgRepeatOption = "repeat";  //  values: repeat, no-repeat, repeat-x, repeat-y
var ImgFill = ctx.createPattern(Img, ImgRepeatOption);
   textureMap(ctx, ImgFill, pts) 
}
Img.src = 'images/shops/obrazek.png';
}

ale nic to nedělá. Mám to dobře? Děkuji
1Pupik1989
Profil
Ne. Pole pts má obsahovat 3 vrcholy trojúhelníku.

Například.
var pts = [
{x:-10,y:-10,z:0,u:0,v:0},
{x:10,y:-10,z:10,u:10,v:0},
{x:10,y:10,z:10,u:10,v:10}
]

Jsou to vlastně body A,B,C v trojúhelníku.

souřadnice z tam nemusí být, jelikož je to v 2d, ale já je tam mám všechny. Stejně si to časem upravíte. Nebo to pojmenujete drawTriangle a přídáte to ke kontextu canvasu, jako jsem to měl já. Dnes jsem kvůli těmto šmodrchanicím celý projekt smazal. Znovu jsem to rozvrhl a vše najednou funguje jak má. :D
kozusnik.jan
Profil *
Super, díky. Takže teď mám vykreslený 1 trojúhelník. A jak to udělat, když chci třeba vykreslit nějaký objekt, řekněme toho panáčka, jak jste kreslil vy. To musím vzít a pro každý trojúhleník udělat zvlášť obrázek a pak přes ten cyklus vykreslit spousty trojúhelníků pokaždé s jiným obrázkem?


1Pupik1989:
jakože to půjde jakkoliv, akorát prostě nevím, jak vyřešit to předání images, kde mám preloadnuté ty obrázky... to je problém. nevím jak to předat té funkci. upravil jsem to a vypadá to takhle:
preloadimages(imagesarray).done(function(images){
 drawScene(images, 0);

})

function onClick() {
if(zoomed == 0){ 
   drawScene(images, zoomed);
}

else {
   drawScene(images, zoomed);
}
}

function drawScene(images, zoomed) {  
  
if(zoomed == 0) {
.
.
.
.
}
if(zoomed == 1) {
.
.
.
.
}
}
1Pupik1989
Profil
Každý model je sestaven z trojúhelníků, nebo čtverců. To se pozná podle nadefinovaných bodů v tzv. face-listu.

Já parsuje soubory *.obj. Tam jsou definované vrcholy, texturové vrcholy a zmiňované tváře.

Všechny vrcholy jsou v rozmezí 0-1 na x,y i z. U texturových bodů vynásobíte x šířkou a y výškou. Většinou je celá textura v jednom obrázku.

Schválně vyhledejte na googlu v obrázcích "cube texture map" nebo jen "cube texture".
kozusnik.jan
Profil *
aha. zkusím ;) zatím to ale přesunu na druhou kolej, doufám ale, že jen na chvilku... prvni potřebuji vyřešit to s tím vykreslováním.... štve mě to. možnost by byla pokaždé, když budu vykreslovat při přiblížení nebo oddálení znova přednačítat obrázky, ale nevím, jestli to nebude potom problém, když bude těch obrázků třeba jednou tolik a s větší velikostí - ať uživatel nečeká na přiblížení třeba 5 sekund. nějak to musí jít vyřešit ne? štve mě to čím dál více
1Pupik1989
Profil
Do preloaderu si dejte funkci třeba init a všechno řešte v ní.

Nebo druhá možnost je save a restore plátna. Navíc pokud budete chtít nějaký cyklus, tak stejně celý zdrojový kód nejspíš smažete. Kdyby vám to běželo ve smyčce, tak by se to mohlo měnit v běhu.

Nebo jak jsem psal, násobit body. Máte tam i matice, těmi by to také šlo.
kozusnik.jan
Profil *
s tím preloadem mě nenapadlo. děkuji. zkusím. ten save a restore taky nevypadá špatně. no uvidím ještě.
jo, pomocí těch matic to nevypadá špatně, ale už to budu mít vesměs a předělat by trvalo relativně dlouho asi. to pak časem předělám. nicméně to určitě použiji už teď pro nějaké 3D objekty jako květinu....vypadá to fakt dobře. teď se dívám na ty .obj soubory a vytváření toho mapování. jaký k tomu používáte program?


no tak s tím, že bych to vložil do preloadu passé. když to tam dám, tak to zase nefunguje ta funkce správně a je opět problém s obrázky, jako předtím
1Pupik1989
Profil
Obj soubory většinou stahuji. Parsuji to v php do json objektu a ajaxem načítám.

K těm maticím. Ve 3d respektive vykreslování 3d ve 2d contextu to bude nezbytnost. Je to přeci jen výpočetně méně náročné.
kozusnik.jan
Profil *
jj, asi to bude nejlepší řešení. jdu si s tím hrát.
ten zoom jsem vyřešil, že pokaždé, když vykresluji scénu - přiblížení resp. oddálení, tak dělám preloading :D zatím to jede v pohodě. snad to tak bude i později.
1Pupik1989
Profil
A přitom by stačilo jen měnit matici. Stejně bude potřeba ve 3d jí násobit. I ve 2d je to lepší použít matice.
kozusnik.jan
Profil *
matice použít mě nenapadlo. jsem zase o něco chytřejší. časem to komplet předělám do 3D a těch matic.
Jak byste řešil pohyb panáčka po ploše? Napadá mě uložit si vykreslený canvas. Poté na něj vykreslit panáčka. Po kliknutí na šipku se canvas překreslí tím uloženým a panáček se vykreslí na nové místo. Co na to říkáte?
1Pupik1989
Profil
Já na tzv. first person mám dva canvasy překrývající se. Jeden je postava a druhý na zbytek objektů. Pohled třetí osoby je stejný styl.

Mrkněte na msdn a third person camera. Pokud ale nebude herní smyčka, tak to nebude vypadat hezky. Bude to prostě škubané, alias teď hned je to otočené.
kozusnik.jan
Profil *
jj, předtím to bylo takové škubané jak říkáte... takže asi i teď... ok, zkouknu :) děkuju
1Pupik1989
Profil
Většinou dávám settimeout na 1ms. nekonečný cyklus totiž nejde. pokud budete chtít, tak vám pošlu přes skype ukázku zítra.
kozusnik.jan
Profil *
no já to taky tak řešil předtím, měl jsem to 100ms. Nebude ale problém s těmi preload obrázky? Nemusel by že? Vlastně můžu po preload zavolat nějakou funkci a až v té volat vykreslení s nějakým setInterval... Kdybyste poslal nějaké inspirační materiály... tak budu rád ;) skype: kozusnik.jan
1Pupik1989
Profil
Ano, vše až po preloaderu zavolat funkci. Na konec té funkce se dá settimeout, který zavolá znovu tu funkci.

Ukázku zatím nemám, celé jsem to smazal, jelikož jsem na to šel od lesa. Respektive mám, ale dávno to vypadá jinak.

Taky bych potřeboval preloader obrázků bez callbacku. Pak se totiž budou modely načítat v průběhu.
« 1 2

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0