Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
是否可以通过ModelView或投影矩阵弯曲或扭曲OpenGL空间?_Opengl - Fatal编程技术网

是否可以通过ModelView或投影矩阵弯曲或扭曲OpenGL空间?

是否可以通过ModelView或投影矩阵弯曲或扭曲OpenGL空间?,opengl,Opengl,是否可以通过对ModelView或投影矩阵的非标准操作来弯曲或扭曲OpenGL空间 例如,命令glScale(scaleFactor、scaleFactor、noScaleFactor)将沿X轴和Y轴以统一的方式重新调整场景中所有元素的大小 但是,如果能够以一种非统一的方式扭曲OpenGL空间,它将极大地扩展不同效果的潜力。特别是,我所追求的效果是鱼缸式的缩放效果,根据元素与用户的距离,元素将以线性或非线性的方式进行放大(在我的例子中,以Z轴表示) 因此,上面glScale命令的缩放取决于每个元

是否可以通过对ModelView或投影矩阵的非标准操作来弯曲或扭曲OpenGL空间

例如,命令glScale(scaleFactor、scaleFactor、noScaleFactor)将沿X轴和Y轴以统一的方式重新调整场景中所有元素的大小

但是,如果能够以一种非统一的方式扭曲OpenGL空间,它将极大地扩展不同效果的潜力。特别是,我所追求的效果是鱼缸式的缩放效果,根据元素与用户的距离,元素将以线性或非线性的方式进行放大(在我的例子中,以Z轴表示)

因此,上面glScale命令的缩放取决于每个元素沿Z轴的位置:


glScale(函数1(Z距离)、函数2(Z距离)、noScaleFactor)

模型视图和投影是矩阵。所以只能进行线性变换。可以使用顶点着色器尝试效果,但需要相对密集的网格才能使变换看起来良好。着色器将修改每个顶点位置,但由3个顶点组成的三角形仍将保持不变


这是一个示例。

我已经有一段时间没有使用openGL了,但我对此的最初反应是,您应该看看如何使用openGL着色器来解决这个问题。看看这篇类似的帖子:

如果启用“透视”(例如,通过或),将根据与虚拟摄影机的距离获得线性缩放,默认情况下,该距离将沿z轴。根据您为相机位置、近平面和远平面设置的距离,您可以/将获得类似于极广角镜头的放大透视图——但它仍然是一个完美的直线镜头,因此,例如,矩形中的直线始终保持直线,没有鱼眼镜头的曲率


然而,最终,矩阵所做的一切都是线性变换,所以你不会因为它们而扭曲或弯曲。如果你想要鱼眼镜头的桶形失真,你需要做不同的事情,可能是在着色器中。

OpenGL没有“空间”的概念。你不能说“我希望[0,0,0]和[10,10,0]之间的所有东西都是蓝色”或诸如此类的话。
必须通过您的程序进行选择性缩放,在顶点到达GL管道之前,根据需要变换顶点。(也就是说,获取距离,沿所需轴移动顶点,然后沿直线向下推)。这将意味着要做更多的工作,但如果我理解您想要实现的效果,就不能用矩阵来实现。

用opengl实现这样的效果有多难?实际上,甚至可以使用顶点着色器创建效果吗?@inf3rno此问题和答案来自2010年。如果您没有直接在讨论中添加内容,请创建您自己的问题。