Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl “解决方案”;功能';地板';此配置文件中不支持“;在Ogre3D cg片段着色器中_Opengl_Ogre3d_Cg - Fatal编程技术网

Opengl “解决方案”;功能';地板';此配置文件中不支持“;在Ogre3D cg片段着色器中

Opengl “解决方案”;功能';地板';此配置文件中不支持“;在Ogre3D cg片段着色器中,opengl,ogre3d,cg,Opengl,Ogre3d,Cg,我正在阅读《Ogre3D 1.7 Beginngers指南》一书。我写了一个cg片段着色器,但遇到编译器抱怨,“此配置文件中不支持函数“floor” 片段着色器定义如下所示: fragment_program MyFragmentShader8 cg { source Ogre3DBeginnersGuideShaders.cg entry_point MyFragmentShader8 profiles ps_1_1 arbfp1 } void MyFragme

我正在阅读《Ogre3D 1.7 Beginngers指南》一书。我写了一个cg片段着色器,但遇到编译器抱怨,“此配置文件中不支持函数“floor”

片段着色器定义如下所示:

   fragment_program MyFragmentShader8 cg
{
    source Ogre3DBeginnersGuideShaders.cg
    entry_point MyFragmentShader8
    profiles ps_1_1 arbfp1
}
void MyFragmentShader8(float2 uv    :TEXCOORD0,
    out float4 color    :COLOR,
    uniform sampler2D texture)
{
    float num = 50;
    float stepsize = 1.0 / num;
    float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));
    color = tex2D(texture, fragment);
}
具体实施如下:

   fragment_program MyFragmentShader8 cg
{
    source Ogre3DBeginnersGuideShaders.cg
    entry_point MyFragmentShader8
    profiles ps_1_1 arbfp1
}
void MyFragmentShader8(float2 uv    :TEXCOORD0,
    out float4 color    :COLOR,
    uniform sampler2D texture)
{
    float num = 50;
    float stepsize = 1.0 / num;
    float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));
    color = tex2D(texture, fragment);
}

您可以替换此行:

float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));
有了这三条线:

int tmp1 = uv.x * num;
int tmp2 = uv.y * num;
float2 fragment = float2(stepsize * tmp1, stepsize * tmp2);

int
的转换是一个隐式的floor()。

您可以替换此行:

float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));
有了这三条线:

int tmp1 = uv.x * num;
int tmp2 = uv.y * num;
float2 fragment = float2(stepsize * tmp1, stepsize * tmp2);

int
的转换是一个隐式的floor()。

您将问题标记为opengl,但您使用的是directx的配置文件:

profiles ps_1_1 ...
您可以将着色器定义更改为

profiles fp40 fp30 arbfp1
看看你的原始功能是否正常工作。
在英伟达CG编译器附带的用户手册PDF中,这些文件被记录下来。

< p>你标记了你的问题OpenGL,但是你使用的是DirectX:

的配置文件。
profiles ps_1_1 ...
您可以将着色器定义更改为

profiles fp40 fp30 arbfp1
看看你的原始功能是否正常工作。 在英伟达CG编译器的用户手册PDF中记录了这些配置文件。
profiles ps_1_1 ...
就像书中一样,但是ps_1_1是directX8,它有很多函数

你应该使用

profiles ps_2_0 ...
因此,您将在设置的材质中使用directX9

profiles ps_1_1 ...
就像书中一样,但是ps_1_1是directX8,它有很多函数

你应该使用

profiles ps_2_0 ...

因此,您将使用directX9

谢谢您的回答,我尝试过,但这次编译器报告了一个更奇怪的错误!这次它报告了“(48):致命错误C9999:依赖纹理操作不符合纹理着色器的限制”。但第(48)行离着色器实现很远。我未能连接到www.ogre3d.org,但似乎有一个解决方案“”!是的,你提供的主要方面和链接目前是AFK^^谢谢你的回答,我试过了,但这次编译器报告了一个更奇怪的错误!这次它报告了“(48):致命错误C9999:依赖纹理操作不符合纹理着色器的限制”。但第(48)行离着色器实现很远。我未能连接到www.ogre3d.org,但似乎有一个解决方案“”!是的,你提供的主要方面和链接目前是AFK^^