如何在OpenGL中创建不同的投影,而不使用gluPerspective和glOrtho?
我需要在OpenGL中绘制一个可以在不同投影中查看的场景。到目前为止,我一直在使用gluPerspective和glOrtho来创建不同的投影,但现在我需要在不使用这些函数的情况下进行。有没有办法做到这一点?您可以通过直接设置投影矩阵来实现。由于您使用了如何在OpenGL中创建不同的投影,而不使用gluPerspective和glOrtho?,opengl,graphics,glu,Opengl,Graphics,Glu,我需要在OpenGL中绘制一个可以在不同投影中查看的场景。到目前为止,我一直在使用gluPerspective和glOrtho来创建不同的投影,但现在我需要在不使用这些函数的情况下进行。有没有办法做到这一点?您可以通过直接设置投影矩阵来实现。由于您使用了glupspective(),因此我假设您使用的是固定函数遗留OpenGL管道。对吗?我这样问是因为如果是这样,您可以将矩阵模式设置为投影矩阵(通过glMatrixMode(GL\u projection);直接加载或构造一个矩阵,调用glLoa
glupspective()
,因此我假设您使用的是固定函数遗留OpenGL管道。对吗?我这样问是因为如果是这样,您可以将矩阵模式设置为投影矩阵(通过glMatrixMode(GL\u projection);
直接加载或构造一个矩阵,调用glLoadMatrix()
或glTranslate()
等
如果您试图从固定函数管道中移开,并且这就是为什么您不能使用glupperspective()
或glOrtho()
的原因,那么您需要手动计算它并将结果矩阵传递给着色器
因此,如果您仍在使用固定函数管道,将告诉您如何设置投影矩阵,该投影矩阵由glupperspective()
计算,但使用glFrustum()
:
9.085如何调用glFrustum()以匹配对GLUPPERVICENT()的调用
glFrustum()调用的视野(fov)为:
fov*0.5=arctan((上下)*0.5/近)
由于gluPerspective()生成的对称投影的bottom==-top,因此:
top=tan(视野*0.5)*近
bottom=-top
注意:fov必须以弧度为单位,以上公式才能与C数学库一起使用。如果您已以度为单位输入fov(如调用gluPerspective()),请按如下方式计算top:
top=tan(视野*3.14159/360.0)*近
左侧和右侧参数只是顶部、底部和侧面的函数:
left=aspect*bottom
right=aspect*top
OpenGL参考手册(我从哪里得到这个?)
说明了如何根据上述信息计算投影矩阵。(我在这里放了一个摘录,但我不确定如何正确绘制矩阵。)同样,说明了如何手动构造正交投影矩阵
如果您使用的是现代渲染管道,您可以将上述信息与OpenGL数学库一起使用。glm将帮助您构建所需的矩阵,并且您可以将结果传递给着色器。正如user1118321在其回答中所述,您可以自己创建任何投影矩阵并将其直接加载到OpenGL。但是对于nEWBEE,从那里开始是很困难的,所以在C++中,这样做是:< /P>
double M[16]=
{
1.0,0.0,0.0,0.0,
0.0,1.0,0.0,0.0,
0.0,0.0,1.0,0.0,
0.0,0.0,0.0,1.0, // <- this line is for projections
};
glMatrixMode(GL_PROJECTION)
glLoadMatrixd(M);
double M[16]=
{
1.0,0.0,0.0,0.0,
0.0,1.0,0.0,0.0,
0.0,0.0,1.0,0.0,
0.0,0.0,0.0,1.0,//您还可以使用GLM库。