C++ OpenGL旋转问题 解决方案:
斯特罗德而不是阿托夫解决了这个问题。 谢谢 TODO:将此作为接受的答案C++ OpenGL旋转问题 解决方案:,c++,opengl,sdl,rotation,C++,Opengl,Sdl,Rotation,斯特罗德而不是阿托夫解决了这个问题。 谢谢 TODO:将此作为接受的答案 我正在从XML文件加载一个值,该值告诉纹理应该旋转多少 看起来是这样的: string rotv = ItemElem->FirstChild("Rotation")->FirstChild()->Value(); rotation = -(atof(rotv.c_str()))*57.2957795; glBindTexture(GL_TEXTURE_2D, texture->GetImage
我正在从XML文件加载一个值,该值告诉纹理应该旋转多少 看起来是这样的:
string rotv = ItemElem->FirstChild("Rotation")->FirstChild()->Value();
rotation = -(atof(rotv.c_str()))*57.2957795;
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);
在我的级别编辑器中,纹理正确旋转;π等于180度,以此类推。
但是在引擎里;它们不是,似乎小数被忽略了。例如,应该旋转3.14弧度的纹理仅旋转3弧度,以此类推。
我尝试了许多不同的方法来确保小数被包括在内,但我无法让它起作用
我像这样旋转纹理:
string rotv = ItemElem->FirstChild("Rotation")->FirstChild()->Value();
rotation = -(atof(rotv.c_str()))*57.2957795;
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文件中的值使用一个点而不是coma,我将其转换为这样,我还单独存储小数以进行调试
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;
}
}
for(int x=0;x
浮点小数=小数[0]/10+小数[1]/100+小数[2]/1000+小数[3]/10000+小数[4]/100000+小数[5]/1000000
小数被正确存储,我将它们添加到旋转值中,但这仍然没有帮助。将其分解,确保您认为正在发生的事情确实发生了:
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;
使用调试器逐步完成每个操作,并验证值是否符合预期。将其分解,确保您认为正在发生的事情确实发生了:
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;
使用调试器逐步完成每个操作并验证值是否符合预期。您可以使用而不是atof。它具有更好的本地化功能,因此您不必将“.”改为“,”您可以使用它来代替atof。它具有更好的本地化功能,因此您不必将“.”改为“,”旋转的类型是什么是否声明为
int
?XML中是否有区域设置信息以及小数点使用的字符是什么?旋转是一个浮点,XML使用一个点作为小数点。我在文章中更新了更多关于何时“转换”值的信息。您是否尝试过使用strod()。它具有更好的本地化功能,因此您不必将“.”更改为“,”,谢谢!它的工作原理类似于一个charm=)旋转的类型是什么?是否声明为int
?XML中是否有区域设置信息以及小数点使用什么字符?旋转是一个浮点,XML使用一个点作为小数点。我在文章中更新了更多关于何时“转换”值的信息。您是否尝试过使用strod()。它具有更好的本地化功能,因此您不必将“.”更改为“,”,谢谢!它就像一个魅力=)嗨,谢谢你的回复。我这样做了,但是我的调试器不会显示值,我不知道为什么。@Orujimaru请检查项目是否在调试模式下运行以查看值。是的,它没有在调试模式下运行,我正在多台计算机之间移动解决方案,而我当前所在的计算机由于某些原因不支持我的调试设置。您好,谢谢回复。我这样做了,但是我的调试器不会显示值,我不知道为什么。@Orujimaru请检查项目是否在调试模式下运行以查看值。是的,它没有在调试模式下运行,我正在多台计算机之间移动解决方案,而我当前所在的计算机由于某种原因不支持我的调试设置。