游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3399|回复: 4

着色器调用无效问题,求解啊

[复制链接]

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2012-7-10 21:08:00 | 显示全部楼层 |阅读模式
参考Ogre+3d+1.7+beginner+Guide+中文版学习,创建第一个着色器时候失败,一直找不出原因,附上代码:

mian.cpp中的场景函数,调用的是材质  MyMaterial14


        void createScene()
        {


                Ogre::ManualObject*  manual = mSceneMgr->createManualObject("Quad");
                manual->begin("MyMaterial14", RenderOperation::OT_TRIANGLE_LIST);


                manual->position(5.0, 0.0, 0.0);
                manual->textureCoord(0,1);
                manual->position(-5.0, 10.0, 0.0);
                manual->textureCoord(1,0);
                manual->position(-5.0, 0.0, 0.0);
                manual->textureCoord(1,1);
                manual->position(5.0, 10.0, 0.0);
                manual->textureCoord(0,0);


                manual->index(0);
                manual->index(1);
                manual->index(2);
                manual->index(0);
                manual->index(3);
                manual->index(1);


                manual->end();
                manual->convertToMesh("Quad");


                Ogre::Entity * ent = mSceneMgr->createEntity("Quad");
                Ogre::SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1");
                 node->attachObject(ent);
          }

Ogre3DBeginnersGuide.material材质文件中定义了


fragment_program MyFragmentShader1 cg  
{
  source Ogre3DBeginnersGuideShaders.cg   
  entry_point MyFragmentShader1
  profiles ps_1_1  arbfp1
}


vertex_program MyVertexShader1 cg
{
  source Ogre3DBeginnerGuideShaders.cg  
  entry_point MyVertexShader1   
  profiles vs_1_1 arbvp1                     
  default_params                    
  {        
    param_named_auto worldViewMatrix worldviewproj_matrix        
  }
}


material MyMaterial13
{
    technique
    {
        pass
        {  
                  vertex_program_ref MyVertexShader1
            {
            }
            fragment_program_ref MyFragmentShader1
            {
            }
        }
    }
}

在Ogre3DBeginnersGuideShaders.cg着色器中定义:

void MyFragmentShader1(out float4 color:COLOR)
{
    color = float4(0,0,1,0);
}


void MyVertexShader1(
        float4 position         : POSITION,      
        out float4 oPosition    : POSITION,     
        uniform float4x4 worldViewMatrix)
{
    oPosition = mul(worldViewMatrix, position);
}

书上结果是个蓝色四边形,我的怎么是白色,求解啊

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-7-16 04:24:00 | 显示全部楼层

Re: 着色器调用无效问题,求解啊

manual->begin("MyMaterial14", RenderOperation::OT_TRIANGLE_LIST);
与之后的
material MyMaterial13
名字不一样 MyMaterial14跟MyMaterial13改成一样的


vertex_program MyVertexShader1 cg
{
  source Ogre3DBeginnerGuideShaders.cg  
  entry_point MyVertexShader1   
  profiles vs_1_1 arbvp1                     
  default_params                    
  {        
    param_named_auto worldViewMatrix worldviewproj_matrix        
  }
}
中的Ogre3DBeginnerGuideShaders.cg  缺个"s",Ogre3DBeginnersGuideShaders.cg这个才是主要的,NND书上代码写错了笔误少个s,
我纠结了半天,刚才还看你帖子以为有人能解答呢,后来自己眼尖发现了,就告诉你一下。。。。

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2012-7-17 00:42:00 | 显示全部楼层

Re:着色器调用无效问题,求解啊

啊,我看了书上有没有漏写“s”啊,而且我上面写Ogre3DBeginnersGuide.material材质文件中的MyVertexShader1定义里:source Ogre3DBeginnersGuideShaders.cg ,这个也有“s”啊。

我只有材质文件名字是Ogre3DBeginnersGuideShader.material,这个没有s,比着色器的文件名少个s,不过我把材质的多加个s也运行还是无效。。

不知道啥原因,求教

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2012-7-17 00:44:00 | 显示全部楼层

Re:着色器调用无效问题,求解啊

你运行成功了的话,加下我qq:719848711,指导下吧,这是半天说不清,沟通也太慢了。谢谢了

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2012-7-18 23:22:00 | 显示全部楼层

Re:着色器调用无效问题,求解啊

Ogre3DBeginnerGuideShaders.cg   材质文件中资源文件名字
Ogre3DBeginnersGuideShaders.cg  着色器名字
坑爹,我发现了,还是自己太大意了,都没注意看运行信息,今天请教别人,教我看运行信息说找不到定义材质中定义的着色器,在仔细对照一看才发现,哈哈。
谢谢你啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-27 23:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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