我用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;
源程序如下
奇怪的是:当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;
http://218.56.11.178:8018/FileDown.aspx?FID=263
http://218.56.11.178:8018/FileDown.aspx?FID=264