我正在阅读“Ogre3D 1.7 Beginngers指南”这本书。我写了一个cg片段着色器,但遇到编译器抱怨,“功能'地板'不支持此配置文件”。
片段着色器定义在这里:
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);
}
答案 0 :(得分:1)
您可以替换此行:
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
是一个隐含的楼层()。
答案 1 :(得分:0)
您标记了问题opengl,但是您使用的是directx的个人资料:
profiles ps_1_1 ...
您可以将着色器定义更改为
profiles fp40 fp30 arbfp1
看看你原来的功能是否有效。 这些配置文件记录在nvidia cg编译器附带的用户手册pdf中。
答案 2 :(得分:0)
在您设置的材料中
profiles ps_1_1 ...
就像书中一样,但ps_1_1是directX8,它有一个功能湖
你应该使用
profiles ps_2_0 ...
所以,你将使用directX9