OpenGl ES:Ray Picking用于使用push / pop矩阵绘制的多个对象

时间:2011-01-22 13:39:24

标签: opengl-es

我有一个关于使用push / pop stack绘制多个对象的问题。类似于此。


    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  
    glTranslatef(x,y,z);  
    glRotate(r,1,0,0);     
        
    glTranslate(-x,-y,-z);


    for (i=0 to 20) objects    
    
      glpushMatrix();    

          draw_object()    
    
      glpopMatrix();    
   
 end
        
    

每个对象都是一个具有自己变换的单位圆。在这种情况下,光线拾取如何工作。我应该如何跟踪物体的中心点来计算光线交叉点。我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以获取每个对象的当前矩阵:

glMatrixMode(GL_MODELVIEW);  
glLoadIdentity();  
glTranslatef(x,y,z);  
glRotate(r,1,0,0);     
        
glTranslate(-x,-y,-z);
    

for (i=0 to 20) objects    
    
  glpushMatrix();    
      ... some matrix transformations specific for the object
      ... and get the final matrix and store it to object member
      glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat*)&object->modelMatrix);
      draw_object()    
    
  glpopMatrix();  

进行光线交叉时,只需将对象矩阵与局部中心点坐标相乘,即可得到定义光线的绝对空间。