2010-11-29 63 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而不是球體,但是計算需要大量的投影和偏移量計算,這比較麻煩。