我正在处理一个实验设置,其中一个简单的图片显示在基因修改的苍蝇上。图片投影在与飞行距离一定距离的屏幕上。
现在轮到我设置透视校正,以便显示的图像(例如水平条)在距离苍蝇的视角更长的距离内显得更宽({{3 })。代码现在看起来像这样:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(!USEFRUSTUM)
gluPerspective(90.0f, 2 * width/height, 0.1f, 100.0f);
else
glFrustum(92.3f, 2.3f, -25.0f, 65.0f, 50.0f, 1000.0f);
这些价值是几年前由某人输入的,我们发现它们不再准确。但是,我很困惑要输入或更改哪些值以使投影正常工作,因为正如您在实验设置中看到的那样,飞行的视野有点倾斜。
我想到了这些价值观:
我从以下网址获取了关于glPerspective的信息:experimental setup 我还检查了https://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html,但这篇文章并没有对我的实验设置进行处理,这是我混淆的原因。
感谢您的帮助!
答案 0 :(得分:0)
这是截头方法比透视更容易使用的主要示例之一。截锥体本质上是一个截断的金字塔。想象一下你的飞行在一个四边倾斜金字塔的尖端。近值给出了金字塔底座的距离以及金字塔底座每边与顶端的垂直距离的左,右,底部和顶部。尖端在外面"是完全合理的。基地面积。或者如果你的飞行,中心可能正好在"左边"边缘。
假设您的原始图片我们有这个:
"近"给出距离"到投影屏幕和右边(当然还有顶部,底部和左边),尖端的相应距离,错误,垂直于屏幕边缘飞行。
"远"对于投影特征并不重要,仅用于确定深度范围。
所以你可以编程的是以下内容:
double near = ${distance to screen in mm};
double left = ${perpendicular to left screen edge in mm};
double right = ${perpendicular to right screen edge in mm};
double top = ${perpendicular to top screen edge in mm};
double bottom = ${perpendicular to bottom screen edge in mm};
double s = ${scaling factor from mm into OpenGL units};
double zrange = ${depth range in OpenGL units the far plane is behind near};
glFrustum(s*left, s*right, s*bottom, s*top, s*near, s*near + zrange);
请记住,左,右,上和下可能是负面的。所以说你想要在一个方向上对称(未移位)视图,left = -bottom
并且移位实质上是对相同的偏移量加/减。