法二:获得ModelMatrix


Everything you do, matrix multiplication included, looks good, except this : glGetFloatv(GL_MODELVIEW_MATRIX, mvMatrix), which returns ViewMatrix * ModelMatrix. Sadly, this is old-school OpenGL, and there is no mean to only get the model matrix. 

Workaround : loadIdentity, translate, rotate, getfloat (now you have ModelMatrix), loadIdentity, gluLookAt, translate, rotate (now opengl is happy with its modelviewmatrix)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium中的ModelMatrix是一个4x4的矩阵,用于描述模型的位置、旋转和缩放。计算ModelMatrix需要考虑模型的初始位置、旋转和缩放,并考虑到模型在之后可能发生的运动和变化。 以下是一个简单的计算ModelMatrix的示例代码: ``` var position = new Cesium.Cartesian3(x, y, z); // 模型初始位置 var orientation = Cesium.Transforms.headingPitchRollQuaternion( // 模型初始旋转 new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(heading), Cesium.Math.toRadians(pitch), Cesium.Math.toRadians(roll))); var scale = new Cesium.Cartesian3(scaleX, scaleY, scaleZ); // 模型初始缩放 var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position); // 将模型从地心坐标系转换到模型坐标系 Cesium.Matrix4.multiply(modelMatrix, Cesium.Matrix4.fromQuaternion(orientation), modelMatrix); // 旋转模型 Cesium.Matrix4.multiply(modelMatrix, Cesium.Matrix4.fromScale(scale), modelMatrix); // 缩放模型 ``` 在这个示例中,我们首先定义了模型的初始位置、旋转和缩放。然后,我们使用Cesium的Transforms库中的eastNorthUpToFixedFrame函数将模型从地心坐标系转换到模型坐标系。接下来,我们分别使用Cesium的Matrix4库中的fromQuaternion和fromScale函数对模型进行旋转和缩放。最后,我们使用Cesium的Matrix4库中的multiply函数将这些变换矩阵相乘,得到最终的ModelMatrix。 需要注意的是,计算ModelMatrix的具体方法可能因为应用场景的不同而有所不同。例如,在Cesium中,如果需要将模型固定在地面上,则可以使用Cesium的heightReference属性来控制模型的高度。如果需要将模型随着时间变化而运动,则可以使用Cesium的动画库来控制模型的位置和旋转。因此,在实际应用中,需要根据具体情况选择合适的方法来计算ModelMatrix
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值