Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»SOS emlékeztető animáció programozás
»C# programozói főállás - WebCam Laboratory
»Projektmunkát keresek Delphi , PHP, JS, AJAX
»Delphi fejlesztőt keresek
»Programok, weboldalak, vizsgamunkák készítése!
» több téma
Tudástár
URL átírás - CakePHP
?Menü
?Kéretlen felhasználó letiltása
?Összesítés egy másik tábla adatai alapján
Mindig null értéket ad vissza, miért?
PHPMailer SMTP kapcsolódási hiba (sajna megint)
Android - 2 objektum nem frissít egyszerre
SQL Query összehozása
C# : WSDL file SOAP hogyan?
Képernyő felbontás vagy méretarány megállapítása
*SSL socket kliens szerver biztonsagos?
?MySQL group by lekérdezés optimalizálás
Összetett MySQL lekérdezés EGY táblából
[Oracle] Csak egyetlen adatbázis létezik?
?Kis és nagy betűk ne különbözzenek
» több téma
Társalgó
»Mit is tanuljak először Java vs C#?
»Bevezetés a PHP 5 programozásába könyv
»Elveszve a C#-ban - avagy hova tovább?
»Eladó Asus A2500H laptop használtan
»Rails hoszting szolgáltatót keresek
»Ingyenes webáruház, amihez könnyű plugin-kat írni
»Adás feliratozó program
»PHP Melody
»Letölthető az új Rad Studio XE és Delphi XE
»Linq to SQL VS Entity framework .NET
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Papervision3d Children meghatározása hibás

»

Papervision3d Children meghatározása hibás

nyitotta: stY, idő: 2010.07.28., moderátor: moderator
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Web-programozás » Flash

Sorrend:
Időzóna:
Blokkméret:
Sziasztok!

Papervision3d 1.5.1 komponenst használok. Letölthető itt->Letöltés

Csináltam egy egyszerű példát az egyszerűség kedvéért amiben demonstrálom, hogy mi is a problémám.

Itt a tesztverzió róla ->Példaprogram futási időben

A program kódja:
Van egy "scene3d" nevő Collada scene a stage-n.

import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.components.as3.flash9.PV3DColladaScene;

import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.scenes.InteractiveScene3D;
import flash.display.MovieClip;


import GlobalValtozok2;

stop();

scene3d.addEventListener(PV3DColladaScene.SCENE_COMPLETE, init);
var group:DisplayObject3D = new DisplayObject3D("group");

scene3d.addEventListener(PV3DColladaScene.SCENE_LOAD_PROGRESS, handleProgress);
scene3d.addEventListener(PV3DColladaScene.SCENE_LOAD_ERROR, handleLoadError);


function init(...rest):void
{


group.addChild(scene3d.collada);
scene3d.scene.addChild(group);
scene3d.scene.removeChild(scene3d.collada);
group.z=-4900;    //A model megfelelő távolságra tétele


stage.addEventListener(Event.ENTER_FRAME, handleFrames);



kijelez.text=kijelez.text+ " "+scene3d.collada.childrenList();   //Kiíratom a Gyerek listát

var my3DObject:DisplayObject3D = scene3d.collada.getChildByName("Model");  //A Model nevű gyerekhez event hozzáadás

my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleObjectClick);
my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver);
my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut);

}


//Forgatás
function handleFrames(e:Event):void
{
group.yaw(10);
}

// COLLADA Scene event handlers ===================================

function handleProgress(e:FileLoadEvent):void
{
trace("Betöltés",Math.floor(e.bytesLoaded/e.bytesTotal)*100);
}

function handleLoadError(e:FileLoadEvent):void
{
trace("Collada load error", e.file, e.message);
}



 
function handleObjectOut(e:InteractiveScene3DEvent):void
{
trace("out");
}

function handleObjectOver(e:InteractiveScene3DEvent):void
{
trace("over");
}

function handleObjectClick(e:InteractiveScene3DEvent):void
{
trace("click");
}

A problémám, hogy miont látható és a futási időben a példán is sárgával kiírattam a scene3d.collada gyermekeit. Utána a scene3d.collada.getChildByName("Model"); utasítással és utána pár soron át próbálok eventet adni a Model nevű gyermekhez, mivel gondoom ez lenne a borosüveg. Például hogy fölé viszem az egeret stb... Csakhogy nem történik semmi... Külföldön is utána néztem példa programokban , pedig ezt így kell. Ki is írja hogy ott a Model nevű gyermek , mégsem adja hozzá az eventeket... :/ ötlet?

Forrás file esetleg itt letölthető : Forrás file ZIP

Köszönöm előre is!

