2013-07-15 2 views
-1

Просто быстрый хэдз-ап, возможно, что-то не так, как с моим кодом, поскольку я все еще учась правильно задавать вопросы.Float не возвращает правильное значение

Я разрабатываю свою первую программу, которая имеет цель. Я следил за многими учебными пособиями и имел базовое понимание программирования.

Я использую VC++ 2012 и GLUT OPENGL версия 4.3.0

Моя цель состояла в том, чтобы ввести номер, соответствующий погоде. Затем в зависимости от числа, которое будет играть другая анимация. Чтобы сначала упростить вещи, я просто собирался изменить цвет фона.

Я обнаружил, что это было сделано с этим.

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

Который, казалось, работал, когда вручную вводил цифры с помощью кода. Однако, когда я пытался назначить каждое значение RGB с помощью float в другом классе, полученный в результате фон оставался черным.

Изменение погоды выполняется в классе погоды с помощью шкафов.

Большинство учебников, которые я смотрел, сказал, чтобы сохранить переменные частным, когда это возможно, чтобы предотвратить проблемы позже. Поэтому в классе screenRGB я настроил функции для установки и получения цветов RGB.

Я думаю, что это возможно, где мои ошибки исходят.

Когда я запускаю программу, я сделал это cout, какие значения поплавка я использовал.

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

Это помогло изолировать немного, где все происходит неправильно. Возвращаемые значения float равны -1.07374e + 008. Что, казалось очень странным

И только тогда, когда я изменил

float getScreenBlue(void){return screenBlue;} 

к ...

float getScreenBlue(void){return 1.0;} 

... сделал изменение цвета, когда окно открылось, и по понятным причинам это работало. Это заставляет меня думать, что заданные функции неправильно закодированы.

Я чувствую, что, возможно, я просто пропустил одну маленькую вещь или, возможно, массивную вещь. По моему мнению, все остальное работает.

Это мой полный код извините, если этот кусок слишком велик, чтобы понять, я могу попробовать и удалить части, которые я знаю, не проблема, если это необходимо.

http://pastebin.com/1NhHkSN1

Еще раз спасибо, и извинение, если это было размещено неправильно.

Ben.

ответ

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() так и ваш код рендеринга.

Смежные вопросы