Mogre学习系列(3)基本概念Cameras, Lights, and Shadows

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1.Camera用来观察我们创建的对象,它的使用方法和组织方式有点类似SceneNode。基本上我们可以将其视为特殊的SceneNode。同样需要设置Position属性来确定方位。

 

2.如果我们想要设置Camera的渲染范围,也就是说某个物体在多近(远)的距离就看不见了,可以设置Camera.NearClipDistance或者Camera.FarClipDistance。

 

3.当有了Camera对象,我们如何告诉窗体使用哪个Camera?(因为我们可以在一个窗体中创建多个Camera对象)这个时侯我们需要Viewport对象。Viewport = this.RenderWindow.AddViewport(Camera)

 

4.当我们在屏幕上绘制了物体,也设定了观察Camera,此时我们还是不能看到物体,原因在于没有光。因此我们需要设定一些光源Light,来照亮物体。  

 

5.有了光源,当光线照在物体上的时候,就会差生阴影,我们也可以设定阴影的显示。例如:mgr.ShadowTechnique = ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE;

 

 参考代码:

 

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using MogreFramework;
using Mogre;

namespace Tutorial02
{
     static class Program
     {
         [STAThread]
         static void Main()
         {
             try
             {
                 MyOgreWindow win = new MyOgreWindow();
                 new SceneCreator(win);
                 win.Go();
             }
             catch (System.Runtime.InteropServices.SEHException)
             {
                 if (OgreException.IsThrown)
                     MessageBox.Show(OgreException.LastException.FullDescription, "An Ogre exception has occurred!");
                 else
                     throw;
             }
         }
     }

     class MyOgreWindow : OgreWindow
     {
         protected override void CreateCamera()
         {
             Camera = this.SceneManager.CreateCamera("PlayerCam");


             Camera.Position = new Vector3(0, 10, 500);
             Camera.LookAt(Vector3.ZERO);


             Camera.NearClipDistance = 5;
         }


        protected override void CreateViewport()
         {
             Viewport = this.RenderWindow.AddViewport(Camera);

             Viewport.BackgroundColour = ColourValue.Black;
             Camera.AspectRatio = (float)Viewport.ActualWidth / Viewport.ActualHeight;

       }
     }

     class SceneCreator
     {
         public SceneCreator(OgreWindow win)
         {
             win.SceneCreating += new OgreWindow.SceneEventHandler(SceneCreating);
         }

         void SceneCreating(OgreWindow win)
         {
             // Set the ambient light and shadow technique
             SceneManager mgr = win.SceneManager;
             mgr.SetShadowUseInfiniteFarPlane(false);
             mgr.AmbientLight = ColourValue.Black;
             mgr.ShadowTechnique = ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE;

             // Create a ninja
             Entity ent = mgr.CreateEntity("ninja", "ninja.mesh");
             ent.CastShadows = true;
             mgr.RootSceneNode.CreateChildSceneNode().AttachObject(ent);

             // Define a ground plane
             Plane plane = new Plane(Vector3.UNIT_Y, 0);
             MeshManager.Singleton.CreatePlane("ground", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
                 plane, 1500, 1500, 20, 20, true, 1, 5, 5, Vector3.UNIT_Z);

             // Create a ground plane
             ent = mgr.CreateEntity("GroundEntity", "ground");
             mgr.RootSceneNode.CreateChildSceneNode().AttachObject(ent);

             ent.SetMaterialName("Examples/Rockwall");
             ent.CastShadows = false;


            // Create the first light
             Light light;
             light = mgr.CreateLight("Light1");
             light.Type = Light.LightTypes.LT_POINT;
             light.Position = new Vector3(0, 150, 250);
             light.DiffuseColour = ColourValue.Red;
             light.SpecularColour = ColourValue.Red;

             // Create the second light
             light = mgr.CreateLight("Light2");
             light.Type = Light.LightTypes.LT_DIRECTIONAL;
             light.DiffuseColour = new ColourValue(.25f, .25f, 0);
             light.SpecularColour = new ColourValue(.25f, .25f, 0);
             light.Direction = new Vector3(0, -1, -1);

             // Create the third light
             light = mgr.CreateLight("Light3");
             light.Type = Light.LightTypes.LT_SPOTLIGHT;
             light.DiffuseColour = ColourValue.Blue;
             light.SpecularColour = ColourValue.Blue;
             light.Direction = new Vector3(-1, -1, 0);
             light.Position = new Vector3(300, 300, 0);
             light.SetSpotlightRange(new Degree(35), new Degree(50));
         }
     }
}

2026年最新深圳市公交、地铁线路及站点矢量数据.zip 数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息 立即下载

相关推荐

2026年最新上海市公交、地铁线路及站点矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

设备管理基于OEE数据的闲置富余设备识别系统:制造业设备利用率监控与预警方案设计

