gpt4 book ai didi

c++ - 在 OpenGL ES 中调整由投影仪引起的失真

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:44 27 4
gpt4 key购买 nike

我开始使用在 Raspberry PI 上运行的 OpenGL ES 应用程序 (C++/SDL),我想通过袖珍投影仪输出它。

我想让用户能够纠正因投影仪从非垂直于表面的方向瞄准而导致的失真。该表面也将小于投影面积。为此,用户将能够独立“移动”投影窗口的 4 个角以匹配表面。

我计划通过求解一个简单的线性方程组来实现这一点,该方程组将原始角点(在当前投影矩阵坐标中)转换为用户设置的角点,并将这个结果矩阵推到 GL_PROJECTION 矩阵之上堆栈。

但是...我发现我无法“读取”OpenGL ES 中的投影矩阵:

float matrix[16];
glGetFloatv(GL_PROJECTION_MATRIX, matrix);

特别是,GL_PROJECTION_MATRIX 符号不存在...而且我什至读到 OpenGL ES 中没有投影矩阵之类的东西(我觉得很难相信,但我对它完全陌生, 所以...).

是否有任何关于读取此矩阵的解决方法的想法,或者可能是一种替代方法来完成我正在尝试做的事情?

谢谢!

最佳答案

OpenGL ES 1.x 有一个投影矩阵,您应该能够使用问题中的代码准确获取当前值。参见 http://www.khronos.org/opengles/sdk/1.1/docs/man/glGet.xml用于确认这一点的文档,或位于 http://www.khronos.org/registry/gles/api/GLES/gl.h 的头文件.

ES 2.0 及更高版本是另一回事。 ES 2.0 消除了 ES 1.x 中存在的大部分固定管道,并将其替换为基于着色器的渲染。

因此,像内置投影矩阵这样的概念在 ES 2.0 中不再存在,取而代之的是用 GLSL 编写的更灵活的着色器程序概念。如果你想在 ES 2.0 中使用投影矩阵,你的顶点着色器代码中有一个矩阵变量,将矩阵的值传递给着色器程序(使用 glUniformMatrix4fv API 调用),然后您为顶点着色器提供的 GLSL 代码执行 vector 与投影矩阵的乘法。

所以在 ES 2.0 的情况下,不需要 glGet*() 调用投影矩阵。如果你有一个,你计算它,并将它传递给着色器程序。这意味着您的代码中已经有了矩阵。好吧,您可以使用 glGetUniformfv() API 调用返回任何矩阵值,但是将它保留在您的代码中会更容易和更清晰。

关于c++ - 在 OpenGL ES 中调整由投影仪引起的失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com