-1

只是快速提醒一下,可能比我的代码有更多错误,因为我仍在学习如何正确发布问题。

我正在开发我的第一个程序,它有一个目的。我学过很多教程,对编程有基本的了解。

我正在使用 VC++ 2012 和 glut openGL 4.3.0 版

我的目标是输入一个与天气对应的数字。然后根据数字播放不同的动画。一开始为了简化事情,我只是想改变背景颜色。

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

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

通过代码手动输入数字时,这似乎有效。但是,当我尝试在不同的类中为每个 RGB 值分配一个浮点数时,结果背景保持黑色。

我的天气变化是在带有案例的天气类中完成的。

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

我认为这可能是我的错误的来源。

当我运行程序时,我确定了我使用的浮点值是什么。

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

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

只有当我改变

float getScreenBlue(void){return screenBlue;}

至...

float getScreenBlue(void){return 1.0;}

...打开窗口时颜色是否发生了变化,可以理解,这是有效的。这让我相信集合函数的编码不正确。

我觉得我可能只是错过了一件小事,或者可能是一件大事。据我了解,其余的似乎都有效。

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

http://pastebin.com/1NhHkSN1

再次感谢,如果发布不正确,我们深表歉意。

本。

4

1 回答 1

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!

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

您需要传递一个常见的实例,可能是screenRGB &或类似的,具体取决于您总体上要执行的操作。Weather::changeWeather()在调用渲染代码的外部范围内声明该实例。

于 2013-07-15T12:52:07.080 回答