Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ 透视视图openGL qt的任何解决方案_C++_Qt_Opengl - Fatal编程技术网

C++ 透视视图openGL qt的任何解决方案

C++ 透视视图openGL qt的任何解决方案,c++,qt,opengl,C++,Qt,Opengl,当我放大图像时,我有以下问题。我没能解决它。我目前正在用c++开发Qt。我有一个关于正交投影和透视投影的问题。我需要在不遍历图像的情况下进行缩放。我试图使glViewport更大,但它对我不起作用。xmin,xmax。。。是最大值和最小值​​对于每个轴 void-MeshViewer::resizeGL(int-width,int-height) { 内侧=qMin(宽度、高度); 如果(高度==0) 高度=1; glViewport(((闪烁)(宽度-侧)/2.0),(闪烁)(高度-侧)/2.

当我放大图像时,我有以下问题。我没能解决它。我目前正在用c++开发Qt。我有一个关于正交投影和透视投影的问题。我需要在不遍历图像的情况下进行缩放。我试图使
glViewport
更大,但它对我不起作用。
xmin
xmax
。。。是最大值和最小值​​对于每个轴

void-MeshViewer::resizeGL(int-width,int-height)
{
内侧=qMin(宽度、高度);
如果(高度==0)
高度=1;
glViewport(((闪烁)(宽度-侧)/2.0),(闪烁)(高度-侧)/2.0),(闪烁)侧,(闪烁)侧);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glOrtho(xmin,xmax,ymin,ymax,zmin,zmax);
glMatrixMode(GLU模型视图);
glLoadIdentity();
}

窗口显示的是一个由六个平面定义的平截头体。通常,这些平面是平行的,如在立方体中。不显示位于平截头体外部的任何内容

“缩放”可以用一般的方式解释为“看得更大、更近、更详细”

有几种方法可以实现缩放效果:

  • 缩放对象。这样做,缺陷在于物体(或其部分)可能位于平截头体的近平面之前或远平面之后

  • 将相机移向对象。近/远平面也存在同样的问题。另外,注意在模型中移动,可以设置“屏障”(可能是一个框)以防止相机移动太深

  • 对于正交投影,将左/右/顶部/底部平面设置为更靠近对象。这会使平截头体变小,因此一些对象被剪裁是正常的

  • 对于透视投影,可以使用与正交投影相同的技巧。这个技巧只是为了减小FOV(视野)角度。如果对象太远,透视效果可能不太明显

指定标准化设备坐标到窗口坐标(像素)的映射

如果要将剪辑空间内的整个几何体映射到窗口,则必须:

glViewport(0, 0, width, height)