场景元素:平面、光源、阴影、摄像机、视口。

Plane(平面): 要想理解Plane首先从Plane是如何构造开始学习。

在几何学中,Plane是一个无限延伸没有界限的面,但是在Ogre中Plane是有大小、尺寸的。

Plane作为Ogre中的一个模型,它虽然是2D的,但渲染时我们需要以3D的方式进行渲染,因为在Ogre中场景是3D形式的。就好像我们现实生活中的窗帘,虽然它只是一个面,但是当我们从不同的角度观察时,它却具有的3D的视觉效果。

Normal(法线),在3D图像学中它指法向量(或平面法向量)。它是垂直于平面的向量,长度通常是1。

在3D渲染中,模型的常见描述方式是三角形。可以拼接n个三角形来组合成想要的图形。而这些三角形一般指”切片”,它们是由组合(xsegments,ysegments)确定的。举例说明切片如何划分的:(通过设置摄像机进行线框显示可直观查看效果,在本节介绍摄像机章节有代码)

创建平面:

Ogre::Plane plane (朝向,位置);

createPlane(

const String& name, const String& groupName,const Plane& plane,

Realwidth, Real height,

intxsegments = 1, int ysegments = 1,

bool normals = true, unsigned short numTexCoordSets = 1,

RealuTile = 1.0f, Real vTile = 1.0f, const Vector3& upVector=Vector3::UNIT_Y,

HardwareBuffer::Usage vertexBufferUsage =HardwareBuffer::HBU_STATIC_WRITE_ONLY,

HardwareBuffer::Usage indexBufferUsage =HardwareBuffer::HBU_STATIC_WRITE_ONLY,

bool vertexShadowBuffer = true, bool indexShadowBuffer =true);

参数说明:width,height: 平面的尺寸

Xsegments,ysegments:切片划分

normals:是否法向量是否被计算

shortnumTexCoordsets: 需要多少个纹理坐标系,当我们使用超过1个表面纹理时,变得有用。

uTile,vTile:纹理平铺平面的频率,一般是0~1,(0,0)表示纹理的左上角,(1,1)表示纹理的右上角。

//留空间,以后添加此处详细说明。

upVector:纹理朝向。

其他几项暂不做详细说明。

Light(光源):

三种:点光源(LT_POINT)、聚光灯(LT_SPOTLIGHT)、方向光源(LT_DIRECTIONAL)。

通用方法:

Ogre::Light *light = mSceneMgr->createLight(“name”);

light->setType(Ogre::Light::LT_??);//设置光源类型

light->setDiffuseColour(颜色);

各自特殊:

点光源:无

聚光灯:设置朝向:setDirection(Vector3);

设置内外角度:setSpotlightInnerAngle(Dgree)\setSpotlightOuterAngle(Degree);

下降(falloff)参数:距离越远,光线越暗。

setSpotlightFalloff(float);

方向光源:像太阳一样,将周围物体全部照亮,没有衰减半径,也没用别的特性。

阴影(shadow):

mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);

对于阴影的渲染,Ogre3D支持很多种,我们才用的是当渲染场景时,计算所有光源的效果积累,最后得到最终效果。这种技术效果很好,但代价也很高昂,如果对阴影处理感兴趣,可以上网查找相关详细资源介绍,这里就不探讨阴影的详细工作原理了。

摄像机(Camera):

它是在一个确切的位置捕捉我们的一部分场景。但是目前我们一直在使用ExampleApplication中默认的摄像机(mCamera)。现在我们创建自己的摄像机:

void createCamera()//你可以通过ExampleApplication中此函数的定义,查看默认摄像机mCamera是如何定义的。

{

mCamera = mSceneMgr->createCamera("name");

mCamera->setPosition(…);

mCamera->lookAt(…);//设置摄像机的朝向

mCamera->setNearClipDistance(5);//设置视锥

mCamera->setPolygonMode(Ogre::PM_WIREFRAME);//设置为线框显示

}

在3D场景中,并非所有的场景都会被渲染,场景管理器(SceneManager)只是渲染在视锥内部的场景。下图中Near 与 Far之间的区域为视锥。

视口(ViewPort): 是一个被用来渲染的2D表面,它就像一个有背景的桌面一样,需要我们在其上进行渲染操作。

创建视口:我们写的创建视口的代码,必须要添加到createViewport()中去。

Void createViewport()

{

Ogre::Viewport* vp =mWindow->addViewport(mCamera);

//…

}

设置背景颜色:setBackgroundColor(颜色);

设置纵宽比:setAspectRatio();//纵横比:窗口宽度/窗口高度

代码:

#include "ExampleApplication.h"

using namespace Ogre;
class example1 : public ExampleApplication
{
protected:
void createScene()
{
//Plane
Plane plane(Vector3::UNIT_Y, 0);
Ogre::MeshManager::getSingleton().createPlane("plane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,plane,
1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z);
Entity *entplane = mSceneMgr->createEntity("LightPlaneEntity","plane");
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entplane);
entplane->setMaterialName("Examples/BeachStones");
//Light
SceneNode *node = mSceneMgr->createSceneNode("Node1");
mSceneMgr->getRootSceneNode()->addChild(node);
Light *light1 = mSceneMgr->createLight("Light1");
light1->setType(Ogre::Light::LT_DIRECTIONAL);
light1->setPosition(0,0,-20);
light1->setDirection(Ogre::Vector3(0,-1,1));
light1->setDiffuseColour(Ogre::ColourValue::White);
node->attachObject(light1);
//add a entity
Entity *ent = mSceneMgr->createEntity("MyEntity1","Sinbad.mesh");
SceneNode *nodeent =node->createChildSceneNode("Node2");
nodeent->setPosition(0,5,0);
nodeent->attachObject(ent);
//Shadow
mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
}
//创建摄像机
void createCamera()
{
mCamera = mSceneMgr->createCamera("MyCamera1");
mCamera->setPosition(0,100,200);
mCamera->lookAt(0,0,0);//设置摄像机的朝向
mCamera->setNearClipDistance(5);//设置视锥
mCamera->setPolygonMode(Ogre::PM_WIREFRAME);//设置为线框显示
}
//创建视口
void createViewports()
{
Viewport* vp = mWindow->addViewport(mCamera);
//set the background color
vp->setBackgroundColour(ColourValue(0.0f,0.0f,1.0f));
//set the aspect ratio
mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}

