如何通过鼠标点击获得鼠标点的三维世界坐标呢?OPENGL

如何通过鼠标点击获得鼠标点的三维世界坐标呢?OPENGL,第1张

鼠标点只有二维的位置。屏幕哪有z值?除非你是想在三维空间中拾取,但是鼠标的位置也是二维的。只不过你可以根据比较鼠标拾取到的对象的深度,来判断拾取到的是哪个对象。
获取二维位置我倒是知道:如果你用的是红宝书上的那种程序结构,也就是控制台程序,那么你就可以调用glutMouseFunc(void(func)(int button,int state,int x,int y))在你的main里面注册一个函数func 得到鼠标的状态和位置,如果你用的是NEHE那种程序结构,你就使用windows的WM_LBUTTONDOWN等来获取鼠标位置了。

如果是
MAX4,下面的状态栏里有
XYZ
三个输入框
,在那里你可以输入一个具体的数值。
要是MAX4
以前的版本,那就使用快捷键:F12
采纳哦

1、“快乐扑克”每期销售10分钟,然后进行5分钟的开奖,每天销售48期。2、“任选一”、“任选二”、“任选三”和“选四”玩法共用开奖号码,开奖号码采用随机数码生成器按照黑桃、红桃、梅花、方块的顺序分别产生,开奖结果通过视频等方式及时通知各销售终端。

3ds Max中软件没有批量导出模型点坐标功能,但可以通过手动截图达到形式上的功能实现。

*** 作步骤如下:

1打开3ds Max,切换到定点层级,选择其中一个顶点,记录点的三维坐标(在界面底部有显示,注意x、y、z变化)。

2选择第二个点,记录坐标。

3选择第三个点,记录坐标。

4选择第四个点,记录坐标。

5选择第五个点,记录坐标。

1SceneprototypepickPositionWorldCoordinates 根据屏幕坐标获取世界坐标

2,SceneprototypepickPosition  根据屏幕坐标获取世界坐标

3,SceneprototypedrillPick 通过屏幕坐标拾取多个对象

4,SceneprototypepickFromRay 通过射线拾取第一个3d对象

5,SceneprototypedrillPickFromRay 通过射线拾取多个3d对象

6,SceneprototypepickFromRayMostDetailed 异步拾取3d对象

7, SceneprototypedrillPickFromRayMostDetailed  异步拾取多个3d对象

8,SceneprototypesampleHeight 根据当前弧度坐标获取3d高度

9,SceneprototypeclampToHeight 根据当前世界坐标位置获取3d对象

10,SceneprototypesampleHeightMostDetailed异步获取当前位置的高度

11,SceneprototypeclampToHeightMostDetailed 异步获取当前位置的3d对象

12,SceneprototypecartesianToCanvasCoordinates 世界坐标转canvas坐标

13,CameraprototypepickEllipsoid 根据屏幕坐标返回椭球体坐标或者2维地图上的坐标

14,CameraprototypegetPickRay 以相机位置为起点,屏幕坐标位置为终点做一条射线

15,SceneprototyperequestRender 手动场景渲染,每调一次手动触发一次渲染

16,SceneprototypeforceRender 强制场景进行渲染

17,Sceneprototypepick 通过屏幕坐标拾取3d对象

18,CameraprototypedistanceToBoundingSphere 相机到椭球体的距离

19,CameraprototypeviewBoundingSphere 将相机看向球体中心

20,CameraprototypeflyToBoundingSphere 飞向球体中心

21,getRectangleCameraCoordinates 通过视图矩形获取相机位置

21,CameraprototypecomputeViewRectangle 返回相机在球体上的可视范围矩形

22,CesiumCartesian3lerp 根据两个点和插值数量进行插值

23QuaternionfromAxisAngle 沿某个轴旋转角度之后,返回新的位置,是一个四元数

24,获取视图范围 varRectangle =thisviewercameracomputeViewRectangle();

25,获取Zoom thisviewercameramoveEndaddEventListener(thisonMoveendMap);//监听地图移动完成事件onMoveendMap = () => {

const me =this;//获取当前相机高度let height = Mathceil(meviewercamerapositionCartographicheight);

let zoom = meheightToZoom(height);

26,Globeprototypepick 返回地球上相交的点

27,GlobeprototypepickWorldCoordinates 返回地球上相交点的坐标

28,CesiumsampleTerrainMostDetailed(terrainProvider, positions);根据地形求地形上点的高度

29,GlobeprototypegetHeight(cartographic)根据经纬度获取地球上的高度

30,new CesiumHeadingPitchRoll(MathPI, MathPI, MathPI);设置欧拉角 弧度

31,HeadingPitchRollfromQuaternion = function (quaternion, result) 从四元数转成欧拉角

32,HeadingPitchRollfromDegrees = function (heading, pitch, roll, result) 用经纬度生成欧拉角

33PlaneprojectPointOntoPlane = function (plane, point, result)点到平面的投影

34PlanegetPointDistance = function (plane, point)点到平面的距离

35TransformseastNorthUpToFixedFrame 传入一个世界坐标,以地球东-北-上方向为参考系生成一个矩阵

36TransformsnorthEastDownToFixedFrame 传入一个世界坐标,以地球北-东-下方向为参考系生成一个矩阵

37TransformsheadingPitchRollToFixedFrame(origin,headingPitchRoll) 传入一个坐标和欧拉角得到一个矩阵

38TransformsheadingPitchRollQuaternion(origin,headingPitchRoll) 传入一个坐标和欧拉角得到一个四元数

39TransformsfixedFrameToHeadingPitchRoll 传入一个矩阵得到欧拉角

40SceneTransformswgs84ToWindowCoordinates (scene, position, result) 将场景里的某个世界坐标位置转成屏幕坐标

41SceneTransformswgs84ToDrawingBufferCoordinates(scene, position, result) 将场景里的某个世界坐标位置转成换图形缓冲区坐标

42SceneTransformstransformWindowToDrawingBuffer(scene,windowPosition,result)将屏幕坐标转换成图形缓冲区坐标

43SceneTransformsclipToGLWindowCoordinates(viewport,position,result)将裁剪坐标转成窗口坐标

44SceneTransformsdrawingBufferToWgs84Coordinates(scene,drawingBufferPosition,depth,result)将缓冲区坐标转成世界坐标


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12841369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存