在 OpenGL 中,仅使用 OpenGL3 创建透视图的最简单方法是什么?方法?
乍一看这可能听起来很懒,但我已经研究了两天了。
我有一个绘制图元的 SDL+GLEW 应用程序。我想以不同的视角制作一些视口。我看到了四个视口,但无法更改视角。
假设您有
draw();
swapbuffers();
什么是最简单的方法 - 在 OpenGL3+ 规范中 - 创建透视视口(或者理想情况下是几个)?
This might sound lazy at first, but I've been researching it for 2 days.
I have an SDL+GLEW app that draws a primitive. I wanted to make a few viewports in different perspectives. I see the four viewports but I can't change the the perspectives.
Assume you have
draw();
swapbuffers();
What is the simplest way - in OpenGL3+ spec - to create a perspective viewport (or ideally several ones)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
下面是 GLSL 1.50 代码,用于执行与 gluPerspective 相同的操作。您可以轻松地将其转换为您选择的语言,然后通过 glUniformMatrix4fv 上传。
然后你就可以:
Here's GLSL 1.50 code for doing the same thing as gluPerspective. You can easily convert it to your language of choice, and upload it via glUniformMatrix4fv instead.
Then you do:
最简单的也是唯一的方法。自己计算(使用一些库、简单数学等)投影矩阵,并将其上传到顶点着色器中的统一,并在那里进行转换。
The simplest is the only way. Calculate yourself (with some lib, plain math, etc) a projection matrix, and upload it to a uniform in your vertex shader, and do the transformation there.
对于透视矩阵:
gluPerspective
,然后glGetFLoatv(GL_PROJECTION_MATRIX, ...)
,然后glUniform
或glUniformMatrix4fv
对于视口:
glViewport 和 glScissor。或者使用帧缓冲区对象,渲染到纹理,然后渲染纹理。
PS 如果您不想使用已弃用的功能,请从 获取矩阵公式gluPerspective文档,自己计算矩阵,然后使用glUniformMatrix4fv。或者在兼容性配置文件中工作。
For perspective matrix:
gluPerspective
, thenglGetFLoatv(GL_PROJECTION_MATRIX, ...)
, thenglUniform
orglUniformMatrix4fv
For viewports:
glViewport
andglScissor
. Or use framebuffer object, render to texture, then render texture.P.S. If you don't want to use deprecated features, grab matrix formula from gluPerspective documentation, calculate matrix yourself, then use glUniformMatrix4fv. Or work in compatibility profile.