查看: 2773|回复: 2

Layer Rendering的问题

[复制链接]

该用户从未签到

发表于 2010-2-27 09:07:32 | 显示全部楼层 |阅读模式
请教大家一个问题,我最近想用Geometry shader的layer render来优化PSSM阴影,主要的试验代码如下:
//创建TextureArray
osg::TextureArray *ta = new osg::TextureArray;
ta->setTextureSize(1024, 1024, 3);     //三层纹理
...
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 0);  //
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 1);
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 2);

Geometry Shader代码:

#extension GL_EXT_geometry_shader4 : require

varying vec4 color;

void main()
{
    //Route to Layer 0
    for (int i = 0; i < 3; i++)
    {
        // You will recieve 3 positions since we set the input type to Triangles
        gl_Position = 0.5*gl_PositionIn[i] - vec4(0.5, 0.0, 0.0, 1.0);   
        gl_FrontColor = vec4(1.0, 0.0, 0.0,1.0);
        gl_Layer = 0;
        EmitVertex();
    }
    EndPrimitive();

    //Route to Layer 1
    for (int i = 0; i < 3; i++)
    {
        gl_Position = 0.5*gl_PositionIn[i];
        //Just to see a difference in Layer 1
        gl_FrontColor = vec4(0.0, 1.0, 0.0,1.0);
        gl_Layer = 1;
        EmitVertex();
    }
    EndPrimitive();
    //Route to Layer 2
    for (int i = 0; i < 3; i++)
    {
        gl_Position = 0.5*gl_PositionIn[i] + vec4(0.5, 0.0, 0.0, 1.0);
        //Just to see a difference in Layer 1
        gl_FrontColor = vec4(0.0, 1.0, 0.0,1.0);
        gl_Layer = 2;
        EmitVertex();
    }
    EndPrimitive();
}

经过试验,绘制后纹理中只有attach的第一行所表示的层(比如说上面的0层)有效(显示红色),而1和2则是无效的,上网也没有查到相关的说明,还请高人指教,谢谢!

该用户从未签到

发表于 2010-2-27 11:15:48 | 显示全部楼层
我认为这里应当是:
  1. shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 0);
  2. shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 1, 0);
  3. shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 2, 0);
复制代码
因为attach()的参数依次为:BufferComponent,texture,level,face……您所修改的face参数是针对TextureCubeMap的。

该用户从未签到

 楼主| 发表于 2010-2-27 16:06:45 | 显示全部楼层
level是指mipmap的level,我也试过了,没有效果,但是第一行中指定face(0或1),后面ta中相应第face层就有图像,其他都是无效的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表