Jazzyake 2021-07-22 13:50 采纳率: 100%
浏览 48
已结题

使用OpenTK的API,怎样实现鼠标点击的点为三维点?

请教一个问题,在使用OpenTK的API,怎样实现鼠标点击的点为三维点?几何造型引擎打算使用CGM,渲染端使用OpenTk的方案。所以遇到这样的问题,

  • 写回答

1条回答 默认 最新

  • 打酱油的工程师 单片机领域优质创作者 2023-01-06 10:19
    关注

    使用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)
        {
            // 转换成功
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月2日
  • 已采纳回答 7月25日
  • 创建了问题 7月22日

悬赏问题

  • ¥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的速度时间图像)我想问线路信息是什么