我在XZ平面上绘制了一个椭圆,并将我的视角略微向上设置在Y轴上,然后回到Z上,从45度角观察椭圆的中心,使用gluPerspective()设置我的观察截头尺。

椭圆

未旋转,椭圆的长轴跨越视口的宽度。 当我围绕我的视线旋转90度时,椭圆的主轴现在跨越我的视口的高度,从而使椭圆变形(在这种情况下,使其看起来不那么偏心)。

旋转椭圆

我需要做些什么来防止这种变形(或至少考虑到它),所以围绕视线的旋转会保留椭圆的感知长轴(在这种情况下,导致它超出视口)?

===============>>#1 票数:5 已采纳

当你调用gluPerspective()时,看起来你正在使用1.0作为方面。 你应该使用宽度/高度。 例如,如果视口是640x480,则使用1.33333作为aspect参数。

===============>>#2 票数:3

根据OpenGL规范:

void gluPerspective( GLdouble fovy,
                     GLdouble aspect,
                     GLdouble zNear,
                   GLdouble zFar )

Aspect应该是窗口宽度和高度的函数。 特别是宽度除以高度(但要注意除以零)。

也许你使用1作为方面是不准确的,除非你的窗口是正方形。

===============>>#3 票数:1

看起来你的gluPerspective调用中的aspect参数需要调整。 男人页面 如果您的窗口是物理方形,则纵横比为1,您的问题就会消失。 但是,您的窗口是矩形的,因此视锥体需要是非方形的。

将宽高比设置为window_width / window_height,椭圆应该看起来正确。 请注意,只要窗口调整大小,您就需要更新它; 如果您正在使用GLUT设置glutReshapeFunc并重新计算那里的投影矩阵。

  ask by rampion translate from so

未解决问题?本站智能推荐:

1回复

OpenGL - 在没有旋转的情况下绕太阳旋转月亮?

我正在研究围绕地球旋转的月球图形模型。 现在,月球在绕地球旋转时在y轴上旋转。 我怎样才能防止月亮旋转但仍允许它进入轨道? 这是代码.. 编辑:添加动画视频以演示问题: http://www.youtube.com/watch?v=ltGV4pXD5Cs
1回复

关于OpenGL中的旋转

我正在开发一个简单的代码,尝试学习一些OpenGL。 我用GL_LINES做一个简单的正方形,然后尝试用箭头键旋转它们。 关于左右旋转时,效果很好,但是如果我尝试上下旋转,有时会跳动。 我知道错误在这行上,但是我不知道如何解决: if(beta>=PI*2.0 &&
1回复

OpenGL中对象的旋转

我需要按向左箭头键旋转矩形对象。 我无法旋转它,或者也许是。 使用缓冲区可能有问题。 如果正确放置了rotatef()函数,或者问题出在哪里。
2回复

应用透视矩阵时的OpenGL变形

我有一个简单地绘制立方体的程序。 当应用诸如旋转缩放等变换时,程序将运行。 当我尝试应用任何透视矩阵(例如,透视,平截头体或正交)时,立方体会以不确定的方式变得非常扭曲。 我感到困惑的是,为什么该程序在使用其他转换时可以正常工作,但是在应用任何类型的透视图时却会中断。 此外,当我在g
1回复

在OpenGL中围绕自身旋转对象

我在绕自己旋转房间时遇到了麻烦。 它的中心在(5,5,0),所以我想如果我用glTranslatef(5,5,5)平移房间和房间中的对象,然后glRotatef(rotateroom,0,0,1)然后绘制项目并使用glTranslate(-5,-5,0)它会旋转房间以及其中的所有东西大约5,5
2回复

opengl中的对象旋转未发生

我正在为opengl中对象的旋转而苦苦挣扎 按下左箭头键,它应旋转90度。 但它没有按此顺序旋转,而是无序随机旋转。 还请检查重新显示功能是否正确使用
1回复

无法使用opengl在c中旋转运动对象

我试图在移动对象时旋转它,但是我无法使其移动并沿我希望其移动的点旋转。 rotationWithMoment()函数获取对象,对象必须旋转到的静态坐标和角度,并以状态坐标为轴进行旋转。 rotationWithoutMovement()函数接收一个对象,将其旋转到的坐标和角度更改为该
2回复

在opengl中从glRotatef()获得旋转矩阵

是否有一种方法可以获取由opengl中的glRotatef()命令生成的旋转矩阵?
1回复

在OpenGL中沿对象背后的方向旋转相机

我正在使用freeglut在OpenGL中制作游戏。 我有一辆汽车,可以使用按键来回移动,然后摄像机跟随它。 现在,当我转向汽车(在xz平面上旋转gl)时,我希望相机更改相机位置(使用gluLookAt),以便它始终指向汽车的后部。 有什么建议我该怎么做?
3回复

OpenGL旋转和缩放

是否始终围绕原点(0,0,0)进行旋转? 翻译是否总是相对于先前的翻译发生? 缩放会增加坐标轴的大小吗?