有人可以解释一下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:有点惊讶甚至没有与之相关的标签。答案 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)。