使用相机旋转使四边形始终显示在相机前面(c++/opengl)
Using camera rotation to make quad always appear in front of the camera (c++/opengl)
我试图让一个四边形始终出现在相机前面,我试图从将它与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旋转始终为零)
查看Lighthouse3D的旧教程。它描述了几种"记账"技术,我相信这正是你想要的。
让p是您的模型视图投影矩阵,c是您试图绘制的四边形的中心。你想找到一对向量u,v来确定四边形的边,
Q = [ c-u-v, c-u+v, c-u-v, c+u-v ]
这样,u在剪辑坐标中直接指向下方,而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
相关文章:
- 了解 GLM- openGL 中的相机转换
- OpenGL相机和相机空间转型的困惑
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 通过 API 控制 DJI 相机
- 将相机数据从服务器实时流式传输到客户端
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- 如何在相机类中添加胶卷
- 强制Qt相机视频格式
- 操纵安卓相机的深度图导致应用程序崩溃
- 深度值没有意义 R200 相机
- Qt QML相机在部署后显示白屏
- Opencv 如何从相机读取单帧
- OpenCV - 来自相机的实时馈送不流畅
- 佳能SDK无法从相机下载图片
- 如何处理来自MIPI相机的12位图像?
- 如何设置vtk相机的正确变焦系数?
- OpenGL 相机移动程序顶点着色器问题