Opengl “解决方案”;功能';地板';此配置文件中不支持“;在Ogre3D cg片段着色器中
我正在阅读《Ogre3D 1.7 Beginngers指南》一书。我写了一个cg片段着色器,但遇到编译器抱怨,“此配置文件中不支持函数“floor” 片段着色器定义如下所示: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
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^^