【发布时间】:2011-12-29 00:24:08
【问题描述】:
解决方案:
strtod 而不是 atof 解决了它。 谢谢!
TODO:将其作为接受的答案
我正在从一个 XML 文件中加载一个值,该值告诉纹理应该旋转多少。
看起来像这样:
string rotv = ItemElem->FirstChild("Rotation")->FirstChild()->Value();
rotation = -(atof(rotv.c_str()))*57.2957795;
在我的关卡编辑器中,纹理被正确旋转; pi 等于 180 度,依此类推。 但是在引擎中;他们不是,似乎小数被忽略了。例如,一个应该旋转 3.14 弧度的纹理只旋转了 3 弧度,以此类推。 我尝试了许多不同的方法来确保包含小数,但我无法让它工作。
我像这样旋转纹理:
glBindTexture(GL_TEXTURE_2D, texture->GetImage());
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.5, 0.5, 0);
glRotatef(rotation, 0, 0, 1);
glTranslatef(-0.5, -0.5, 0);
glMatrixMode(GL_PROJECTION);
xml文件中的值使用点而不是逗号,我是这样转换的,我也单独存储小数只是为了调试。
for (int x = 0; x < rotv.size(); x++)
{
if (afterComa)
{
int temp = (int) rotv[x] - '0';
if (temp <10 && temp >= 0)
{
decimals[decimalPos] = temp;
decimalPos++;
}
else
{
break;
}
}
if (rotv[x] == '.')
{
rotv[x] = ',';
afterComa = true;
}
}
float decimalValue = 小数[0]/10 + 小数[1]/100 + 小数[2]/1000 + 小数[3]/10000 + 小数[4]/100000 + 小数[5]/1000000;
小数已正确存储,我将它们添加到旋转值中,但仍然没有帮助。
【问题讨论】:
-
rotation的类型是什么,它被声明为int吗? -
XML 中是否有语言环境信息以及小数位使用什么字符?
-
旋转是浮点数,XML 使用点作为小数位。我更新了帖子,提供了有关何时“转换”值的更多信息。
-
您是否尝试过使用 strtod (cplusplus.com/reference/clibrary/cstdlib/strtod)。它具有更好的本地化,因此您不必更改“。”到“,”。'
-
谢谢!它就像一个魅力 =)