2013-08-16 1 views
-2

Я строил школьный проект с OpenGl, используя перенасыщение, и работаю как на своем ноутбуке (когда не дома), так и на моем рабочем столе. Оба были прекрасны, но внезапно, когда я скомпилировал код на своем рабочем столе, все белое, в то время как ТОЛЬКО КОД, отлично работает на моем ноутбуке! Мне нужно, чтобы он работал на моем рабочем столе, так как работать с ним гораздо легче, когда я нахожусь дома.Все белые в OpenGl, тот же код отлично работает на другом компьютере

Скриншоты:

ноутбуков: http://imageshack.us/a/img580/9522/f9yx.jpg

Desktop: http://imageshack.us/a/img821/8189/r51l.jpg

Код: Pastebin (точка) ком/keVyt55q

+3

Без просмотра кода никто не сможет вам помочь. – derhass

+1

Я думаю, что это может быть не проблема кода, потому что она работает отлично в одной машине ... –

+2

Это наблюдение никоим образом не исключает возможности ошибок. Есть тысячи способов добиться такого поведения. Несомненно, это не должно быть проблемой вашего кода, может быть проблемой с драйверами и т. Д. Но как мы должны знать? – derhass

ответ

3

Ну, вот проблема:

GLfloat especularidade[COORDHOMO] = {10.0, 10.0, 10.0, 1.0};//<------here 
GLint especMaterial = 6000; 

glMaterialfv(GL_FRONT, GL_SPECULAR, especularidade); 
/* Define a concentração do brilho sobre os objetos */ 
glMateriali(GL_FRONT, GL_SHININESS, especMaterial); 

зеркальный цвет такой же, как любой другой цвет. Предполагается, что каждый компонент должен находиться в пределах диапазона 0.0..1.0, если вы используете поплавки. Также возможно, что блеск также слишком высок, он должен находиться в диапазоне 0..128.0, и я определенно буду использовать float glMaterialf(GL_FRONT, GL_SHININESS, 25.0) или что-то в этом роде.

Либо ваш ноутбук, либо ваш настольный компьютер имеет несоответствующий драйвер OpenGL. Предполагается, что OPENGL с фиксированной функцией зажимает результаты расчета освещения до диапазона 0.0.1.1 (что является причиной того, что текстурированная сцена с фиксированной функцией может выглядеть тусклой). Ваш настольный компьютер этого не делает. Отсюда яркая белая сцена.

P.S. Также настоятельно рекомендуется использовать английские имена для функций и переменных. Ну, по крайней мере, если вы захотите получить помощь с вашим кодом позже.

+0

Я не думаю, что это единственное проблема. Я отслеживал порядок, в котором назначаются цвета вершин, и когда включен GL_COLOR_MATERIAL, и 'inicializa (...)' на самом деле нужно называть ПОСЛЕ настройки освещения, потому что иначе 'glColor (...)' не следует отслеживать материалы цвет. Я думаю, что на рабочем столе есть совместимый драйвер, а ноутбук нет. –

+0

@ AndonM.Coleman: Вы можете написать свой собственный ответ. Если я правильно помню, OpenGL не должен «перекрашиваться» любого вида. Это не должно быть возможным, но это происходит в его примере. Первое, что приходит на ум, - это зеркальные гайки. Когда вы пишете шейдеры, вы можете получить аналогичный эффект, если вы установите слишком низкую зеркальную мощность, или зеркальный цвет слишком высок. Трудно сказать, какой из причин является причиной этой конкретной проблемы, хотя ... – SigTerm

+0

@ AndonM.Coleman, что на самом деле не имеет значения; вы рисуете изображение после настройки освещения. Создание списков не должно влиять на это. В противном случае это означало бы, что для изменения освещения вам нужно будет воссоздать списки. СигТерм прав, твоя зеркало увязана. – PeterT