• 【转贴】谈论 Direct3D10特性预览


    引用
    Direct3D10特性预览
    将我在GameResBlog的老文章重新贴回来,发现写的还是很有味道,嘿嘿~~
     
    刚拿到DirectX Dec2005 SDK,发现竟然有D3D10的文档和例子,速研究了一下,以下只是个人的读书笔记,仅作参考

    1.去掉了固定管线
    文档里列出了用DX10特性模拟的一些固定管线的操作,MS那么大度把DX都开源了(^O^)。

    2.去掉了以前版本DX的设备能力检查(CAPS)
    为DX10和Windows Vista提供的显示硬件必须满足DX10的所有硬件特性。这样对于开发者就比较可以放心的使用各种硬件特性了,很类似Console平台
    的开发。

    3.状态对象(State Object)
    "从100多个渲染状态中解脱出来吧!"
    D3D10对渲染状态这个概念进行淡化,一方面使用全Shader化的架构使得状态的前后设置和互相影响对渲染成功率降低到最少
    另外对API架构也更为简洁,另一方面对一些关键渲染状态进行封装和分类。主要分类有:

    Input Layout Object 输入层对象
    这个东西很类似D3D9里的顶点声明,也就是对用户输入数据进行整合和系统化

    Rasterizer Object 光栅化对象
    这部分主要控制光栅器的行为:填充模式(FILL_MODE),剔除模式(CULL_MODE),多采样,DepthBias等等

    DepthStencil Object 深度缓冲对象
    主要控制深度缓冲的行为,像Z-buffer Enable之类的

    Blend Object 混合对象
    设置象素混合的方法,类似AlphaBlend SrcAlpha ,DestAlpha等等

    Sampler Object 采样器对象
    设置纹理采样状态,包括过滤器和MipMap

    4.新的资源访问模式和资源视图(View)概念
    如果对比D3D9的Shader使用代码和D3D10的类似代码会发现一个不同。
    D3D9 Shader需要对纹理进行操作时,需要将纹理设置到Shader就可以了,而D3D10里没有那么简单,设置前必须将
    各种资源整合后为资源创建一个视图,再提交给Shader访问。这种操作在环境贴图里是很有好处的。对于CubeMap的6张纹理
    就可以采用一个视图设置到设备,而自己要访问每张贴图只要轻松访问视图就可以了,也就是说把资源规整和集成化。

    5.新的可编程图形层(Stage)-几何Shader(Geometry Shader)
    原来的VS和PS只是对逐个顶点或象素进行处理,而新的GS可以对每个顶点或象素的临近顶点设置Shader。也就是可以对批量几何进行处理
    GS的用途有:
    点精灵
    动态粒子系统
    皮毛系统
    卷积阴影
    单Pass渲染到球形贴图
    逐多边形材质交换
    逐多边形材质设置

    6.设备的创建要求对ViewPort进行设置
    D3D9里无需对ViewPort进行设置就可以进行渲染,而且默认的RenderTarget就是后备缓冲
    而在D3D10里,这个过程变得更为自主化。取出后备缓冲的格式,将RenderTarget设置为屏幕
    这让人感到D3D10设计更趋向于成熟的引擎设计。

    7.流输出层(Stream Output State)
    这个层的功能是将VS和GS处理完成的数据输出给用户,由用户进行处理后再反馈给管线继续处理

    8.多边形拓扑结构从绘制代码分离
    现在可以单独设置拓扑结构
    g_pd3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
    和使用Draw函数绘制了,很类似OpenGL


    9.严格的设备对象创建时间验证
    这里的设备对象就是从设备创建出来的资源。为了减少CPU占用,D3D10重新设计了硬件资源调用调度,所有的设备对象都用面向对象的方法被设备
    管理。这种设计方法避免了在渲染期的资源创建操作。

    10.去掉BeginScene和EndScene
    这个对于图形API确实多余


    Dec2005 sdk里提供的文档让人很快想到这只是一个过渡版本
    在DXUT的Mesh.Create函数中可以看到一个很有趣的现象:
    创建D3D9对象,使用D3DX9里的载入X模型文件的函数载入X文件
    将D3D9的模型数据转成D3D10的类型。这样做无非是在告诉我们一个
    这样的信息,D3D10很有可能提供一种新的模型格式来作为研究使用
    。Vista的图形系统Avalon从一些视频上分析,使用了大量的XML,所以
    新的模型格式很有可能使用XML,并且X格式的解析接口确实不方便。而
    XML的分析器可以由第三方提供。使得更多的研究人员能更方便的使用
    这种新格式。

    顺便提供一些缩写对应的含义,这些在一些函数前缀会出现
    IA-Input Assembler State
    SO-Stream Output State
    OM-Output Merger State
    VS-Vertex Shader
    PS-Pixel Shader
    GS-Geometry Shader

    Powered by Davy.xu
    msn:sunicdavy@sina.com



    李锦俊 2006-11-18 09:14 发表评论
  • 相关阅读:
    磁盘缓存
    算法与追MM(转)
    人人都能上清华(转)
    软件加密技术和注册机制原理攻略(转)
    计算二重定积分
    C++运算符重载
    STL中list的用法
    累了??放松一下,看几张关于程序员的几张搞笑图片
    解决来QQ消息后歌曲音量降低问题
    搞ACM的你伤不起(转)
  • 原文地址:https://www.cnblogs.com/flying_bat/p/877259.html
Copyright © 2020-2023  润新知