前回の第1回
第1回サンプル2 Away3D 14/
3次元空間でボールを回す
まずは,
外部ファイルを読込んで使うときには,
away.library.AssetLibrary.addEventListener(away.events.LoaderEvent.RESOURCE_COMPLETE, リスナー関数)
away.library.AssetLibrary.load(new away.net.URLRequest(URL))
それでは,
さらに,
var sphere;
var imageDiffuse = "assets/beachball_diffuse.jpg";
function initialize() {
var directionalLight = createDirectionalLight(0.25, 0xFFFFFF); // 0x00FFFF);
var AssetLibrary = away.library.AssetLibrary;
AssetLibrary.addEventListener(away.events.LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.load(new away.net.URLRequest(imageDiffuse));
}
function createSphere(radius, segmentsH, segmentsV, light) {
// var defaultTexture = away.materials.DefaultMaterialManager.getDefaultTexture();
// var material = new away.materials.TriangleMethodMaterial(defaultTexture);
var material = new away.materials.TriangleMethodMaterial();
var sphere = new away.prefabs.PrimitiveSpherePrefab(radius, segmentsH, segmentsV)
.getNewObject();
sphere.material = material;
}
つぎに,
function onResourceComplete(eventObject) {
var assets = eventObject.assets;
var material = sphere.material;
material.texture = assets[0];
view.render();
}
ところが,
function onResourceComplete(eventObject) {
var assets = eventObject.assets;
if (assets.length > 0) {
var material = sphere.material;
material.texture = assets[0];
view.render();
} else {
var AssetLibrary = away.library.AssetLibrary;
var RESOURCE_COMPLETE = away.events.LoaderEvent.RESOURCE_COMPLETE;
AssetLibrary.removeEventListener(RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.addEventListener(RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.load(new away.net.URLRequest(eventObject.url));
}
}
LoaderEvent.
コード1 3次元空間に置いた球体にテクスチャを貼る
var view;
var sphere;
var imageDiffuse = "assets/beachball_diffuse.jpg";
function initialize() {
var directionalLight = createDirectionalLight(0.25, 0xFFFFFF);
var AssetLibrary = away.library.AssetLibrary;
view = createView(240, 180, 0x0);
sphere = createSphere(300, 32, 24, directionalLight);
view.scene.addChild(sphere);
AssetLibrary.addEventListener(away.events.LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.load(new away.net.URLRequest(imageDiffuse));
view.render();
view.render();
}
function createView(width, height, backgroundColor) {
var defaultRenderer = new away.render.DefaultRenderer();
var view = new away.containers.View(defaultRenderer);
view.width = width;
view.height = height;
view.backgroundColor = backgroundColor;
return view;
}
function createSphere(radius, segmentsH, segmentsV, light) {
var material = new away.materials.TriangleMethodMaterial();
var sphere = new away.prefabs.PrimitiveSpherePrefab(radius, segmentsH, segmentsV)
.getNewObject();
sphere.material = material;
material.lightPicker = new away.materials.StaticLightPicker([light]);
return sphere;
}
function createDirectionalLight(ambient, color) {
var light = new away.entities.DirectionalLight();
light.ambient = ambient;
light.color = color;
return light;
}
function onResourceComplete(eventObject) {
var assets = eventObject.assets;
if (assets.length > 0) {
var material = sphere.material;
material.texture = assets[0];
view.render();
} else {
var AssetLibrary = away.library.AssetLibrary;
var RESOURCE_COMPLETE = away.events.LoaderEvent.RESOURCE_COMPLETE;
AssetLibrary.removeEventListener(RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.addEventListener(RESOURCE_COMPLETE, onResourceComplete);
AssetLibrary.load(new away.net.URLRequest(eventObject.url));
}
}
- ※1
- 詳しくは
「Away3D 14/ 08/ 18: LoaderEvent. RESOURCE_ COMPLETEイベントで素材ファイルが読込めない」 を参照してほしい。なお, この問題についてAway3D Forumに問合せてみたところ回答は得られていない (「On the LoaderEvent. RESOURCE_ COMPLETE event asset files are not loaded」)。