“功能‘地板’的解决方案”此配置文件不支持”在 Ogre3D cg 片段着色器中
我正在阅读《Ogre3D 1.7 初学者指南》一书。我编写了一个 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);
}
I am reading the book "Ogre3D 1.7 Beginngers guide".I writed a cg fragment shader but encountered the complier complain, "function 'floor' not support in this profile".
The fragment shader definition is here:
fragment_program MyFragmentShader8 cg
{
source Ogre3DBeginnersGuideShaders.cg
entry_point MyFragmentShader8
profiles ps_1_1 arbfp1
}
The implementation is here:
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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以将此行: 替换
为以下 3 行:
到
int
的转换是隐式的 Floor()。You can replace this line:
with these 3 lines:
The conversion to
int
is an implicit floor().您标记了您的问题 opengl,但您正在使用 directx 的配置文件:
您可以将着色器定义更改为
并查看您的原始函数是否有效。
这些配置文件记录在 nvidia cg 编译器附带的用户手册 pdf 中。
You tagged your question opengl, but you're using a profile for directx:
You might change the shader definition to
And see if your original function works.
The profiles are documented in the user manual pdf that comes with the nvidia cg compiler.
在材料中你设置
像书中一样,但是 ps_1_1 是 directX8 ,它有一个函数湖
你应该使用
所以,你将使用 directX9
In materials you set
Like in the book, but ps_1_1 is directX8 which have a lake of functions
You should use
And so, you'll use directX9