游戏开发论坛

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

glProgramLocalParameter怎么用?

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-2-3 23:51:00 | 显示全部楼层 |阅读模式
uniform   float4   flatScale   :   flatScale;
uniform   float4   dmapScale   :   dmapScale;

float   isFlat(float3   a,   float3   b,   float3   c,   float3   d,   float   disp,   float   dscale2)
{
        float3   v1,   v2;
        float   distance;
        distance   =   flatScale.x   *   (b.z   +   c.z   +   dscale2);
        if   (distance   <   flatScale.y)
                distance   =   flatScale.z   -   distance;
               
        distance   -=   disp;

        v1   =   a   +   c   -   2*b;
        v2   =   b   +   d   -   2*c;
        return   (float)   (dot(v1,   v1)   +   dot(v2,   v2)   <   distance*abs(distance));
}

float2   cvt(float   index)
{
        float2   result;

        result.y   =   index;
        result.x   =   frac(index)*1024;
      
        return   result;
}

float4   main(float4   offsetCoord   :   TEX0,
        float4   dstCoord   :   WPOS,
        float4   epCoord   :   TEX1,
        uniform   samplerRECT   srcTexMap   :   TEXUNIT0,
        uniform   samplerRECT   epTexMap   :   TEXUNIT1,

        uniform   samplerRECT   offsetTexMap   :   TEXUNIT2)   :   COL
{
        float4   s0,   s2,   s3,   s4,   s5,   s7,   s10;
        float4   srcCoords   =   dstCoord.xyxy   +   texRECT(offsetTexMap,   offsetCoord.xy);
        float2   srcCoord   =   srcCoords.xy;
        s0   =   texRECT(srcTexMap,   srcCoord   +   float2(0,   -1));
        s2   =   texRECT(srcTexMap,   srcCoord   +   float2(-1,   0));
        s3   =   texRECT(srcTexMap,   srcCoord);
        s4   =   texRECT(srcTexMap,   srcCoord   +   float2(1,   0));
        s5   =   texRECT(srcTexMap,   srcCoord   +   float2(2,   0));
        s7   =   texRECT(srcTexMap,   srcCoord   +   float2(0,   1));
        s10   =   texRECT(srcTexMap,   srcCoord   +   float2(0,   2));

        if   (s0.w   >   1)
                s0   =   texRECT(epTexMap,   cvt(s0.w)+epCoord.xy);
        if   (s10.w   >   1)
                s10   =   texRECT(epTexMap,   cvt(s10.w)+epCoord.xy);
        if   (s2.w   >   1)
                s2   =   texRECT(epTexMap,   cvt(s2.w)+epCoord.xy);
        if   (s5.w   >   1)
                s5   =   texRECT(epTexMap,   cvt(s5.w)+epCoord.xy);

        return   float2(isFlat(s2.xyz,   s3.xyz,   s4.xyz,   s5.xyz,   d.x,   d2),  
                                isFlat(s0.xyz,   s3.xyz,   s7.xyz,   s10.xyz,   d.w,   d2)).xyxy;
}
我也想在程序中用 glProgramLocalParameter设置里面的flatScale,dmapScale,
因为cg程序里有两个参数,应该怎么调用 glProgramLocalParameter来传输参数呢?

3

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2008-2-6 14:34:00 | 显示全部楼层

Re:glProgramLocalParameter怎么用?

我只知道低级ARB着色是用这个的.CG不清楚.GLSL有更好的访问函数.

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2012-10-5 12:17:00 | 显示全部楼层

Re:glProgramLocalParameter怎么用?

glUnifomfv()来设置的

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2012-10-21 12:06:00 | 显示全部楼层

Re:glProgramLocalParameter怎么用?

关于glProgramLocalParameterARB函数你可以参考一下OpenGL的GL_ARB_vertex_program扩展与GL_ARB_fragment_program扩展的规范吧,在OpenGL的官方网站上可以下载到该文件。上面说是这个函数的用法是对局部变量赋值。

1

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2012-11-4 14:11:00 | 显示全部楼层

Re:glProgramLocalParameter怎么用?

你好。。好的。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-27 13:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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