public:
example1(){}
~example1(){}
};

int main()
{
example1 ex1;
ex1.go();
return 0;
}

Ogre_初学指导_5_场景元素:平面、光源、阴影、摄像机、视口相关推荐

  1. 初学者必读VRay 2.0光源设置(2)——使用平面光源

    教程出处: http://www.tlvi.net/Ms/Show_258.html "VR-光源"灯光类型中的平面光源是一种较为常用的光源类型.该光源以一个平面区域的方式显示,以 ...

  2. 酷炫十足!3D立体元素平面版式设计作品

    立体构成是由二维平面形象进入三维立体空间的构成表现,两者既有联系又有区别.联系的是:它们都是一种艺术训练,引导了解造型观念,训练抽象构成能力,培养审美观,接受严格的纪律训练:区别的是:立体构成是三维度 ...

  3. unix黑客初学指导(转)

    unix黑客初学指导(转) 首先说一下写这篇文章的目的,近来越来越多的人问我诸如"我如何能够黑了hotmail"或者aol等等一些其它的愚蠢的问题.这篇文章将确实的向你解释 关于& ...

  4. Unity动画:场景元素交互IK及制作要点

    动画插件 反向动力学 IK,反向动力学与FK正向动力学对应,正向运动学就是根骨骼带动节点骨骼运动.而反向运动学就是反过来,由子节点带动父节点运动,实现牵一发而动全身的动画效果. 动画是在导入的FK动画 ...

  5. Python随机选择Maya场景元素

    之前在公司参与的一个与国外合作的项目中,有一景需要动态.随机地选取场景中的一些物体,同时显示指定材质,当时是用Houdini的节点+Hscript 解决的: 今天用简洁优雅的Python在Maya中写 ...

  6. 网站初学笔记3-HTML实用元素5

    转载于:https://www.cnblogs.com/gui8617788/p/3927416.html

  7. 网站初学笔记3-HTML实用元素3

    HTML-复选框 <html> <body> <form> 我喜欢自行车: <input type="checkbox" name=&qu ...

  8. 【Unity 手写PBR】补充:多光源 阴影 视差 自发光

    写在前面 [Unity 手写PBR]Build-in管线:实现直接光部分 [Unity 手写PBR]Build-in管线:实现间接光部分 这里再快速补充一下剩下的部分,多光源.阴影.视差贴图应用和自发 ...

  9. AE/PR/OFX插件-Mocha Pro 2023 v10.0.2 Win 专业平面/三维跟踪摄像机反求插件

    插件简介 Mocha Pro是用于VFX视觉特效和后期制作强大的平面跟踪工具,这里提供的是AE和PR的插件版.具有GPU加速的跟踪和对象去除功能,具有边缘捕捉功能的高级遮罩,稳定功能,镜头校准,3D摄 ...

最新文章

  1. python 命令行参数-Python 命令行参数解析
  2. [深入浅出Windows 10]不同平台设备的适配
  3. 没有日志,只有MDF文件如何恢复数据库(转)[
  4. Testing and Test-First Programming
  5. JavaScript产生一个n到m之间的随机数
  6. form标签的action之前 加密_金士顿KC2000自加密功能测试
  7. linux signal 处理
  8. JAVA实现在线聊天室(层层递进)
  9. android学习日记15--WebView(网络视图)
  10. python地址多少位_Python获取IP地址对应的地理位置信息!
  11. [渝粤教育] 西南科技大学 中国古代文学〔1〕 在线考试复习资料
  12. 斐讯k1潘多拉专版固件_斐讯K1、K2路由器刷机Breed/华硕老毛子、梅林、潘多拉/openwrt固件...
  13. 如何用python做比分网_python爬虫足球比分-yltg888
  14. 重学JS(《JavaScript高级程序设计》笔记) - HTML中的JS
  15. 史诗级聊天AI ChatGPT来啦!
  16. 设计师必备的设计类导航网站
  17. 梯度下降算法_Adam-一种随机优化算法
  18. 制造业MES生产管理系统程序代码 MES源码
  19. 如果有一天改行不再做IT了,你会做什么事情
  20. 生命不息折腾不止 ---- 开发编辑器第二话

热门文章

  1. 病毒性的抱团忽悠:互联网思维--TOMsInsight 2014.08.01
  2. 2022-2028年中国维生素D3行业市场现状调研及投资决策建议报告
  3. 惠普打印机介质不匹配_惠普打印机常见故障及处理方式
  4. 普源DS1104Z技术指标
  5. jdk.......
  6. 华硕网吧服务器型号,网吧应用新平台 华硕P7F-C-SAS引领网吧服务器市场
  7. The type org.springframework.context.ConfigurableApplicationContext cannot be resolved. It is indire
  8. 简单几行代码,python制作美图秀秀软件!
  9. Lustre安装-Lustre2.10.0 Client安装-CentOS/RHEL(原创)
  10. oracle计数器重制,python – redis:每天重置计数器