2011-06-04 67 views
1

我试图让广告牌工作,但最后一步遇到问题。Android中的广告牌OpenGL ES 1.0

按照NeHe的教程(http://nehe.gamedev.net/data/articles/article.asp?article=19)的这些指导后,我有我的样子,正确,向上,我已经翻译通过使用glTranslatef()将模型视图矩阵移动到广告牌的中心点。

float[] m = {right.x,right.y,right.z,0f, 
      up.x,up.y,up.z,0f, 
      look.x,look.y,look.z,0f, 
      pos.x,pos.y,pos.z,1f}; //pos is the centerpoint position 
gl.glMultMatrixf(m, 0); 

当我尝试创建一个矩阵乘法从这些像这样,广告牌显示遍布在错误的位置和方向的地方。

我想我的问题是,我不知道如何正确地创建和乘上矩阵。我想不是这样做,但随后半线(需要逆时针旋转的)在错误的方向旋转:

//normal is the vector that the billboard faces before any manipulations. 
float angle = look.getAngleDeg(normal); //returns angle between 0 and 180. 
gl.glRotatef(angle, up.x,up.y,up.z); 

回答

0

明白了,用我的第二个方法。计算矢量之间的角度(点积的arccos)只能给出一个介于0和180之间的角度,所以有一半时间要取消角度,因此旋转方向相反。

这很容易检查...因为我已经有了正确的矢量,我可以检查右向量和正常之间的角度是否是尖锐的。如果它是尖锐的,那么你想要否定原始角度。