2009年5月14日 星期四

20090514学习

1. getDefinistionByName as Class
import flash.utils.getDefinitionByName;
var className:Class = getDefinistionByName( StringName ) as Class;
var foo:Sprite = new className();

source

2. BitmapDataUnlimited
import com.formatlos.as3.lib.display.BitmapDataUnlimited;
import com.formatlos.as3.lib.display.events.BitmapDataUnlimitedEvent;

var bdu:BitmapDataUnlimited = new BitmapDataUnlimited();
bdu.addEventListener(BitmapDataUnlimitedEvent.COMPLETE, onBmpReady);
bdu.create(5000, 5000, true);

var hugeBmp : BitmapData;

function onBmpReady(event : BitmapDataUnlimitedEvent) : void
{
hugeBmp = bdu.bitmapData;
trace("BitmapData: w=" + hugeBmp.width + " h=" + hugeBmp.height);
}

e.g. a BitmapData with 12000 x 12000 px needs more than 1GB.

3、Photoshop技巧:提高截屏图片打印的分辨率 - PS普通截屏图片到300dpi的分辨率

标签: ,

2009年5月8日 星期五

基于FLASH的免费三维字体生成工具

3dtext.in是一款基于FLASH的免费三维字体生成工具,你可以轻松生成三维的字体标题,有多种字体材质,背景和动画特效的选择。

另外,利用它提供的API可以在自己的AS3里面调用,生成自己的三维字体特效。Wonderfl ( wonderfl是一个提供在线实时测试Flash代码的网站,支持PV3D,Alternativa3D,Sandy3D等AS3三维框架,有大量AS3源码供大家学习和交流 )有个很好的基于PV3D的例子: 3Dメガネを使った立体視 3dtext.in API,具体调用方法源代码里面都有。

标签: , ,

2009年3月19日 星期四

Away3D测试


测试Away3D用了2.3.3flash9版本中的样例来测试。很喜欢这个水下的光影效果。Away3D的学习资料没有PV3D多,但是和Alternative3D比较还是好很多,可以看看Away3D核心开发人员:Fabrice Closier的博客,能学到很多东西

另外有个地方要注意的是:从Blender导出dae文件到Away3D,必须添加UV Mapping,否则Collada.load装载材质的时候会出现这样的错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.

注意dae中的路径问题。

标签: , , ,

2009年3月18日 星期三

测试Alternativa3D

去年下载过alternativa3d_5.0.3来测试,但是Alternativa3D只提供组件看不到源代码,所以暂时放弃。最近Alternativa3D多了一些教程,上手也比较容易,于是又重新开始玩玩。

可惜的是Alternativa3D被墙,无法访问,而Alternativa3D又需要注册登录才能免费下载最新版本,所以只有拿5.0.3的来做测试(最新5.5.0)。

和Papervision3D比较起来,Alternativa3D似乎不存在z-fighting的问题,建模效果不错,但是由于Alternativa3D_5.0.3的API Documentation里面没有Light的部分,无法做光线渲染部分的测试。希望可以尽快下载最新版本试试。另外也希望有空找时间玩玩away3d,似乎光线渲染做的不错。随着CS4的推出,各大3D引擎也纷纷推出自己的Flash10版本,我还没有装CS4,也对等flash10最新内嵌对3D的支持用法不甚了解,但是可以肯定的是3D性能得到了很大提高,就拿pv3d开发人员的话说:“高速三维实时渲染的数量级从400提高到了8000”。得赶紧跟上啊~~

标签: , ,

2009年2月10日 星期二

Javascript与swf对象交互的问题

在网页中通过flash来登录页面的时候,会涉及到Javascript与swf对象的交互问题。主要考虑的问题在于做到网页上的登录状况需要与swf里面的登录状况同步一致。AS里面的ExternalInterface包帮助我们解决这个问题,主要用法包括:

从Javascript发送数据到AS中的公开函数:
ExternalInterface.addCallback("JsFunc", AsFunc);

在AS中向Javascript函数传递数据。
ExternalInterface.call("JsFunc", AsData);

