Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MVP&;QGLWidget::renderText()_C++_Opengl_Qglwidget - Fatal编程技术网

C++ MVP&;QGLWidget::renderText()

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 :

在我的3D程序中,我计算、建模、视图和投影矩阵,这些矩阵在顶点着色器中提供给OpenGL:

// 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何时改变?