acDisplayDCS矩阵
这是一个棘手的问题。就Z轴或法线而言,viewdir-ucsorg是标准化的。
然后我使用任意轴算法来创建x方向和y方向
然后使用ucsorg进行平移。
不幸的是,当ucs设置为view时,这无法与ucsmatrix进行比较。
转换为wcs的getvar viewctr似乎与vba viewport.center相同,但具有z值。
所以我不太确定是否有一个点可以用来创建平面。即使这样,我也不确定x轴是怎么做的,也许它是一个沿着视角旋转的单位向量。
至于target,我真不敢相信它的帮助是如此之少。
在此预先感谢您的帮助。
**** Hidden Message ***** 我不太确定你想做什么,你想根据当前视图创建一个平面/ucs吗?
请记住,视图方向向量不一定指向ucsorg,向量没有真正的位置,只有方向和长度。给定viewdir vec,AAAlgo应该可以正常工作。 是的。米克:我一直在用我自己的翻译功能替换翻译功能,并且在acDisplayDCS翻译和当前视图矩阵上都卡住了
我猜这是为了视口对齐还是类似的? 它最终会以这种方式结束。我一直很难掌握观点。我似乎接近然后失去了它。
视图符号无济于事。
我开始写一个子,在屏幕上添加2条对角线。
我可以通过翻译4点来做到这一点,但似乎无法制作一个可靠的4x4矩阵来使用变换。
使用ucsxdir和ucsydir制作ucs矩阵很容易,但视图矩阵有点令人困惑。
正如我所说,我有z只需要x 你需要的是‘相机’位置和ocs。我会看一下arx帮助,看看有什么发现。 谢谢米克,奇怪的是他们给了目标,却没有给相机。 查看vba帮助,视图中心是您所需要的,只是它作为二维点提供给您(如您所说)
您应该能够使用带有矢量角度等的三角轴和二维中心点,从目标点计算视图中心的z值
然后,要获得X矢量,如果视图没有任何扭曲,可以使用wcs z矢量创建轴
xvec=viewdir叉积(wcs.zvec)
yvec=viewdir叉积(xvec)
或反转,如果您希望矩阵的z指向远离相机。 我会试一试,但目标点似乎只有在使用3dorbit时才与视图中心对齐,因为在视图中是ucs的正常现象。我真的不能说它是什么。使用wcsZ向量是我所做的,它没有给出正确的答案。实际上我使用下面的
Function GetOcsFromNormal(N As Variant) As Variant
'N is the normal vector.
'Wy is the world Y axis, which is always (0,1,0).
'Wz is the world Z axis, which is always (0,0,1).
Dim Wy(2) As Double
Dim Wz(2) As Double
Dim Nx As Double, Ny As Double
Dim Ax, Ay, Ocs(1) As Variant
N = NormaliseVector(N)
Wy(0) = 0: Wy(1) = 1: Wy(2) = 0
Wz(0) = 0: Wz(1) = 0: Wz(2) = 1
Nx = N(0): Ny = N(1)
If (Abs(Nx) < 1 / 64) And (Abs(Ny) < 1 / 64) Then
'Ax = Wy X N (where X is the cross-product operator).
Ax = Crossproduct(Wy, N)
Else
Ax = Crossproduct(Wz, N)
End If
Ocs(0) = NormaliseVector(Ax)
Ay = Crossproduct(N,Ax) 'edit-had this wrong
Ocs(1) = NormaliseVector(Ay)
GetOcsFromNormal = Ocs
End Function
,也许我需要使用z值 忘记了x轴必须是水平的。
它的计算结果是GetOcsFrom正常函数给出了正确的答案,但是x和y向量需要旋转减去z(viewdir)周围的视图扭曲量。我有一个矩阵可以做到这一点,围绕一个我适应vba但无法计算出的向量旋转myself.But它似乎可以用更少的数学来完成。
无论如何,我现在至少可以匹配一个视图ucs矩阵。
页:
[1]
2