假设swf对象的id为zhaiduo,则可以这样来调用AS中的公开函数:
mc('zhaiduo').JsFunc(blahs...);
function mc(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}

交互过程中意外遇到一个有趣的Javascript现象:
if (navigator.appName.indexOf("Microsoft") != -1) {
document.location.href="http://www.zhaiduo.com"; //IE8用reload无效
}else{
document.location.reload(); //FF2用href无效
}

标签: ,

2009年2月3日 星期二

Cube使用ShadedMaterial材质的黑三角型问题


在PV3d里面立方体原型Cube中使用ShadedMaterial材质的时候,如果立方体所有面都使用同一shader,渲染结果的时候,每个面会出现单个黑色三角形的问题。
myShader = new PhongShader(light);
myShadedMaterial = new ShadedMaterial(myBitmapMaterial,myShader);
mlist = new MaterialsList();
mlist.addMaterial(myShadedMaterial, "all");

根据nabble上的解释:解决办法只能给每个面指定单独的Shader。经测试问题解决。

另外,要解决两平面相对垂直时,视角中出现的三角形突起,如下图:

可以修改小平面useOwnContainer属性来解决。
plane.useOwnContainer=true;

但是发现如果有多个平行平面垂直于一平面的时候,useOwnContainer会导致平行平面之间视角失真的问题,看来还得找其他办法。如图,注意深蓝色平面。


正常情况


失真情况

更新:是Z-fighting的问题,用ViewportLayer和QuadrantRenderEngine来解决。具体如下
import org.papervision3d.render.QuadrantRenderEngine;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
...
viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
renderer = new QuadrantRenderEngine(QuadrantRenderEngine.ALL_FILTERS);
...
viewport.getChildLayer(target).layerIndex = 1;
viewport.getChildLayer(floor).layerIndex = -100;

标签: , , ,

2009年1月8日 星期四

Papervision3D的正反两面材质测试


要做到Papervision3D的Plane实现正反两面材质,现在主要有两个方法:
一是利用DisplayObject3D两个Plane放到一起,贴图做到一正一反就可以实现:[wave2.swf]
p = new Plane(bitmapMaterial,829, 389,10,10);
planeGroup.addChild(p);
p2 = new Plane(bitmapMaterial2,829, 389,10,10);
p2.rotationY = 180;
planeGroup.addChild(p2);
scene.addChild(planeGroup);

波动效果利用Plane的segments分段特性,控制每个geometry.vertices来实现。

二是利用Cube,把高度设为零,上下两面做贴图:[As3dModPerlin.swf]
var materialsList:MaterialsList = new MaterialsList() ;
materialsList.addMaterial(bitmapMaterial, "top" ) ;
materialsList.addMaterial(bitmapMaterial2, "bottom" ) ;
var cube:Cube = new Cube(materialsList, 829, 389 , 1,10,10,10 ) ;
planeGroup.addChild(cube) ;
scene.addChild(planeGroup);

波动效果采用everydayflashAS3Dmod库来实现。

标签: ,

2008年12月24日 星期三

两个FLash问题

1. Flash CS3里面无法向FLex一样调用文件的问题
下面这种方式在CS3里面无效,
[Embed(source="zhaiduo.jpg")] private var zhaiduo:Class;

我们可以把文件导入库library, 通过linkage ID调用。如:linkage ID为"Zhaiduo"。
var zd:Zhaiduo=new Zhaiduo(100,100);
var myBitmap:Bitmap = new Bitmap(zd);


2. NetStream无法播放非本地FLV视频文件的问题
NetStream只允许本地bitmapData.draw。所以只有声音看不见影像。例子可以看里
Nabble上有这样一段解释:
The only way around this is to deliver your video via a custom
configured flashCom server. (Open source solutions include red5 and
haXeVideo). These flashCom servers have to send a flag with the
NetStream that allows bitmapData.draw for your domain. Regardless,
you aren't going to get this from a remote server.

标签: ,

Powered by Blogger

订阅
帖子 [Atom]