CityMaker学习教程08 一个示例,创建漫游路径
来源:互联网 发布:淘宝优站9.9 编辑:程序博客网 时间:2024/06/08 06:40
1、在看完CS代码后可以自己写程序了,我刚写了一个由线创建动态路径的代码,给大家参考。
2、配置完场景,加载完FDB。
3、代码片段
_axcontrol.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; crs = (new CRSFactory()).CreateFromWKT(_axcontrol.axRenderControl1.GetCurrentCrsWKT()) as ISpatialCRS; if (crs.CrsType == gviCoordinateReferenceSystemType.gviCrsGeographic) TYPE = gviObjectType.gviObjectTerrain; else if (crs.CrsType == gviCoordinateReferenceSystemType.gviCrsProject || crs.CrsType == gviCoordinateReferenceSystemType.gviCrsUnknown) TYPE = gviObjectType.gviObjectReferencePlane; IGeometryFactory _geoFactory = new GeometryFactory(); point = _geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); myline = _geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; myline.SpatialCRS = crs; rootId = _axcontrol.axRenderControl1.ObjectManager.GetProjectTree().RootID; _axcontrol.axRenderControl1.RcMouseClickSelect += AxRenderControl1_RcMouseClickSelect; _axcontrol.axRenderControl1.RcRButtonUp += AxRenderControl1_RcRButtonUp;
4、上面是创建按钮里的代码,还有2个函数,一个是拾取函数代码,一个是右键结束代码
//这个是鼠标点击拾取事件 point.SetCoords(e.intersectPoint.X, e.intersectPoint.Y, e.intersectPoint.Z, 0, 0); myline.AppendPoint(point); ICurveSymbol cs = new CurveSymbol(); cs.Color = 0xffff0000; cs.Width = 1; _axcontrol.axRenderControl1.ObjectManager.CreateRenderPolyline(myline, cs, rootId);
//这里是右键结束_axcontrol.axRenderControl1.RcMouseClickSelect -= AxRenderControl1_RcMouseClickSelect; _axcontrol.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; //从线创建动态对象 ICameraTour tour = null; tour = _axcontrol.axRenderControl1.ObjectManager.CreateCameraTour(rootId); dynamicObject = _axcontrol.axRenderControl1.ObjectManager.CreateDynamicObject(rootId); dynamicObject.CrsWKT = tour.CrsWKT; for (int i = 0; i <myline.PointCount-1; i++) { IVector3 vector0 = new Vector3(),vector1=new Vector3(); vector0.Set(myline.GetPoint(i).X, myline.GetPoint(i).Y, myline.GetPoint(i).Z); vector1.Set(myline.GetPoint(i+1).X, myline.GetPoint(i+1).Y, myline.GetPoint(i+1).Z); tour.AddWaypoint(vector0, _axcontrol.axRenderControl1.Camera.GetAimingAngles(vector0, vector1), 0, gviCameraTourMode.gviCameraTourLinear); dynamicObject.AddWaypoint(vector0, 10); } IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = AppDomain.CurrentDomain.BaseDirectory + "Character\\QiYeYuanGong.X"; IMatrix matrix = new Matrix(); matrix.MakeIdentity(); matrix.SetTranslate(myline.GetPoint(0).Position); mp.FromMatrix(matrix); skinMesh = _axcontrol.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMesh == null) { MessageBox.Show("骨骼动画创建失败!"); return false; } skinMesh.Loop = true; skinMesh.Play(); skinMesh.MaxVisibleDistance = 1000; skinMesh.ViewingDistance = 10; IMotionable m = skinMesh as IMotionable; position.Set(0, 0, 0); m.Bind2(dynamicObject, position, 0, 0, 0); dynamicObject.Play(); _axcontrol.axRenderControl1.Camera.FlyToObject(skinMesh.Guid, gviActionCode.gviActionFollowBehind); _axcontrol.axRenderControl1.RcRButtonUp -= AxRenderControl1_RcRButtonUp; return false;
5、用到的变量
private System.Guid rootId = new System.Guid(); private ISpatialCRS crs = null; private gviObjectType TYPE = gviObjectType.gviObjectNone; IPolyline myline = null; private IVector3 position = new Vector3(); private IEulerAngle angle = new EulerAngle(); IPoint point = null; private IDynamicObject dynamicObject = null; private ISkinnedMesh skinMesh = null;
6、实现效果,绘制完自动跟随执行巡航
如需支持,请联系MrSun
sunhaihong@gvitech.com
1 0
- CityMaker学习教程08 一个示例,创建漫游路径
- CityMaker学习教程09 一个示例,多窗体,画中画,多屏幕显示
- CityMaker学习教程07 示例代码的使用CSharp
- CityMaker学习教程10 示例代码的使用Javascript
- CityMaker学习教程11 创建和移动标签
- CityMaker学习教程12 osg模型的创建
- CityMaker学习教程14 水面图层的创建
- CityMaker学习教程15 一个免费的js功能框架
- CityMaker学习教程01 模块说明
- CityMaker学习教程02 软件的授权
- CityMaker学习教程03 数据的导入
- CityMaker学习教程05 模型导入
- CityMaker学习教程06 数据的发布
- CityMaker学习教程04 地形和影像的导入
- CityMaker学习教程13 osg模型的移动
- citymaker学习资源
- opengl漫游模型示例
- mediastreamer2学习之----创建一个示例音频graph
- popupwindow和dialog监听返回键
- *Cannot delete or update a parent row: a foreign key constraint fails ... /ConstraintViolationExcept
- 排序之直接插入排序和折半插入排序
- redis之redis-trib集群管理
- Linux下安装MYSQL (三、设置初始密码 )
- CityMaker学习教程08 一个示例,创建漫游路径
- MyBatis-搭建MyBatis开发环境二(MyEclipse版)
- Linux:yum安装软件工具
- Android网络基础之HttpClient与HttpURLConnection
- ViewState EnableViewState 禁用与使用心得
- 已读博客文章
- Linux工具篇---make和makefile
- 第十三周项目2-动物这样叫(3)
- 基因数据处理40之bedtools的安装和使用