我正试图使四边形总是出现在相机前面,我试图将它与x-z平面上的相机对齐并确保它始终面向相机。我用过这段代码......
float ry = cameraRY+PI_2;
float dis = 12;
float sz = 4;
float x = cameraX-dis*cosf(ry);
float y = cameraY;
float z = cameraZ-dis*sinf(ry)+cosf(ry)*sz;
float x2 = x + sinf(ry)*sz;
float y2 = y + sz;
float z2 = z - cosf(ry)*sz;
glVertex3f(x,y,z);
glVertex3f(x2,y,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x,y2,z);
但它看起来不太正确,似乎四边形围绕一个在相机周围正确旋转的不可见点旋转。我真的不知道如何改变它或如何去做,任何帮助赞赏!
编辑:忘了提, cameraX,cameraY,cameraZ是相机的x,y,z位置
cameraRX和cameraRY是相机的x和y旋转(Z旋转始终为零)
答案 0 :(得分:1)
在Lighthouse3D上查看此old tutorial。它描述了几种“广告牌”技术,我相信这是你想要的。
答案 1 :(得分:0)
设P为模型视图投影矩阵,c为您尝试绘制的四边形的中心。你想找到一对矢量u,v来确定四边形的边缘,
Q = [ c-u-v, c-u+v, c-u-v, c+u-v ]
这样你直接指向剪辑坐标,而v指向右边:
P(u) = (0, s, 0, 0)
P(v) = (s, 0, 0, 0)
其中s是四边形的所需比例。假设P是以块对角线形式写的,
[ M | t ]
P = [-----------]
[ 0 0 1 | 0 ]
然后让m0,m1成为M的前两行。现在考虑我们为P(u)得到的等式,替换和简化,得到:
[ 0 ]
P(u) ~> M u = [ s ]
[ 0 ]
为u,v:
导致以下解决方案u = s * m1 / |m1|^2
v = s * m0 / |m0|^2