opengl中的挑选问题

eels_dream 2008-04-22 08:42:56
现在在做一个opengl的挑选.

在渲染模式下时,程序运行都是正常的.

挑选部分内容:
用glselectbuffer()指定记录数组
进入选择模式
对名字堆栈初始化
使用工具函数glupickmatrix()
交替调用绘制函数和操纵名字堆栈函数
退出选择模式
处理记录

现在问题是:进入选择模式后.在调用绘图函数时总是出现invalid float point operatation的错误.
进入选择模式后,当产生选择命中时回出现invalid float point operatation,而没产生选择命中时就一

切运行正常的,比如说,绘制了一些物体,当鼠标点击(进入选择模式),点在没有物体的地方无问题,点到物

体上时出错. 渲染模式和选择模式下调用的绘图函数都是一样的.


请问,这可能是什么方面的原因?
...全文
88 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
等待牛人来答.
qianlima888 2008-04-30
  • 打赏
  • 举报
回复
红宝书有pick的例子 研究一下
icosagon 2008-04-23
  • 打赏
  • 举报
回复
看不出问题,既然点击才产生问题,ProcessHits(bingo, selectBuf);检查下这个函数吧
eels_dream 2008-04-23
  • 打赏
  • 举报
回复
DrawObjects()函数

DrawObjects()
{
//...gluLookAt();
//
list<Base_OGL*>::iterator it = _object->begin();//_object是需要绘制的对象列表
for(unsigned int i=1; it!=_object->end(); it++)
{
glLoadName(i);
i++;
(*it)->Show();//对象绘制自己
}
}
eels_dream 2008-04-23
  • 打赏
  • 举报
回复
是这行代码有问题吗?麻烦说详细点,谢了.
icosagon 2008-04-23
  • 打赏
  • 举报
回复
void glPushName(GLuint name);
eels_dream 2008-04-23
  • 打赏
  • 举报
回复
GLint bingo;
GLint viewport[4];
GLuint selectBuf[512];


glGetIntegerv(GL_VIEWPORT, viewport);
glSelectBuffer(512, selectBuf);
(void)glRenderMode(GL_SELECT);

glInitNames();
glPushName(-1);

glMatrixMode(GL_PROJECTION);
glPushMatrix();

glLoadIdentity();
gluPickMatrix((double)X, (double)(viewport[3]-Y), 3.0, 3.0, viewport);
gluPerspective(FAngle,FWidth/FHeight,FNear,FFar);


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

DrawObjects();

glMatrixMode(GL_PROJECTION);
glPopMatrix();
glFlush();

bingo=glRenderMode(GL_RENDER);

ProcessHits(bingo, selectBuf);


以上是选取部分的代码
eels_dream 2008-04-23
  • 打赏
  • 举报
回复
我设置断点跟踪,在DrawObjects()里出的错,都是在调用gl函数时抛出的异常.
让人迷惑的就是,在选择模式下,没有图元和可视空间相交,也就是没有产生选择命中的时候是正常的.
一旦产生选择命中就会抛出这个异常.

我现在在想的是,是否其他操作对选择模式下的opengl产生了不应该的影响,可是又找不到这个选择命中产生的机理.也就想不出可能会是什么操作带来的影响.

这问题困惑我3天了,恳请各位指点迷津.
icosagon 2008-04-22
  • 打赏
  • 举报
回复
不贴代码真的很难想.
源码直接下载地址: https://pan.quark.cn/s/1966cd075676 依据所提供的文件资料,以下是从多个来源及【部分内容】归纳的OpenGL入门相关知识要点:OpenGL入门:- OpenGL(Open Graphics Library)被定义为一个跨语言、跨平台的编程接口,其主要功能在于渲染2D和3D矢量图形。- 与传统的图形接口如TC的graphics.h相比,OpenGL能够支持更为复杂的图形操作以及更高的分辨率显示。入门教程内容:- 掌握OpenGL能够使人获得创建引人入胜的PC游戏所需的关键编程技能,从而超越老旧图形接口的局限。- OpenGL之所以成为主流图形API之一,是因为它具备与C语言的紧密集成、卓越的可移植性以及高效的图形渲染性能。- OpenGL命令最初是用C语言来编写的,因此对于已经学习过C语言的人来说,它具有易于学习和使用的特点。- OpenGL不仅适用于Windows系统,还支持Unix/Linux等其他操作系统,并且被广泛应用于多种专业的计算机系统之。- OpenGL的API具有硬件独立性和平台独立性的特点,这表示开发的应用程序可以在不同的硬件和操作系统上运行,而无需进行修改。- OpenGL在图形处理的竞争持续展现出优异的性能,被视为工业标准,所有主流显卡制造商都对其提供坚定的支持。- OpenGL被用于开发诸如DOOM3和QUAKE4等知名游戏。学习准备:- 首先需要挑选一个适宜的编程环境,建议在Windows环境下使用VisualStudio2005。- 安装GLUT(OpenGL Utility Toolkit)是一个有益的工具包,尽管不是强制要求,但能够简化学习和编程的过程。- 安装GLUT的具体流...

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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