zoukankan      html  css  js  c++  java
  • 三维渲染引擎设计与实践(六)

    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

  • 相关阅读:
    【2021-08-09】问题还需一点一点去改正
    【2021-08-08】连岳摘抄
    【2021-08-07】请教帖
    21春助教总结
    实践总结+技术博客评分
    来吧 ,来吧 自己搭建一个erp 系统
    博客索引
    「CCNU21暑期第六次周赛」
    「CCNU21暑期第五次周赛」
    「图论」连通性问题
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7237201.html
Copyright © 2011-2022 走看看