关于OPENGL中的拾取和捕捉问题,这方面的高手请进

bestyi 2003-12-30 10:00:15
我用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;
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hatedeadlock 2004-01-01
  • 打赏
  • 举报
回复
0
delphizd 2003-12-30
  • 打赏
  • 举报
回复
http://218.56.11.178:8018/FileDown.aspx?FID=262
http://218.56.11.178:8018/FileDown.aspx?FID=263
http://218.56.11.178:8018/FileDown.aspx?FID=264

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