C++ MVP&;QGLWidget::renderText()
在我的3D程序中,我计算、建模、视图和投影矩阵,这些矩阵在顶点着色器中提供给OpenGL:C++ MVP&;QGLWidget::renderText(),c++,opengl,qglwidget,C++,Opengl,Qglwidget,在我的3D程序中,我计算、建模、视图和投影矩阵,这些矩阵在顶点着色器中提供给OpenGL: // Position of the vertex as seen from the current camera gl_Position = projection * modelview * vec4(VertexPosition, 1.0); 考虑到我有一个点列表,我希望能够将这些点的名称写在它们的几何体旁边。因此,我得到了以下代码片段: for(auto const& _3Dpoint :
// Position of the vertex as seen from the current camera
gl_Position = projection * modelview * vec4(VertexPosition, 1.0);
考虑到我有一个点列表,我希望能够将这些点的名称写在它们的几何体旁边。因此,我得到了以下代码片段:
for(auto const& _3Dpoint : model_->getPoints()) {
Vector3D projected = (projection_* cameraview_.inversedMultiplication(_3Dpoint.second->getPosition()));
projected.normalize();
renderText( projected[0] / projected[3],
projected[1] / projected[3],
projected[2] / projected[3],
_3Dpoint.second->getName());
}
我希望我的投影坐标以窗口坐标表示。但它实际上大约在[-7;7],而且是正的。这就是我正常化的原因。出乎意料的是,在我将旋转或平移应用到视图矩阵之前,这一切都很好。然后,我的点的名称并不能真正粘贴我的点的几何图形。我真的不理解这种行为,因为当我对相机应用变换时,变换同时应用于最终坐标
有什么想法吗?你为什么要使用反向乘法?如果你的顶点在Word空间中,你将它与投影*VIEW矩阵相乘,你应该离开屏幕空间[-1 1 ](如果你也用W分量除法……但是为什么会出现倒数乘法呢?或者是我问错了吗?历史问题。Mat4是以前被推翻的。(Engopys*CasaVIEWVIE**3dPo.2--GePosiPosits());的矢量也不需要规格化位置。如果需要像素位置,可以进行投影*视图*顶点显示,如果投影矩阵是透视的,则按w分量进行偏差。使用xy参数偏差2,-矢量(0.5,0.5)并乘以屏幕大小(宽度,高度)。然后您将退出(0-宽度,0-高度)Pixels:你也应该考虑切换QopungWIDGET,因为QGWIDGET在QT5中被删除和删除。你必须自己绘制文本,或者切换到QML或QT3D,这在当前QT版本中看起来相当不错。@托马斯:我的W坐标实际上总是1,并且除以W永远不会改变我的坐标……我为什么要这么做。到我缩放时不起作用的标准化。w什么时候会改变?为什么要使用反向乘法?如果你的顶点在世界空间中,你将它与投影*viewmatrix相乘,你应该得到屏幕空间[-1](如果你也用W分量除法……但是为什么是乘法呢?或者我问错了吗?历史问题。Mat4以前被推翻了。考虑它写如下:VoCTRESPROCED= =(投影仪* CasaVIEWVIE**3DPONT,第二-GETPACTION())和/和考虑模型矩阵已经应用到γ3dPosits。的矢量也不需要规格化位置。如果需要像素位置,可以进行投影*视图*顶点显示,如果投影矩阵是透视的,则按w分量进行偏差。使用xy参数偏差2,-矢量(0.5,0.5)并乘以屏幕大小(宽度,高度)。然后您将退出(0-宽度,0-高度)Pixels:你也应该考虑切换QopungWIDGET,因为QGWIDGET在QT5中被删除和删除。你必须自己绘制文本,或者切换到QML或QT3D,这在当前QT版本中看起来相当不错。@托马斯:我的W坐标实际上总是1,并且除以W永远不会改变我的坐标……我为什么要这么做。到我缩放时不起作用的标准化。w何时改变?