在使用OpenTK的API,怎样实现鼠标点击的点为三维点?几何造型引擎打算使用CGM,渲染端使用OpenTk的方案...

本文介绍了如何在OpenTK中通过GLControl的MouseDown事件回调,利用PointToClient方法转换屏幕坐标,并结合OpenGL的gluUnProject函数,将客户端坐标转换为三维空间坐标,从而实现鼠标点击的点为三维点。
摘要由CSDN通过智能技术生成

使用OpenTK实现鼠标点击获取三维点的方法如下:

  1. 在OpenTK中使用GLControl控件,并设置GLControl的MouseDown事件回调函数。
  2. 在MouseDown事件回调函数中,调用GLControl的PointToClient方法将鼠标点击的屏幕坐标转换为GLControl的客户端坐标。
  3. 使用OpenTK的OpenGL相关函数,获取当前摄像机的视图矩阵和投影矩阵。
  4. 使用OpenGL的gluUnProject函数,根据当前的视图矩阵和投影矩阵,将客户端坐标转换为三维空间坐标。

示例代码如下:

``` void GLControl_MouseDown(object sender, MouseEventArgs e) { // 获取鼠标点击的屏幕坐标 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) { // 转换成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值