只是快速抬头,可能会有更多错误,而不仅仅是我的代码,因为我仍在学习如何正确发布问题。
我正在开发我的第一个程序,它有一个目的。我已经学习了许多教程并对编程有了基本的了解。
我正在使用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;}
...窗户打开时颜色发生了变化,可以理解这是有效的。这让我觉得设置函数编码错误。
我觉得我可能错过了一件小事,或者可能是一件大事。从我的理解,其余似乎工作。
这是我的完整代码抱歉,如果这个块太大而无法理解,我可以尝试删除我知道的部分,如果需要的话也不是问题。
再次感谢,如果发布错误,请道歉。
本。
答案 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()
以及渲染代码的外部作用域中声明该实例。