このフォーラムで上がってる方法で override してみたらさっくり動いたのでメモ。
謎のincludeは無視して下さい。
AmCubeGeometry.as
# include <cpp/AmDevelop.h>
package am.graphics
{
import away3d.primitives.*;
import away3d.core.base.*;
public class AmCubeGeometry extends CubeGeometry
{
public function AmCubeGeometry(width:Number, height:Number, depth:Number, segmentsW:uint, segmentsH:uint, segmentsD:uint, tile6:Boolean = true):void {
super(width, height, depth, segmentsW, segmentsH, segmentsD, tile6);
}
override protected function buildUVs(target : SubGeometry) : void
{
var uvData : Vector.<Number>;
var i : uint, j : uint, uidx : uint; // indices
var hw : Number, hh : Number, hd : Number; // halves
var dw : Number, dh : Number, dd : Number; // deltas
var u_tile_dim : Number, v_tile_dim : Number;
var u_tile_step : Number, v_tile_step : Number;
var outer_uv : Number;
var numUvs : uint = ((segmentsW + 1) * (segmentsH + 1) +
(segmentsW + 1) * (segmentsD + 1) +
(segmentsH + 1) * (segmentsD + 1)) * 4;
if (target.UVData && numUvs == target.UVData.length)
uvData = target.UVData;
else
uvData = new Vector.<Number>(numUvs, true);
// half cube dimensions
hw = width/2;
hh = height/2;
hd = height/2;
// Segment dimensions
dw = width/segmentsW;
dh = height/segmentsH;
dd = depth/segmentsD;
if (tile6) {
u_tile_dim = u_tile_step = 1/3;
v_tile_dim = v_tile_step = 1/2;
}
else {
u_tile_dim = v_tile_dim = 1;
u_tile_step = v_tile_step = 0;
}
for (i = 0; i <= segmentsW; i++) {
outer_uv = u_tile_dim * (i/segmentsW);
for (j = 0; j <= segmentsH; j++) {
uvData[uidx++] = outer_uv;
uvData[uidx++] = 1-v_tile_dim * (j/segmentsH);
uvData[uidx++] = 1-outer_uv;
uvData[uidx++] = 1-(v_tile_step + v_tile_dim * (j/segmentsH));
}
}
for (i = 0; i <= segmentsW; i++) {
outer_uv = u_tile_step + u_tile_dim * (i/segmentsW);
for (j = 0; j <= segmentsD; j++) {
uvData[uidx++] = outer_uv;
uvData[uidx++] = 1-v_tile_dim * (j/segmentsD);
uvData[uidx++] = 1-outer_uv;
uvData[uidx++] = 1-(v_tile_step + v_tile_dim * (j/segmentsD));
}
}
for (i = 0; i <= segmentsH; i++) {
outer_uv = v_tile_step + v_tile_dim * (i/segmentsW);
for (j = 0; j <= segmentsD; j++) {
uvData[uidx++] = (u_tile_dim * ((segmentsD-j)/segmentsD));
uvData[uidx++] = 1-outer_uv;
uvData[uidx++] = 1-(u_tile_dim * ((segmentsD-j)/segmentsD));
uvData[uidx++] = v_tile_step + v_tile_dim * ((segmentsW-i)/segmentsW);
}
}
target.updateUVData(uvData);
}
}
}
/*
* Local variables:
* compile-command: "make --directory=../../ all"
* End:
*/