2014-10-22 80 views
0

我试图用Graphics API绘制具有变形纹理的任意多边形。围绕x,y,z轴旋转纹理并使用它绘制多边形

这里就是我想在3个步骤做:

首先,我有一个质地(如一个BitmapData)

enter image description here

其次,变换纹理 - 瓷砖它和旋转它围绕x,y或z轴。 (现在的y轴)。

enter image description here

第三,使用变换的纹理绘制的多边形。

enter image description here

我可以绕Z轴与下面的代码,将其旋转:

var gr:Graphics = sp.graphics; 
gr.clear(); 
var mat:Matrix = new Matrix(); 
mat.scale(0.5, 0.5); 
mat.rotate(angle); 
gr.beginBitmapFill(bd, mat, true, true); 
gr.moveTo(points[0].x, points[0].y); 
for (var lp1:int = 1; lp1 < points.length; lp1++) 
    gr.lineTo(points[lp1].x, points[lp1].y); 
gr.lineTo(points[0].x, points[0].y); 
gr.endFill(); 

但我不能绕x或y轴的材质,因为它需要某种投射我的猜测。

我想过绘制旋转的位图对象到一个BitmapData和使用它作为纹理:

var bmp:Bitmap = new Bitmap(bd); 
bmp.rotationY = angle; 
var transformedBd:BitmapData = new BitmapData(256, 256, true, 0); 
transformedBd.draw(bmp); 
… and call gr.beginBitmapFill() with the transformedBd … 

但有了这个代码,纹理将不被平铺。

我也看了drawTriangles()方法,但AFIK,它只让我画一个旋转的多边形,而不是旋转纹理的多边形。

如果有人对此问题有所了解,请分享。 任何帮助将不胜感激!

+1

我会建议首先创建一个填充重复位图数据的多边形。然后,您可以使用rotationX,rotationY,rotationZ转换整个多边形容器。 – Kokodoko 2014-10-22 10:23:33

+0

感谢您的建议,但这是一个平铺纹理的转换多边形。我想要一个带有变形纹理的多边形。我有一个具体的要求,用变换后的纹理在2D空间中填充和绘制多边形。 – wooohoh 2014-10-22 15:21:33

+0

除了围绕Z轴旋转之外,不能使用变换矩阵。 AFAIK无法使用容器或Away3D等3D引擎,无法在原始位图数据上创建完整的3D投影。即使使用Away3D,您也可以创建3D多边形,并在其中添加2D纹理。不同之处在于Away3D将它全部渲染成一个巨大的位图数据,而不是单独的动画片段或精灵。 – Kokodoko 2014-10-22 16:44:31

回答

0

或许你可以:

  1. 把你的2D纹理一个雪碧或其他容器
  2. 3D内变换容器,例如,通过使用

    myContainer.rotationX = 20; myContainer.rotationY = 200;

3 - 然后创建一个新的BitmapData() 4 - 你绘制整个myContainer中到BitmapData。

myBitmapData.draw(myContainer, myMatrix, myColorTransform, blendMode, myRectangle, smooth); 

5 - 最后删除原始2D纹理和myContainer。

瞧,你现在在一个位图数据里面有一个3d变换纹理。

+0

非常感谢! – wooohoh 2014-10-29 13:21:45