opengl适合任意形状

时间:2010-11-29 18:45:24

标签: android opengl-es

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

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

这恰好是在使用opengl es 1.0的Android平台上,如果这有所不同。

有人能指出我实现这一目标的最佳做法吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

您应熟悉用于设置视图音量/视锥的OpenGL函数。

这是一个article specific to OpenGL ES (iPhone),应该可以帮助您入门,但标准的OpenGL编程指南和参考资料也适用于这些概念。

玩得开心!

答案 1 :(得分:0)

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