Opengl gl_FragCoord用于具有不同DPI的监控器

Opengl gl_FragCoord用于具有不同DPI的监控器,opengl,screen-resolution,fragment-shader,Opengl,Screen Resolution,Fragment Shader,对于写入片段着色器的监控器的不同DPI,正确的解释方法是什么?我使用glFragCoord使内容只显示在屏幕的一部分。东西在我的外部显示器上显示为缩进(占据整个小GL窗口),在我的内置显示器上显示不正确(缩小到只占据窗口左下角的四分之一)。有没有跨平台的方法来解决此类问题 我非常确定这是对我的问题的正确诊断,因为我的着色器在内置显示器(15.4英寸2880x1800)和外部显示器(22英寸1680x1050)上看起来不同。有人碰到过这个问题吗?我找到了一个解决方案,但我仍然觉得我对这个问题没有很

对于写入片段着色器的监控器的不同DPI,正确的解释方法是什么?我使用glFragCoord使内容只显示在屏幕的一部分。东西在我的外部显示器上显示为缩进(占据整个小GL窗口),在我的内置显示器上显示不正确(缩小到只占据窗口左下角的四分之一)。有没有跨平台的方法来解决此类问题


我非常确定这是对我的问题的正确诊断,因为我的着色器在内置显示器(15.4英寸2880x1800)和外部显示器(22英寸1680x1050)上看起来不同。有人碰到过这个问题吗?

我找到了一个解决方案,但我仍然觉得我对这个问题没有很好的把握。因为顶点着色器的使用是正确的,所以我只是将位置作为“变化”传递给片段着色器,而不是使用gl_fragCoord。它在到达片段着色器的过程中进行插值,并且似乎考虑了监视器之间的差异。它仍然在剪辑空间中,因此您必须对其进行相应的变换。

我找到了一个解决方案,但我仍然觉得我对这个问题没有很好的把握。因为顶点着色器的使用是正确的,所以我只是将位置作为“变化”传递给片段着色器,而不是使用gl_fragCoord。它在到达片段着色器的过程中进行插值,并且似乎考虑了监视器之间的差异。它仍然在剪辑空间中,因此您必须相应地对其进行变换。

使用统一的方法传递视口大小,并在标准化坐标中工作。另请参见:。我告诉它对每个对象使用相同的视口大小,也就是说,我以像素为单位指定它。另外,我刚刚意识到传递到顶点着色器的坐标被正确映射,只有在片段着色器中完全确定的东西是错误的。我有什么误解吗?另外,程序不知道我何时在监视器之间拖动,因此如果该数字不变,则传递给它的数字应该不会有什么区别。如果指定的视口大小小于正在渲染的窗口,则只会得到左下角的部分。应将视口大小设置为与窗口大小相同。或者我不理解这个问题,我觉得我问得不是很清楚。我的收获是,gl_fragCoord并不是提供位置参考的好方法,最好在将点传递到顶点着色器时使用同一坐标系中的点,因此只需将它们从顶点着色器传递到片段着色器。使用统一的方法传递视口大小,并使用规范化的方法协调。另请参见:。我告诉它对每个对象使用相同的视口大小,也就是说,我以像素为单位指定它。另外,我刚刚意识到传递到顶点着色器的坐标被正确映射,只有在片段着色器中完全确定的东西是错误的。我有什么误解吗?另外,程序不知道我何时在监视器之间拖动,因此如果该数字不变,则传递给它的数字应该不会有什么区别。如果指定的视口大小小于正在渲染的窗口,则只会得到左下角的部分。应将视口大小设置为与窗口大小相同。或者我不理解这个问题,我觉得我问得不是很清楚。我从中得出的结论是,gl_fragCoord不是提供位置参考的好方法,最好在将点传递到顶点着色器时使用同一坐标系中的点,因此只需将它们从顶点着色器传递到片段着色器即可。