乍一看这可能听起来很懒,但我已经研究了两天了。
我有一个绘制图元的 SDL+GLEW 应用程序。我想以不同的视角制作一些视口。我看到了四个视口,但无法更改视角。
假设你有
draw();
swapbuffers();
在 OpenGL3+ 规范中,创建透视视口(或者理想情况下是多个透视视口)的最简单方法是什么?
下面是 GLSL 1.50 代码,用于执行与 gluPerspective 相同的操作。您可以轻松地将其转换为您选择的语言,然后通过 glUniformMatrix4fv 上传。
mat4 CreatePerspectiveMatrix(in float fov, in float aspect,
in float near, in float far)
{
mat4 m = mat4(0.0);
float angle = (fov / 180.0f) * PI;
float f = 1.0f / tan( angle * 0.5f );
/* Note, matrices are accessed like 2D arrays in C.
They are column major, i.e m[y][x] */
m[0][0] = f / aspect;
m[1][1] = f;
m[2][2] = (far + near) / (near - far);
m[2][3] = -1.0f;
m[3][2] = (2.0f * far*near) / (near - far);
return m;
}
然后你就可以:
mat4 worldMatrix = CreateSomeWorldMatrix();
mat4 clipMatrix = CreatePerspectiveMatrix(90.0, 4.0/3.0, 1.0, 128.0);
gl_Position = worldMatrix * clipMatrix * myvertex;
some_varying1 = worldMatrix * myvertex;
some_varying2 = worldMatrix * vec4(mynormal.xyz, 0.0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)