游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2649|回复: 3

关于设置子实体材质的问题,请赐教。

[复制链接]

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2009-4-4 13:33:00 | 显示全部楼层 |阅读模式
关于设置子实体材质的问题,请赐教。

在Ogre的第二个DEMO:Cel Shading中遇到如下困惑,请赐教:

该程序中有如下代码:
        // skin
        sub = ent->getSubEntity(1);
        sub->setMaterialName("Examples/CelShading");//使用一个材质名称设置子实体的材质。
        sub->setCustomParameter(CUSTOM_SHININESS, Vector4(10.0f, 0.0f, 0.0f, 0.0f));//设置自发光。
        sub->setCustomParameter(CUSTOM_DIFFUSE, Vector4(0.0f, 0.5f, 0.0f, 1.0f));//设置漫反射光。
        sub->setCustomParameter(CUSTOM_SPECULAR, Vector4(0.3f, 0.5f, 0.3f, 1.0f));//设置镜面反射光。

代码中关于CUSTOM_SHININESS、CUSTOM_DIFFUSE、CUSTOM_SPECULAR定义如下:
// Custom parameter bindings
#define CUSTOM_SHININESS 1
#define CUSTOM_DIFFUSE 2
#define CUSTOM_SPECULAR 3

我的问题:
1、在以上代码的注释说明部分是我对函数功能的理解,不知我的理解是否正确。
2、setMaterialName()函数形参是一个字符串型对象,请问这个字符串与材质文件的映射关系是怎么样的?这个字符串即非文件名,也非纹理名称故产生了此困惑。
3、setCustomParameter()函数的用法看不明白,请问此函数的参数设置是否与Ogre无关,需要跟据显卡或其它什么条件来填写参数?请问这个函数该如何使用?

请赐教。

0

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2009-4-6 17:16:00 | 显示全部楼层

Re:关于设置子实体材质的问题,请赐教。

$OGREHOME/media/materials/scripts/Examples-Advanced.material里有这么一段:


  1. material Examples/CelShading
  2. {
  3.         technique
  4.         {
  5.                 pass
  6.                 {
  7.                         vertex_program_ref Ogre/CelShadingVP
  8.                         {
  9.                                 // map shininess from custom renderable param 1
  10.                                 param_named_auto shininess custom 1
  11.                         }
  12.                         fragment_program_ref Ogre/CelShadingFP
  13.                         {
  14.                                 // map diffuse from custom renderable param 2
  15.                                 param_named_auto diffuse custom 2
  16.                                 // map specular from custom renderable param 2
  17.                                 param_named_auto specular custom 3
  18.                         }
  19.                         texture_unit
  20.                         {
  21.                                 texture cel_shading_diffuse.png 1d
  22.                                 tex_address_mode clamp
  23.                                 filtering none
  24.                         }
  25.                         texture_unit
  26.                         {
  27.                                 texture cel_shading_specular.png 1d
  28.                                 tex_address_mode clamp
  29.                                 filtering none
  30.                         }
  31.                         texture_unit
  32.                         {
  33.                                 texture cel_shading_edge.png 1d
  34.                                 tex_address_mode clamp
  35.                                 filtering none
  36.                         }
  37.                 }
  38.         }
  39.        
  40. }
复制代码


这就是你要的答案了。

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
 楼主| 发表于 2009-4-8 10:06:00 | 显示全部楼层

Re:关于设置子实体材质的问题,请赐教。

经过阁下的指点,我的理解是:
        sub->setMaterialName("Examples/CelShading");//使用一个材质名称设置子实体的材质。
其中,"Examples/CelShading"为预先定义好的一个材质脚本名,有点像是GPU程序脚本。
在这个脚本中,指定了texture(纹理文件名)、tex_address_mode (纹理包装或寻址模式)、filtering(纹理过滤方式)

还有一个问题,请赐教。
    请问我该如何编辑这种脚本文件?有现成的脚本编辑工具吗?

0

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2009-4-8 21:05:00 | 显示全部楼层

Re: Re:关于设置子实体材质的问题,请赐教。

sudongao: Re:关于设置子实体材质的问题,请赐教。

经过阁下的指点,我的理解是:
        sub->setMaterialName("Examples/CelShading");//使用...

GPU Shader程序也可以是OGRE材质的一部分,就像本例子中的那样;当然也可以不是(固定管线模式)。
本例中,Shader程序中的名为shininess、diffuse和specular的寄存器常量被编了号,以便在主程序中更新。
OGRE材质脚本的编辑工具我也没找到,好在不是很复杂,我用Notepad++ 或者VI基本没问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表