内容概要:本文档为鹏鼎EES项目第二阶段关于设备闲置与富余识别的需求设计方案,旨在通过自动化方式识别低利用率设备,减少资产浪费。系统基于OEE系统提供的设备近6个月时间稼动率数据,设定“闲置”(连续6个月稼动率为0%)和“富余”(6个月平均稼动率≤30%)的判断标准,每周一自动执行识别任务并生成记录。支持在系统中查看识别结果列表、筛选导出数据、发起闲置申请及删除记录(管理员权限)。同时,系统通过鼎加机器人按设备闲置/富余持续时长(7天、30天、90天、180天)逐级向上推送预警消息至维护人员、厂长、处长、经管等层级,推动问题处理。此外,若设备被判定为闲置但未提交闲置申请,系统将向维护人员和设备课长发送D+提醒。; 适合人群:系统设计人员、开发人员、测试人员、设备管理人员及项目实施相关人员;尤其适用于熟悉OEE系统、设备管理流程及企业信息化系统的专业人员;; 使用场景及目标:① 实现设备利用率的动态监控与闲置风险预警;② 支持企业优化设备资源配置,降低资产闲置成本;③ 推动设备闲置处理流程自动化与责任到人机制建立;④ 为后续设备处置、调配、报废等决策提供数据支撑;; 阅读建议:本文档为研发与实施阶段的核心指导文件,涉及系统逻辑、数据来源、权限控制与集成接口等关键内容,建议结合OEE数据对接情况、企业组织架构与设备管理流程协同研读,并关注阈值配置、提醒机制与状态联动等可配置项的实际业务适配性。

2026年最新海口市公交线路及站点矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

RK3568 生产写SN实战:基于 RKDevInfoWriteTool 的序列号烧录方案

RK3568 生产写SN实战:基于 RKDevInfoWriteTool 的序列号烧录方案

地方科技部门如何借助数智化平台提升科技项目评审效率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

科技园区如何精准评估和招引高质量的科创项目,提升产业集聚效应?.docx

科技园区如何精准评估和招引高质量的科创项目,提升产业集聚效应?

网络工程基于锐捷设备的等价路由配置与流量转发机制分析:实现多路径负载均衡及链路冗余设计

内容概要:本文档主要记录了一个网络实验的配置与分析过程,涉及多个锐捷路由器(Ruijie-RSR1至Ruijie-RSR4)和两台虚拟PC(VPC1、VPC2)的网络拓扑搭建与通信测试。文档展示了各设备的接口IP地址配置、静态路由设置以及VPC终端的IP配置,并通过抓包分析验证了VPC1与VPC2之间的通信路径。重点分析了数据包为何选择经过R2而非R3进行转发,揭示了等价多路径路由(ECMP)的工作机制,指出在默认基于流的负载分担模式下,相同源目IP的数据流会通过哈希算法固定选择一条路径,因此不会在多条等价路径间切换。; 适合人群:具备基本网络知识、正在学习路由与交换技术的网络工程学生或初级网络工程师。; 使用场景及目标:①理解静态路由与等价多路径路由(ECMP)的配置与应用;②掌握基于流的负载分担与逐包负载分担的区别及其对数据转发的影响;③通过实际抓包分析提升网络故障排查能力; 阅读建议:建议结合实验环境动手配置并使用抓包工具观察数据流向,深入理解ECMP在实际网络中的行为特点,注意区分不同负载分担模式带来的影响。

政府科技项目评审效率低、标准不统一如何提升?.docx

政府科技项目评审效率低、标准不统一如何提升?

2026年最新绍兴市公交线路矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

高校如何优化科研项目立项评审流程,降低资源错配风险?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

科技园区如何精准招引优质科创项目?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

电子工程PCB设计规范指南:上海贝尔SRD部门布局布线及后处理工艺全流程技术标准

【电子工程】PCB设计规范指南:上海贝尔SRD部门布局布线及后处理工艺全流程技术标准

科技服务机构如何借助数智化服务提升项目咨询服务价值?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

【Python编程】Python关键字参数详解

内容概要:本文详细讲解了Python中关键字参数的概念及其多种应用方式。首先介绍了关键字参数的基本用法,即在函数调用时通过参数名传递值,提升代码可读性和灵活性。接着阐述了函数定义中的默认参数,允许参数具有默认值,但必须置于非默认参数之后。文章还说明了“强制关键字参数”的机制,通过在参数列表中使用单个星号(*)来规定后续参数必须以关键字形式传入。最后介绍了可变关键字参数(**kwargs),用于接收任意数量的额外关键字参数并将其封装为字典,便于处理不确定参数场景。; 适合人群:具备Python基础语法知识,正在深入学习函数参数机制的初学者或中级开发者;适用于希望提升代码规范性与函数设计能力的编程学习者。; 使用场景及目标:①理解并正确使用关键字参数优化函数调用;②掌握默认参数、强制关键字参数和**kwargs的实际应用场景;③构建更灵活、可扩展的函数接口设计能力; 阅读建议:建议结合代码示例动手实践每一种参数类型的用法,特别注意参数定义的顺序规则,并在实际项目中尝试应用强制关键字参数和**kwargs来提高函数的健壮性与可维护性。

2026年最新台州市公交线路及站点矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

政府如何提升科技创新项目筛选的精准度与效率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

dvwa-security-lab(DVWA漏洞靶场实战项目)

DVWA漏洞靶场实战项目

国央企如何通过数智化评估体系强化科技创新把控力?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: Mogre学习系列(2)基本概念The SceneNode, Entity, and SceneManager constructs
下一篇: Mogre学习系列(4)Frame Listeners 和Windows.Forms Input
tanliyoung
博客等级 码龄20年 44粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值