请教一个问题,在使用OpenTK的API,怎样实现鼠标点击的点为三维点?几何造型引擎打算使用CGM,渲染端使用OpenTk的方案。所以遇到这样的问题,
1条回答 默认 最新
关注 使用OpenTK实现鼠标点击获取三维点的方法如下:
在OpenTK中使用GLControl控件,并设置GLControl的MouseDown事件回调函数。
在MouseDown事件回调函数中,调用GLControl的PointToClient方法将鼠标点击的屏幕坐标转换为GLControl的客户端坐标。
使用OpenTK的OpenGL相关函数,获取当前摄像机的视图矩阵和投影矩阵。
使用OpenGL的gluUnProject函数,根据当前的视图矩阵和投影矩阵,将客户端坐标转换为三维空间坐标。
示例代码如下:{ // 获取鼠标点击的屏幕坐标 Point mousePoint = new Point(e.X, e.Y); // 将屏幕坐标转换为客户端坐标 mousePoint = GLControl.PointToClient(mousePoint); // 获取当前的视图矩阵和投影矩阵 Matrix4 viewMatrix = ...; Matrix4 projectionMatrix = ...; // 定义一个数组存储转换后的三维坐标 double[] worldCoord = new double[4]; // 将客户端坐标转换为三维坐标 GL.GetDouble(GetPName.ModelviewMatrix, out Matrix4 modelviewMatrix); GL.GetDouble(GetPName.ProjectionMatrix, out Matrix4 projectionMatrix); GL.GetInteger(GetPName.Viewport, out int[] viewport); bool success = GLU.UnProject(mousePoint.X, GLControl.Height - mousePoint.Y, 0.0, modelviewMatrix, projectionMatrix, viewport, out worldCoord[0], out worldCoord[1], out worldCoord[2]); if (success) { // 转换成功
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么