【问题标题】:OpenGL Rotation issueOpenGL旋转问题
【发布时间】: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)。它具有更好的本地化,因此您不必更改“。”到“,”。'
  • 谢谢!它就像一个魅力 =)

标签: c++ opengl sdl rotation


【解决方案1】:

打破它,确保你认为正在发生的事情真的正在发生:

string rot_str = ItemElem->FirstChild("Rotation")->FirstChild()->Value();
float rot_rad = atof( rotv.c_str() );
float rot_deg = rot_rad * 57.295779;
rotation = rot_deg;

使用调试器逐步完成每个操作并验证值是否符合预期。

【讨论】:

  • 您好,感谢您的回复。我这样做了,但是我的调试器不会向我显示值,我不知道为什么。
  • @Orujimaru 请检查项目是否在调试模式下运行以查看值。
  • 是的,它没有在调试模式下运行,我正在多台计算机之间移动解决方案,而我当前使用的那台由于某种原因不支持我的调试设置。
【解决方案2】:

您可以使用strtod 代替 atof。它具有更好的本地化,因此您不必更改“。”到“,”

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多