opengl中reshape函数怎么用?
2个回答
2022-12-01 · 百度认证:北京惠企网络技术有限公司官方账号
关注
展开全部
你说的应该是改变窗口形状,所绘制的物体不变形,而只是大小发生变化是吧?\x0d\x0avoid reshape (int w, int h)\x0d\x0a{\x0d\x0a glViewport (0, 0, (GLsizei) w, (GLsizei) h);\x0d\x0a glMatrixMode (GL_PROJECTION);\x0d\x0a glLoadIdentity ();\x0d\x0a if (w <= h)\x0d\x0a gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);\x0d\x0a else\x0d\x0a gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);\x0d\x0a glMatrixMode(GL_MODELVIEW);\x0d\x0a}\x0d\x0a看这个reshape函数当窗口发生变化,窗口的w(宽度)和h(高度)参数传给reshape函数,\x0d\x0a glViewport (0, 0, (GLsizei) w, (GLsizei) h);\x0d\x0a把视口设置为铺满整个窗口, if (w <= h)\x0d\x0a gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);\x0d\x0a else\x0d\x0a gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);\x0d\x0a把投影得到的视景体按照视口变化的比例变化视景体的比例;简单地说,本来视景体宽高比是1:1,视口宽高比也是1:1,这时绘制了一个物体。然后因为窗口发生变化,视口也变化,假如变成了2:1;这时如果用1:1的视景体放到2:1的视口上肯定会变形,所以要把视景体变成2:1,这样,虽然物体看起来变大(或变小)了,但长宽比例不变,也就看起来不变形了。注意这个参数(GLfloat) w/(GLfloat) h。
展开全部
你说的应该是改变窗口形状,所绘制的物体不变形,而只是大小发生变化是吧?
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
if (w <= h)
gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);
else
gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);
glMatrixMode(GL_MODELVIEW);
}
看这个reshape函数当窗口发生变化,窗口的w(宽度)和h(高度)参数传给reshape函数,
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
把视口设置为铺满整个窗口, if (w <= h)
gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);
else
gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);
把投影得到的视景体按照视口变化的比例变化视景体的比例;简单地说,本来视景体宽高比是1:1,视口宽高比也是1:1,这时绘制了一个物体。然后因为窗口发生变化,视口也变化,假如变成了2:1;这时如果用1:1的视景体放到2:1的视口上肯定会变形,所以要把视景体变成2:1,这样,虽然物体看起来变大(或变小)了,但长宽比例不变,也就看起来不变形了。注意这个参数(GLfloat) w/(GLfloat) h。
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
if (w <= h)
gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);
else
gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);
glMatrixMode(GL_MODELVIEW);
}
看这个reshape函数当窗口发生变化,窗口的w(宽度)和h(高度)参数传给reshape函数,
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
把视口设置为铺满整个窗口, if (w <= h)
gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);
else
gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);
把投影得到的视景体按照视口变化的比例变化视景体的比例;简单地说,本来视景体宽高比是1:1,视口宽高比也是1:1,这时绘制了一个物体。然后因为窗口发生变化,视口也变化,假如变成了2:1;这时如果用1:1的视景体放到2:1的视口上肯定会变形,所以要把视景体变成2:1,这样,虽然物体看起来变大(或变小)了,但长宽比例不变,也就看起来不变形了。注意这个参数(GLfloat) w/(GLfloat) h。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询