Üdv.
Így ránézésre teljesen jó a kód.
Viszont, amit hozzácsatolsz Material objektumot az üvegedhez, annak kell lennie egy interactive tulajdonságának, és azt állítsd true-ra.
Utána már működni fognak az eseménykezelőid.

Üdv. Laci
Hello, név szerint melyikre gondolsz? Nem tudom most mire gondolsz és hol lehetne állítani.

Mert így próbáltam - bár nem tudom jónak e:ú


for each(var mat:MaterialObject3D in scene3d.collada.materials.materialsByName)
    {
        mat.interactive = true;
    }

De ehhez be kell importálni a import org.papervision3d.core.proto.MaterialObject3D; de ezt nem lehet a komponensnél...
"nem" fog segíteni, de:

én is próbáltam utánanézni, szerintem is olyasmi lehet a gond, amit tlaci2006 írt, hogy az "InteractiveScene3DEvent"-hez az adott material-(oka)t interaktívvá kell tenni, én próbáltam a komponens példányban a "Mat" alatt "felülírni a collada file-ban definiált anyagot, de nekem nem sikerült, illetve, ha kiírattam a my3DObject (a Model) tulajdonságait, illetve lekérdeztem a materialList-et nekem mindig null jött vissza... én nem is értem, hogy...

esetleg, ha nem (ezt) a komponenst használnád, hanem "csak" szkript szinten (igaz, hogy így nem látod a szerkesztőben, de) kezelnéd?

nekem CS3-alatt azzal is gondom volt, hogy túl nagy (pixelméretben) a texturához való jpg, szerkesztés közben is sokszor fagyott (legális CS3), ezért kisebbre vettem...

bocs, hogy belepofáztam, de sokszor jól jön, ha az ember tudja "nincs egyedül",
Hát, ha végképp nem lesz megoldás, áttérek a script verzióra... De olyan nincs, hogy ne legyen megoldás :)
Megcsináltam scriptből, de az obj1.materials null-t ad vissza, pedig szükségem lenne rá, hogy kiírassam , mivel az interactivva tételhez kell a neve . (getMaterialByName)

import org.papervision3d.objects.*;
import org.papervision3d.objects.parsers.*;
import org.papervision3d.view.*;

import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.events.FileLoadEvent;


import org.papervision3d.cameras.CameraType;

var view: BasicView = new BasicView(320, 240,false,false,"Free");


scene3d.addChild(view);   //Hozzáadás a movicelcliphez
var obj1: Collada = new Collada("bor2.dae");
//obj1.x = 1000;
obj1.z =-2900;
obj1.scale = 0.342;
view.scene.addChild(obj1);

obj1.addEventListener(FileLoadEvent.LOAD_COMPLETE, modelLoaded);

view.cameraAsCamera3D.z=-8389.61038961039;
view.cameraAsCamera3D.focus=1974.6753246753246;
view.cameraAsCamera3D.zoom = 0.41;


function enterFrame(aEvent: Event): void {
  obj1.yaw(5);

  view.singleRender();
}

function modelLoaded(e:FileLoadEvent):void
{
trace("Materialok kiiratasa: " + obj1.materials);
}

addEventListener(Event.ENTER_FRAME, enterFrame);

//obj1.getMaterialByName("texture0_jpg").interactive = true;


//obj1.getChildByName("Model", true).addEventListener
//(InteractiveScene3DEvent.OBJECT_CLICK, katt);



function katt(e:InteractiveScene3DEvent):void
{
trace("click");
}

obj1.collada.materials vagy obj1.scene.materials?
Én Papervision 2.0-át használok, ott kicsit megint másabbak a történések...
Ezt Papervision3D_2.1.932-ben írtam .... És neked van papervision 2.0-ban működő eseménykezelőd? Megosztanád esetleg? Mert ez így nem működik ahogy leírtad.

Esetleg az én kódomat átültetve papervision2.0-ba. Bár nem hiszem , hogy olyan nagy különbség lenne.
Mondjuk én még Collada-val nem dolgoztam kifejezetten.
De amint lesz időm, hamarosan utánanézek megígérem.
szerintem:

1) a view-dat rossz paraméterrel hoztad létre, a BasicView() konstruktorának a 3. paramétere felel az "interaktivitás" lehetőségéért, azaz
var view: BasicView = new BasicView(320, 240, false, true, "Free");

2) megnéztem a Collada osztály definíciójánál: a getMaterialsList()-tel tudod a materialokat lekérdezni, azaz
trace("Materialok kiiratasa: " + obj1.getMaterialsList());

a múltkor közzétett bor2.dae file-odat használva ez alapján "material0-effect_1" a materiálod neve, azaz ("bedrózozva")
obj1.getMaterialByName("material0-effect_1").interactive = true;

