首页 > 其他 > 详细

三维渲染引擎设计与实践(六)

时间:2017-07-26 01:16:36      阅读:341      评论:0      收藏:0      [点我收藏+]

6.2纹理与纹理属性

6.2.1纹理的实现方法

纹理是一个数组的概念,其中每一个数据(RGB颜色以及Alpha值,或者其他系统及用户定义的类型)称作一个纹素(texel)。

每一个映射通道称为一个纹理单元。

对于场景中的节点或几何体应用纹理属性时,通常需要预先指定每个顶点的纹理坐标,以便将图像正确贴至物体上。只有几何体可以设置纹理坐标,因此在设置节点的纹理之前,必须得到该节点子树中所有的几何体对象并设置他们的纹理坐标。 geom->setCoordArray()

Texture作为各种纹理表达方式的基类,保存了一些通用的属性和方法,包括纹理的滤波方式(Fliter)、边界处的截取方式(Clamp)、明细层次(Mipmaps)

记录二维图像源的image类。

6.2.2纹理的分类

二维纹理,Texture2D;一维纹理,Texture1D;三维纹理,Texture3D可以理解为多层二维纹理所构成的一个立方体,而其中每一个纹素此时成为称为一个体素(voxel)。立方图纹理主要用于反射贴图或环境贴图的表达。

场景中的纹理设置;纹理的明细层次,

6.3属性的实现与访问

6.3.1将属性应用到场景

渲染属性(StateAttribute),包括纹理(Texture)以及其他OpenGL属性,其实现的关键均在于StateAttribute::apply()

6.3.2渲染状态集回调

类似于节点和可绘制体的回调机制,osg的渲染状态集也有更新和事件的回调结构,用于场景每一帧更新的过程中,或者产生人机交互事件时,自动调用用户子自定义的回调。osg::StateSet  setUpdateCallback           setEventCallback

6.4OSG着色语言

GLSL采用类似C语言的词法和语法格式,可编程图形处理器,顶点着色器、片元着色器和几何着色器。

顶点着色器可以用于替代顶点和法线变换、纹理坐标生成和变换、光照以及材质应用这些传统的管线命令;片元着色器用于替代纹理应用、雾化和像素汇总的工作;几何着色器则可以在图元装配过程中重新生成新的图元。

program类,是stateattribute的派生类,设置到一个节点或可绘制物体上,从而将着色器绑定到制定的场景对象。

shawder类,封装了顶点着色器、片元着色器和几何着色器的代码加载和编译功能。

uniform类,是着色器一致变量的接口类,一致变量使用户程序与着色器的主要交互接口。

 

7.1场景的观察与变换

(1)模型视点变换。

经过模型视点变换后,即可认为场景从世界坐标系转变到了相机坐标系(view coordinate system 眼坐标系)。nuv为vcs坐标系中的三个分量。

(2)投影变换

意味着之前已经变换到相机坐标系vcs的场景再次变换到投影坐标系。格式化设备坐标系(normalized device coordinate system NDCS)

(3)视口变换

是将投影变换得到的结果反映到指定的屏幕窗口上。窗口坐标系(Device Coordinate System,DCS设备坐标系)。

7.1.2相机节点

模型变换矩阵,由局部对象坐标系变为世界坐标系 Mmodel

视点变换矩阵又称观察矩阵,由世界坐标系变换到相机坐标系Mview

投影矩阵和窗口矩阵,合并为MVPW矩阵,实现三维场景向二维平面的映射,  

相机节点osg::Camera派生自Transforml类,  保存了大量相机设置参数,例如视口、投影矩形、背景颜色等

camera->addChild(node)

7.2图形设备接口

camera的setGraphicsContext()函数的工作是设置相机对应的图形设备对象。

7.2.2窗口与像素缓存

7.2.3渲染到纹理  P192

 

三维渲染引擎设计与实践(六)

原文:http://www.cnblogs.com/hanmolabi/p/7237201.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!