Float没有返回正确的值

时间:2013-07-15 12:41:56

标签: c++ glut

只是快速抬头,可能会有更多错误,而不仅仅是我的代码,因为我仍在学习如何正确发布问题。

我正在开发我的第一个程序,它有一个目的。我已经学习了许多教程并对编程有了基本的了解。

我正在使用VC ++ 2012和过剩的openGL版本4.3.0

我的目标是输入与天气相对应的数字。然后取决于数字,将播放不同的动画。为了简化起初,我只是想改变背景颜色。

我发现这是用这个完成的。

glClearColor(0.0, 0.0, 0.0, 0.0, 1.0);

当通过代码手动输入数字时,这似乎有效。但是,当我尝试在不同的类中使用float分配每个RGB值时,生成的背景保持黑色。

我的天气变化是在Weather类中完成的。

我观看的大多数教程都说尽可能保密变量,以防止以后出现问题。所以在screenRGB类中我设置了设置和获取RGB颜色的函数。

我认为这可能是我的错误所在。

当我运行该程序时,我让它知道我使用的浮点值是什么。

cout << screenrgb.getScreenRed() << endl;

这有助于隔离出错的地方。返回的浮点值为-1.07374e + 008。这看起来很奇怪

只有当我改变了

float getScreenBlue(void){return screenBlue;}

为...

float getScreenBlue(void){return 1.0;}

...窗户打开时颜色发生了变化,可以理解这是有效的。这让我觉得设置函数编码错误。

我觉得我可能错过了一件小事,或者可能是一件大事。从我的理解,其余似乎工作。

这是我的完整代码抱歉,如果这个块太大而无法理解,我可以尝试删除我知道的部分,如果需要的话也不是问题。

http://pastebin.com/1NhHkSN1

再次感谢,如果发布错误,请道歉。

本。

1 个答案:

答案 0 :(得分:2)

init()函数中,声明screenRGB的本地实例:

void init(void)
{
    screenRGB screenrgb;    /// <-- local instance!

    cout << screenrgb.getScreenRed() << endl;

    glClearColor(screenrgb.getScreenRed(), screenrgb.getScreenGreen(), screenrgb.getScreenBlue(), 1.0);
    cout << screenrgb.getScreenRed() << endl;

    glShadeModel(GL_SMOOTH);
    glEnable(GL_BLEND);
    glEnable(GL_TEXTURE_2D);
}

此实例与您在Weather::changeWeather()中声明的实例分开:

    string changeWeather()
    {
            screenRGB screenrgb;  /// <-- A completely different local instance!

这两个实例未连接,因为每个实例都是其自身功能的本地实例。此外,每次调用该函数时,都会获得一个全新的本地实例。

您需要传递一个公共实例,可能是screenRGB &或类似的,具体取决于您要做的总体操作。在一些调用Weather::changeWeather()以及渲染代码的外部作用域中声明该实例。