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

发布于 2024-10-20 12:56:12 字数 609 浏览 3 评论 0原文

我正在阅读《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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

追风人 2024-10-27 12:56:12

您可以将此行: 替换

float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));

为以下 3 行:

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

int 的转换是隐式的 Floor()。

You can replace this line:

float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));

with these 3 lines:

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

The conversion to int is an implicit floor().

葮薆情 2024-10-27 12:56:12

您标记了您的问题 opengl,但您正在使用 directx 的配置文件:

profiles ps_1_1 ...

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

profiles fp40 fp30 arbfp1

并查看您的原始函数是否有效。
这些配置文件记录在 nvidia cg 编译器附带的用户手册 pdf 中。

You tagged your question opengl, but you're using a profile for directx:

profiles ps_1_1 ...

You might change the shader definition to

profiles fp40 fp30 arbfp1

And see if your original function works.
The profiles are documented in the user manual pdf that comes with the nvidia cg compiler.

燃情 2024-10-27 12:56:12

在材料中你设置

profiles ps_1_1 ...

像书中一样,但是 ps_1_1 是 directX8 ,它有一个函数湖

你应该使用

profiles ps_2_0 ...

所以,你将使用 directX9

In materials you set

profiles ps_1_1 ...

Like in the book, but ps_1_1 is directX8 which have a lake of functions

You should use

profiles ps_2_0 ...

And so, you'll use directX9

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文