iCAx开思工具箱

标题: 【求助】鼠标在屏幕上交互选择实体的原理是什么? [打印本页]

作者: 深夜摔键盘    时间: 2004-4-22 23:01
标题: 【求助】鼠标在屏幕上交互选择实体的原理是什么?
经常使用鼠标在屏幕上选择实体,我不清楚当鼠标放在欲选的实体上时,系统是怎么知道我欲选择那个实体的?难道每个实体都有一个标记来定义它在屏幕上的位置吗?有相关的交互函数没有?
  
另外我想在UG中自建对象,使用UDO似乎可以,但是UDO必须要与UG的内建对象相关联吗?我看到的例子都是与UG内建对象相关联的.
作者: zzz    时间: 2004-4-23 09:03
选择是OpenGL的函数吧。
作者: 深夜摔键盘    时间: 2004-4-23 11:55
OPEGL中有这样的函数?鼠标在屏幕上交互选择对象?我以为是将图形投影到当前屏幕上,然后判断鼠标的位置是否落在图形范围内,然后再将图形高亮显示。删除事件则是释放掉图形参数,然后重新绘制屏幕。
作者: mcwind    时间: 2004-4-23 13:23
深夜摔键盘 wrote:
经常使用鼠标在屏幕上选择实体,我不清楚当鼠标放在欲选的实体上时,系统是怎么知道我欲选择那个实体的?难道每个实体都有一个标记来定义它在屏幕上的位置吗?有相关的交互函数没有?  
  
  另外我想在UG中自建对象,使用UDO似乎可以,但是UDO必须要与UG的内建对象相关联吗?我看到的例子都是与UG内建对象相关联的.

  正是!对于无论是三维图形还是二维图形,每个实体都明确定义在一个坐标系下面,该坐标系和计算机屏幕坐标系(DC)之间也存在确定的变换关系(看看OPenGL的书就知道了)。捕捉的时候,一般都是在设备坐标系中创建一个过鼠标点,垂直屏幕向里的射线,然后将它变换到图形所在的坐标系(当然,反过来把图元坐标变换到dc也可以,只要坐标系统已就行了),然后依次求射线和各个实体的相交情况,结果符合捕捉精度的图元就是被选中的图元了。
另外还有很多优化和加速的办法,视具体情况而定,就不多说了。
作者: goodluckwu    时间: 2004-4-23 15:33
长见识
作者: pinkwall    时间: 2004-4-23 19:51
"难道每个实体都有一个标记来定义它在屏幕上的位置吗?"
  
补充个人意见:
  
一般情况下,交互操作都需要对已经完成的图形在程序中使用相应的
数据结构进行存储。然后按照自己的数据结构,将绘图区中显示的图形
存储为相应的图形文件。一般几何图形都是有一定的存储方法的。
  
比如我以前做的一个CAD平台,使用Nurbs B样条 Bezier进行曲线曲面设计
例如B样条曲线,一般在程序中将用户输入的控制顶点坐标,以及曲线参数(次数,曲线点生成递推算法步长等)用链表存储。 这样曲线就基本确定了。
作者: 深夜摔键盘    时间: 2004-4-24 14:39
嗯,明白了.
  
读文件的时候,只需要读入相应的参数,然后重新绘制就可以了.
  
pinkwall 其实我想的问题描述如下:
  
UG中拟合数据点生成的样条曲线是有理B样条曲线,它无法拟合成均匀B样条.
我现在在UG中还没有找到将有理B样条曲线重参为均匀B样条的功能.
所以想自己实现一个以均匀B样条拟合数据点的功能.
  
对于均匀B样条,我想使用UDO技术来定义它.  我想使用UDO的自由数据区来保存样条曲线的参数,然后对数据点进行均匀参数化,反求出曲线的控制点,通过UG中的使用控制点生成样条的API就可以实现均匀样条的生成,只需要将UDO与UG创建的样条建立连接就可以解决掉这个问题了.
  
但是,如果我不想使用UG中使用控制点生成样条的函数了,我想自己写一个绘制样条的函数,或者利用OPENGL来绘制样条.  这样的话,我要在UG中来对UDO行显示,更新,,删除,那该怎么办???
  
OPENGL中是有相关的选择图元的函数,可是UG中能否支持OPENGL模式还有待测试.
作者: pinkwall    时间: 2004-4-25 18:33
不均勻的有理B样条就是NURBS曲綫了,呵呵
  
“对于均匀B样条,我想使用UDO技术来定义它. 我想使用UDO的自由数据区来保存样条曲线的参数,然后对数据点进行均匀参数化,反求出曲线的控制点,通过UG中的使用控制点生成样条的API就可以实现均匀样条的生成,只需要将UDO与UG创建的样条建立连接就可以解决掉这个问题了. "
  
這個方法不難,數據點就是B樣條的插值點。
然後確定節點矢量,使用基函數矩陣確定控制頂點。
將新控制頂點傳給API就應該可以了。
  
我看看,捉摸捉摸,看有沒有辦法搞定
作者: pinkwall    时间: 2004-4-25 18:33
爲什麽要用Opengl? 獨立開發一個現實平臺?
作者: 深夜摔键盘    时间: 2004-4-26 00:20
平台什么的倒谈不上.
只是在学习,想在UG平台里做一点自己的东西.
我对IMAGEWARE还算熟悉,imageware在进行曲面重建时,通常使用的方法是bezier和B样条方法,因为NURBS曲线的权值不好控制, 施法中著书说NURBS像烈马,不易控制,迄今罕见论述NURBS曲线连续性和光顺性的论文.
  
我对曲线的原理知之甚浅,但UG在对手工抄的数据点做反求工程时,拟合到的曲线是NURBS,  所以就想试着做一个拟合均匀B样条的功能, 也想探讨一下UDO的用法,我觉得UDO的资料几乎是空白,也可能我是初学,也可能大家都用不着这东西.
  
奥,,明白了,UG在创建样条时,只需要指定一个参数为0,就是均匀B样条了
作者: pinkwall    时间: 2004-4-26 12:45
施法中大爷快退休了,呵呵,不过确实是曲线曲面的大爷级人物
  
给我们上课时及其负责,呵呵
  
NURBS是为了二次曲线等一些代数曲线也能用参数表示而出现的,比如表示圆啊,抛物线啊什么的,算法比较复杂。
  
bezier算是最简单的了,线性递推。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3