3) ellenőrizve (rekurzívan bejárva) a betöltött file-odat szerintem rossz objektumra kötöd az eseménykezelőt, nem a "Model"-hez kell kötni, hanem a "mesh1"-hez,

ha jól látom a dae-t, akkor ez ("mesh1") csak a geometria benne, mintha a "Model"-ed egy group/dummy object/null (nem tudom, hogy az általad használt 3dsMax-ban mi a terminológia rá) lenne és ennek a gyereke lenne a "mesh1"?

azaz elképzelhető, ha pld. a palackot úgy modelleznéd ki, hogy maga a palack csak egy (üres) group, aminek van két gyereke az üveg teste és a dugó, akkor sajnos mind a kettőre meg kell adnod az eseménykezelőt, nem elég a groupra (sőt arra felesleges(?) is, mert nincs geometriája), azaz egy komplex modellnél, ha azt szeretnéd, hogy minden "alkatrésze" reagáljon, akkor pld. rekurzívan bejárva az összes geometriára egyenként meg kell adnod az eseménykezelőt, ebben nem vagyok biztos, csak gyanítom, sajnos nincs a gépemen semmilyen 3d-s program, még Blender sem, szóval kipróbálni nem tudom,

továbbá szerintem az eseménykezelőt csak akkor definiálhatod, ha már betöltődött/létrejött a modelled, azaz a "modelLoaded()" törzsében
obj1.getChildByName("mesh1", true).addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, katt);

ezeket a módosításokat elvégezve nálam működik (kipróbáltam az általad használt Papervision3D_2.1.932-vel)
Szia, megírtam az álltalad javasolt módszert, és működik, a megoldás:


import org.papervision3d.objects.*;
import org.papervision3d.objects.parsers.*;
import org.papervision3d.view.*;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.cameras.CameraType;


var view: BasicView = new BasicView(320, 240,false,true,"Free");


var obj1: Collada = new Collada("bor2.dae");
//obj1.x = 1000;
obj1.z =-2900;
obj1.scale = 0.342;
view.scene.addChild(obj1);
scene3d.addChild(view);   //scene3d egy movieclip


view.cameraAsCamera3D.z=-8389.61038961039;
view.cameraAsCamera3D.focus=1974.6753246753246;
view.cameraAsCamera3D.zoom = 0.41;

obj1.addEventListener(FileLoadEvent.LOAD_COMPLETE, modelLoaded)
stage.addEventListener(Event.ENTER_FRAME, enterFrame);


function enterFrame(aEvent: Event): void {
  obj1.yaw(5);
  view.singleRender();
}

function modelLoaded(e:FileLoadEvent):void
{
trace("Materialok kiiratasa: " + obj1.getMaterialsList());


obj1.getMaterialByName("material0-effect_1").interactive = true;

obj1.getChildByName("mesh1", true).addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, katt);


}



function katt(e:InteractiveScene3DEvent):void
{
trace("click");
}





Ezen soroknak:
obj1.getMaterialByName("material0-effect_1").interactive = true;

obj1.getChildByName("mesh1", true).addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, katt); a model loaded-be kellett kerülni :) Köszi a segítséget mindenkinek, de neked jár a pont, tLacinak is köszönöm.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu2.280
»Interlock660
»Frostech0570
»Pitta_530
»mezofi460
»Riha340
»Varsi310
»netangel120
»n0rb1120
»szbzs.2110
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Kelemzol
»Balucinho
» ugrás a wikire
A nap kifejezései
ȃrtelmezett nyelv
»Szkriptnyelv
»Turbo Pascal
» ugrás a wikire
jobline.hu
»Operations szakértő
»MSSQL adminisztrátor
»SAP BC specialista
»Szoftvertesztelő
»Oracle DBA
» még több állás
Hírek
»Webjáték-fejlesztő versenyt indít a Mozilla
»Megnyitja a Wave forráskódját a Google
»Már SVG fájlokat is indexel a Google
» több hír
PC Fórum hírek
»Tíz kritikus biztonsági hibát javít az új Firefox
»A Pirate Bay is áldozatául esett a tegnapi torrent-razziáknak
»Kiszivárgott videón az Internet Explorer 9
»Fájlcsere-razziák zajlanak ma Európaszerte - és Magyarországon is
»Darabjaira hulló logóval ünnepli 12. születésnapját a Google
»USB 3.0-s Intel alaplapok már idén?
»Rejtélyes Internet Explorer-sebezhetőséget vizsgál a Microsoft
»Legális fájlcsere havi párszáz forintért?
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen