我用opengl写了一个三维有限元的前处理。但在捕捉节点的时候遇到问题。
源程序如下
奇怪的是:当glbselectbuf是静态数组的时候是没有任何问题,
但当glbselectbuf是动态数组时,然后我肯定要setlength如第一句,
但到程序的glpopmatrix时,glbselectbuf变成了0,没有长度了。结果最后肯定出错了。我就想问为什么用来记录选择结果的glbselectbuf是动态数组就不行,只有静态数组才可以呢?望各位高手指点。
  setlength(glbselectbuf,16); //
  glGetIntegerv(GL_VIEWPORT, @vp);//获得当前视口
  glSelectBuffer(16, @glbSelectBuf); //选择glbselectbuf为记录的缓存
  glRenderMode(GL_SELECT);//进入选择模式
  glInitNames;  //初始化名表
  glPushName(100);//为防止错误,随便推进一个
  glMatrixMode(GL_PROJECTION);//选择投影模式
  glLoadIdentity;//单位化投影矩阵
  glPushMatrix;//推进一个矩阵
 gluPickMatrix(x, ogra.Height-y, 10, 10, vp);//设置拾取矩阵  with  ogra do
  begin
     glortho(orgx,extx,orgy,exty,orgz,extz);//恢复以前的投影矩阵
  end;  if glbselectstate=stapt then  //只是画要捕捉的图元
  drawpoint()//只是画要捕捉的图元
  else  if   glbselectstate=staquad then//只是画要捕捉的图元
  drawquads(gl_select);//只是画要捕捉的图元  glPopMatrix;///////就是这句glbselectbuf变成了0,没有长度了  glpopname;
  glMatrixMode(GL_MODELVIEW);
  hits := glRenderMode(GL_RENDER);
  If hits <= 0 then
    Result := 0
  else
  begin
    Result :=glbselectbuf[3];
end;