OGRE+CG学习日记[1]-简单的3D程序

OGRE+CG学习日记[1]-简单的3D程序

终于有时间开始研究OGRE和CG这些3D技术方面的东西了

先对今天的成果进行一下简单介绍
­
创建一个OGRE窗口,在里面放入一个怪兽头模型
­
写一个输出顶点为红色的CG代码
在OGRE材质脚本里声明这段代码
将这段代码用在一个模型上,让他变成一个纯红色的 ,没有光照明暗效果的东西
­
先来看代码
(因为是根据OGRE的演示程序” Demo_EnvMapping”修改而来,不涉及窗口的创建以及摄像机等等的内容)
//3D世界创建一个环境光
// ColourValue(0.5, 0.5, 0.5)这个就是环境光的颜色啦
mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
­
// 创建一个光源,并设定它的坐标
    Light* l = mSceneMgr->createLight("MainLight");      
    l->setPosition(20,80,50);
­
//创建一个实体(这是创建了一个OGRE的怪兽头模型)
Entity *ent = mSceneMgr->createEntity("head", "ogrehead.mesh");
­
//设置怪兽头模型的材质(重点部分)
ent->setMaterialName("Examples/kkTest");
­
//DEMO中设置的原配材质脚本
// ent->setMaterialName("Examples/EnvMappedRustySteel");
­
­
//创建一个新的子节点,把上面创建的模型绑定在节点上
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
­
接下来是“重点部分”
涉及到GPU编程,采用CG语言
我也刚开始学CG,先来个简单点的
要求就是把模型设成一个红色的怪兽头
­
第一步创建一个CG程序
为了方便,直接在OGRE现成的CG文件里添加就是了
X:/ogre/Samples/Media/materials/programs/ Example_Basic.cg  这是我用来添加的文件
void kkTestTexture_vp(float4 position   : POSITION,
              float3 normal      : NORMAL,
              float2 uv         : TEXCOORD0,
­
           // 加 out 表示为这段代码要输出的值
           out float4 oPosition : POSITION, //: 号后面的部分表示当作什么来用 点
           out float2 oUv       : TEXCOORD0,  //这个当作“纹理坐标”(我这么叫的)
          out float4 ocolour    : COLOR,   //很明了,颜色
­
           // uniform 表示在外部进行赋值的          
           uniform float4x4 worldViewProj)//这是一个 世界视图投影的混合矩阵
{  
   //对当前的点进行转换
   oPosition = mul(worldViewProj, position);
   oUv = uv; //这个不变
  //唯一有能看出点效果的代码  ,这里是把要输出的点的颜色调为红色(RGBA值)
  ocolour=float4(1,0,0,1);
}
­
CG代码完成后就要开始为这段程序进行一个我认为是类似声明的过程
同代码,直接在OGRE提供的现成文件脚本里添加
X:/ogre/Samples/Media/materials/scripts/ Examples.program
­
­
vertex_program Ogre/BasicVertexPrograms/kkTest cg
{
     source Example_basic.cg    //CG程序的文件名
     entry_point kkTestTexture_vp   //渲染过程中CG程序的入口函数名,类似于C的MAIN()
     profiles vs_1_1 arbvp1       //应该是对段程序的描述,好像是表示渲染过程中硬件//采用的技术方式
}
­
声明完成,就可以在材质脚本中使用了
X:/ogre/Samples/Media/materials/scripts/ Example.material
­
很简单  
material Examples/kkTest   //先为这段脚本命名
{  
    Technique   // 使用的技术方案,虽然只有一种
    {
        Pass  //传说中的通道
        {       //表示使用上面写的顶点渲染程序
                vertex_program_ref Ogre/BasicVertexPrograms/kkTest
             {                    
                    //那段程序有一个需要外部赋值的变量
// param_named_auto  表示这个参数采用名称   自动赋值的方法
                      param_named_auto worldViewProj worldviewproj_matrix
// worldviewproj_matrix 并不是一个值,而是一个描述
//OGRE会根据描述自动赋值(描述有很多种,可查看相关资料)
                 }                
          }
    }      
}
现在生成代码,运行下看看

由于CG代码对顶点的操作只是简单地输出了红色,没有进行其它运算,所以模型看起来没有任何的立体效果
下面是我用来修改的DEMO的原装效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值