有人可以解释一下w.r.t.坐标

时间:2014-06-18 19:41:34

标签: actionscript-3 coordinates

有人可以解释一下w.r.t.坐标?或者至少指引我到一个解释它们是什么的地方?我正在寻找两天左右的时间,我发现的所有内容都是关于它们如何使用的教程,但不是它们实际上是什么,甚至是什么代表的。

这些教程假设我已经知道它们有什么压力,因为我从未听说过它们。

我正在尝试使用像素粒子做一些参数曲面,我知道这些在移动粒子时很有用。

这是相关函数,它们用作u,v和w,其中p是单个粒子,也包含未被修改的xyz值。

function onEnter(evt:Event):void {

dphi = 0.015*Math.cos(getTimer()*0.000132);
dtheta = 0.017*Math.cos(getTimer()*0.000244);

phi = (phi + dphi) % pi2;
theta = (theta + dtheta) % pi2;

cost = Math.cos(theta);
sint = Math.sin(theta);
cosp = Math.cos(phi);
sinp = Math.sin(phi);

//We calculate some of the rotation matrix entries here for increased efficiency:
M11 = cost*sinp;
M12 = sint*sinp;
M31 = -cost*cosp;
M32 = -sint*cosp;

p = firstParticle;

//////// redrawing ////////
displayBitmapData.lock();

//apply filters pre-update
displayBitmapData.colorTransform(displayBitmapData.rect,darken);
displayBitmapData.applyFilter(displayBitmapData, displayBitmapData.rect, origin, blur);

p = firstParticle;
do {

    //Calculate rotated coordinates     
    p.u = M11*p.x + M12*p.y + cosp*p.z;
    p.v = -sint*p.x + cost*p.y;
    p.w = M31*p.x + M32*p.y + sinp*p.z;

    //Calculate viewplane projection coordinates
    m = fLen/(fLen - p.u);
    p.projX = p.v*m + projCenterX;
    p.projY = p.w*m + projCenterY;

    if ((p.projX > displayWidth)||(p.projX<0)||(p.projY<0)||(p.projY>displayHeight)||(p.u>uMax)) {
        p.onScreen = false;
    }
    else {
        p.onScreen = true;
    }

    if (p.onScreen) {

            //we read the color in the position where we will place another particle:
            readColor = displayBitmapData.getPixel(p.projX, p.projY);

            //we take the blue value of this color to represent the current brightness in this position,
            //then we increase this brightness by levelInc.
            level = (readColor & 0xFF)+levelInc;

            //we make sure that 'level' stays smaller than 255:
            level = (level > 255) ? 255 : level;

            /*
            We create light blue pixels quickly with a trick:
            the red component will be zero, the blue component will be 'level', and
            the green component will be 50% of the blue value.  We divide 'level' in
            half using a fast technique: a bit-shift operation of shifting down by one bit
            accomplishes the same thing as dividing by two (for an integer output).
            */
            //dColor = ((level>>1) << 8) | level;

            dColor = (level << 16) | (level << 8) | level;

            displayBitmapData.setPixel(p.projX, p.projY, dColor);               
    }

    p = p.next;

} while (p != null)

displayBitmapData.unlock();

}

这是我正在使用的示例http://www.flashandmath.com/flashcs4/light/ 我有点理解它们是如何使用的,但我不知道为什么。

提前致谢。

PD:有点惊讶甚至没有与之相关的标签。

1 个答案:

答案 0 :(得分:1)

在连接的Particle3D.as类中,它们具有:

//coords WRT viewpoint axes
public var u:Number;
public var v:Number;
public var w:Number;

从您发布到问题的代码示例中可以清楚地看到coords WRT viewpoint axes表示coordinates with respect to viewpoint axes,因为代码正是这样做的。

他们正在做的是相机(或观察)转换,其中粒子的世界坐标(x,y,z)从世界坐标系转换为相机中的坐标(或视图)坐标系(u,v,w)。

(x,y,z)是世界坐标系中粒子的坐标

(u,v,w)是相机坐标系中粒子的坐标

例如,世界坐标系可能有一个原点位于(0,0,0),相机位于(5,3,6),外观矢量为(1,0,0)及以上向量(0,1,0)。