Opengl对象挤出

时间:2012-01-14 17:03:57

标签: c++ opengl

我有一个用opengl绘制的3d框,有人可以解释如何在opengl中挤出对象吗?我是否只为每个盒子在z轴上进一步转换?

2 个答案:

答案 0 :(得分:2)

这种方法可行,但您必须对每个步骤的翻译量进行一些计算。不过,我建议以更智能的方式生成拉伸几何体。

例如,您不应为中间框绘制盒盖(地板和天花板)。你还必须确保两侧完美接触,否则你会得到文物。

我建议使用路径来确定每组顶点所在的平面。路径应由一系列点和每个点的方向矢量组成,这些点确定围绕方向矢量旋转多少。有了它,您可以非常轻松地计算4个环顶点,只需使用基本矢量数学。

所以,例如,你从上限开始[(0.5,0.5,0),( - 0.5,0.5,0),( - 0.5,-0.5,0),(0.5,-0.5,0)]并沿路径移动(首先是中心点,第二个是右矢量)[(0,0,0),(1,0,0)],[(0,5,10),(1,1,0) )],[(10,5,12),(0,1,0)]

现在,您首先计算所有三个方向向量。法线是当前和下一个点之间的差异,因此(0,5,10) - (0,0,0)=(0,5,10)。右矢量必须投影到法线定义的平面上,所以我们首先使用叉积来计算向上矢量:(0,5,10)x(1,0,0)=(0,10,-5) 。最后一步,我们计算投影的右向量,它是法线和向上之间的叉积:(0,5,10)x(-2,4,-2)=( - 125,0,0)。然后必须对所有三个向量进行归一化,如果将它们并排放置,您将得到一个很好的转换矩阵,应用于cap向量,为当前步骤产生4个顶点:

|-1  0        0       |   |0.5|   |-0.5     |
| 0  0.894427 0.447214| * |0.5| = | 0.447213| etc.
| 0 -0.447214 0.894427|   |0  |   | 0.223607|

(我可能会稍微弄清楚这些迹象,你可能需要交换产品因素以获得正确的结果)

然后对路径上的每个步骤重复相同的步骤,每次绘制4个环形四边形。

答案 1 :(得分:1)

  

如何在opengl中挤出对象

你没有。 OpenGL是一个绘图API,而不是几何处理库。看看像GTS http://gts.sourceforge.net/

这样的图书馆