2010-11-29 60 views
0

我是新来的opengl。作为一个学习练习,我开始手动构建一些基本形状,然后转向编写通用.off文件查看器。opengl适合任意形状

我的问题是如何“大小”的“窗口”,以适应任意大小的模型。我一直试图通过基于x,y或z坐标的范围的某个因素在-z方向上翻译来从模型中“拉回”,并且这通常起作用,但并不总是,并且似乎是错误的方法。抱歉的报价,就像我说我是新的,缺乏一些术语。

这恰好是在使用opengl es 1.0的android平台上,如果这有所作为。

任何人都可以指出我实现这一目标的最佳做法吗? 谢谢。

+0

[适合在窗口内的3D模型]的可能重复(http://stackoverflow.com/questions/4180289/fit-3d-model-inside-a-window) – genpfault 2010-11-29 20:22:34

回答

1

您应该熟悉用于设置视图体积/视锥体的OpenGL函数。

这是一个article specific to OpenGL ES (iPhone)应该让你开始,但标准的OpenGL编程指南和参考都适用于这些概念。

玩得开心!

+0

我不认为这是问题。我已经在文章中设置了视图端口。问题在于我要么太靠近模型,要么模型内部,或者模型对于视图端口来说太大。一直在通过将模型翻译成-z方向来处理这个问题。查看端口已经设置为屏幕的大小,所以我不能做出任何更大的。视口可以缩放吗? – 2010-11-29 22:27:37

0

为了实现查看器中所有对象的适合窗口,您必须首先知道所有对象的范围 - xmin,xmax,ymin,ymax,zmin和zmax。通常,对所有单个对象预先计算边界球体,并且每次向观察者添加对象时,都会将其边界球体添加/包含到现有全局边界球中。这意味着,最初有一个观测者的边界球,其半径为1,并且以x0,y0 z0为中心。每次将新对象添加到查看器时,其预先计算的边界球体都会添加到查看器中。通过加入,我的意思是更新初始球体的中心和半径,以便它包围/包含新球体并因此增长全球球体以容纳新球体。一旦完成,每当用户发出拟合命令时,相机将定位到球体的中心,并且glOrtho的范围值将更新为球体的半径。请注意,当添加新的扫描线时,全局球体的中心也会发生变化,因为物体将分开放置,并且添加它们的球体会产生一个半径更大,中心不同的新球体。这种方法根据不同的视图投影(顶部,前部,左侧等)不会给出精确的拟合。如果你想在不同的投影中有更精确的拟合,你需要有一个BoundingBox而不是球体,但是计算需要大量的投影和偏移量计算,这比较麻烦。