新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 深度测试与alpha混合 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 17230 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 深度测试与alpha混合 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 

    深度测试与alpha混合(4)
    材质alpha

    顶点alpha是没有使用光照和材质的情况,如果对场景内的物体添加光照和材质而没有添加纹理时,顶点alpha值取决于材质属性中漫反射颜色的alpha系数和灯光颜色中的alpha系数,顶点alpha值是根据光照计算得到的。顶点光照计算是分别针对红、绿、蓝和alpha进行的,其中alpha光照计算的结果就是顶点的alpha值。有了顶点的alpha值就可根据着色模式计算出每个像素的alpha值,第一个示例程序就是材质alpha的例子。

    纹理alpha

    当对物体表面使用了纹理之后,像素的alpha值就是纹理alpha混合之后的值,所以这又取决于纹理的alpha混合方法,纹理alpha混合方法决定了纹理alpha混合之后的alpha值是取自材质,还是取自纹理,或者取自二者的某种运算。像素alpha值的具体计算过程是这样的,首先得到顶点alpha值,顶点alpha值可能是直接指定的,也可能是光照计算得到,然后根据着色模式对顶点alpha值进行插值,得到的结果再根据纹理alpha混合方法和纹理采样得到的alpha值进行指定的运算,得到最终每个像素的alpha值。

    示例程序中将一幅纹理应用到一个矩形表面,其中纹理alpha混合的设置如下:

    g_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);g_device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);g_device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
    D3DTOP_MODULATE
    Multiply the components of the arguments.
    SRGBA = Arg1 x Arg2

    在示例程序中将矩形4个顶点的颜色值设置为0xFFFFFFFF,其alpha成分设置为ff,即alpha值为1.0f,所以纹理alpha混合的最终结果就是取纹理的alpha值。

    sCustomVertex vertices[] ={ { -3,   -3,  0.0f,   0xffffffff,  0.0f, 1.0f}, { -3,    3,  0.0f,   0xffffffff,  0.0f, 0.0f},  {  3,   -3,  0.0f,   0xffffffff,  1.0f, 1.0f},  {  3,    3,  0.0f,   0xffffffff,  1.0f, 0.0f}}
    示例程序在一个矩形表面贴了一颗树的纹理,在树的纹理中,没有树叶和树枝的地方alpha值为0,即完全透明;有树叶和树枝的地方alpha值为1,即完全不透明。所以通过alpha混合后,渲染的结果就像是一棵真的树。

    按此在新窗口浏览图片

    按下数字键"1",启用纹理alpha混合。

    按此在新窗口浏览图片

    按下数字键"0",禁用纹理alpha混合。

    按此在新窗口浏览图片

    将顶点alpha由ff改为88后启用纹理混合的效果,可以看出纹理的颜色变暗了。

    sCustomVertex vertices[] =    { { -3,   -3,  0.0f,   0x88ffffff,  0.0f, 1.0f}, { -3,    3,  0.0f,   0x88ffffff,  0.0f, 0.0f},  {  3,   -3,  0.0f,   0x88ffffff,  1.0f, 1.0f},  {  3,    3,  0.0f,   0x88ffffff,  1.0f, 0.0f}    };

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/4/27 10:18:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/20 14:16:33

    本主题贴数9,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  深度测试与alpha混合(5638字) - 卷积内核,2009年3月9日
        回复:  [B]深度测试与alpha混合(5)[/B]透过那些透明度非常高的物体看其他物体,例如透过几乎完..(8947字) - 卷积内核,2009年4月27日
        回复:  源程序: #include <d3dx9.h>#pragma warning(disabl..(6331字) - 卷积内核,2009年4月27日
        回复:  [B]深度测试与alpha混合(4)[/B][B]材质alpha[/B]顶点alpha是没有..(2490字) - 卷积内核,2009年4月27日
        回复:  源程序:#include <d3dx9.h>#pragma warning(disabl..(6950字) - 卷积内核,2009年4月27日
        回复:  深度测试与alpha混合(3) alpha源混合系数通常设置为D3DBLEND_SRCALPHA..(1183字) - 卷积内核,2009年4月27日
        回复:  [B]示例程序:[/B]该示例程序模拟了直升飞机螺旋桨的半透明效果。在程序的初始化阶段,载入H..(9414字) - 卷积内核,2009年3月9日
        回复:  深度测试与alpha混合(2) 前面的一些例子中,已经遇到了alpha值的概念,如结构体D3DC..(7799字) - 卷积内核,2009年3月9日
        回复:  [B]示例程序[/B]该示例程序绘制了一个矩形和一个坦克模型,其中先绘制矩形,再绘制坦克模型,..(8669字) - 卷积内核,2009年3月9日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms