Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

ЧЗХ при включении GL_AMBIENT?   Найти похожие ветки 

 
Brenagwynn   (2004-09-14 17:14) [0]

При освоении ОпенГЛ уперся в следующую вещь. Рисую кубик с одной и той же текстурой. Все ок. Пытаюсь включить освещение:
glLightfv(GL_LIGHT1, GL_AMBIENT, @LightAmbient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, @LightDiffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, @LightDiffuse);
glLightfv(GL_LIGHT1, GL_POSITION,@LightPosition);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);

LightDiffuse = (1,1,1,1), LightPosition = (0,0,2,). Если написать в LightAmbient = (0,0,0,1), то кубик еле виден и темно серого цвета, если одно из значение поменять на что-то отличное от нуля - весь кубик заливается яркоЗЕЛЕНЫМ цветом :(((( Где собака порылась?


 
Darthman ©   (2004-09-14 17:48) [1]

А что у тебя с GL_LIGHT0?


 
Brenagwynn   (2004-09-14 17:51) [2]

Ничего у меня с ним :) А что нужно?


 
Darthman ©   (2004-09-14 17:55) [3]

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


 
Brenagwynn   (2004-09-14 18:01) [4]

Там 1. Кстати, если использовать GL_LIGHT0, то ничего не меняется (в смысле, тот же зеленый кубик).


 
Darthman ©   (2004-09-14 18:18) [5]

А как сам кубик рисуешь? Даешь процедуру отрисовки (и инициализации) в студию :)


 
Brenagwynn   (2004-09-14 18:25) [6]

Даю :)
Инициализация

glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0, 0.0, 0.0, 0.5);
glClearDepth(1.0);    

glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @LightDiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @LightDiffuse);
glLightfv(GL_LIGHT0, GL_POSITION,@LightPosition);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST);      glEnable(GL_NORMALIZE);

glDepthFunc(GL_LEQUAL);    
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(90.0, 1.0, 0.1, 900);


Собсно отрисовка кубика:

glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

gluLookAt(0, 0, 10.0, 0, 0, 0, 0, 1, 0);

fA1 := fA1 + 0.5;
fA2 := fA2 + 0.6;
fA3 := fA3 + 0.4;

glRotatef(fA1,1.0,0.0,0.0);
glRotatef(fA2,0.0,1.0,0.0);
glRotatef(fA3,0.0,0.0,1.0);

glBindTexture(GL_TEXTURE_2D,texture[0]);

glBegin(GL_QUADS);
 ...вешины, текскоорды и нормали
glEnd();


 
Darthman ©   (2004-09-14 18:30) [7]

glClearColor(0.0, 0.0, 0.0, 0.5); это зачем так?

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
ставим перед
glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);

gluPerspective(90.0, 1.0, 0.1, 900); 0.1 правим на 1

Дописываем GlEnable(GL_COLOR_MATERIAL); в инициализацию.

Учимся писать по человечески для начала. Дальше будем смотреть :)


 
Brenagwynn   (2004-09-14 18:39) [8]


> glEnable(GL_LIGHTING);
> glEnable(GL_LIGHT0);
> ставим перед
> glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);


В том порядке, в котором я написал, было во всех примерах, которые я смотрел. Исправил - те же яйца...


> Дописываем GlEnable(GL_COLOR_MATERIAL); в инициализацию.


Дописал - см. выше :(


> Учимся писать по человечески для начала. Дальше будем смотреть
> :)


Ну, вот и учусь...


 
Darthman ©   (2004-09-14 18:40) [9]

glClearColor(0.0, 0.0, 0.0, 0.5); это зачем так? до сих пор не объяснил :)
Остальное просто поправил для "красивости" кода :)


 
Brenagwynn   (2004-09-14 18:46) [10]

Ашыпка из-за метаний в попытках избавиться от зеленого цвета. :(


 
wiz ©   (2004-09-14 21:47) [11]

во-первых,
>GlEnable(GL_COLOR_MATERIAL);
совсем не нужен, если человек всё делает через материалы... (но это так, цветочки)

во-вторых (и это главное),
gluLookAt(0, 0, 10.0, 0, 0, 0, 0, 1, 0);
перекидываем из раздела glMatrixMode(GL_MODELVIEW) в раздел glMatrixMode(GL_PROJECTION)
imho, должно сразу сильно полегчать...

в-третьих, ... в-третьих пока отложим... (я думаю пункт 2 тебя уже спасёт)

PS: Я бы вообще писал отрисовку кубика следующим образом:

glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );

glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(90.0, 1.0, 0.1, 900);
gluLookAt(0, 0, 10.0, 0, 0, 0, 0, 1, 0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

fA1 := fA1 + 0.5;
...(итд)


 
Brenagwynn   (2004-09-15 11:45) [12]

Увы, увы... Попробовал - не помогает :((((


 
Darthman ©   (2004-09-15 12:01) [13]

Как происходит сама отрисовка куба?


 
Brenagwynn   (2004-09-15 12:10) [14]

Вот так:

procedure TMainForm.Timer1Timer(Sender: TObject);
var
 ps : TPaintStruct;
begin
 BeginPaint(Handle, ps);

 glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );

 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(90.0, 1.0, 0.1, 900);
 gluLookAt(0, 0, 10.0, 0, 0, 0, 0, 1, 0);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;

 fA1 := fA1 + 0.5;
 fA2 := fA2 + 0.6;
 fA3 := fA3 + 0.4;

 glRotatef(fA1,1.0,0.0,0.0);
 glRotatef(fA2,0.0,1.0,0.0);
 glRotatef(fA3,0.0,0.0,1.0);

 glBindTexture(GL_TEXTURE_2D,texture[0]);

 glBegin(GL_QUADS);
   ....
 glEnd();

 SwapBuffers(DC);
 EndPaint(Handle, ps);
end;


 
Darthman ©   (2004-09-15 12:18) [15]

glBegin(GL_QUADS);
  ....
glEnd();

Надо будет так попробовать куб рисовать. Кода всего три строки... а  у меня выходит всегда в несколько раз больше.... Научи меня также программировать? :)

gluPerspective(90.0, 1.0, 0.1, 900); правим на gluPerspective(90.0, 1.0, 1, 900);
Не надо такие глупости делать.
Да и вообще, зачем в каждом кадре задавать перспективу. Не возьму в толк никак.


 
Brenagwynn   (2004-09-15 12:25) [16]


glBegin(GL_QUADS);
 glNormal3f( 0.0, 0.0, 1.0);
 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
 glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
 glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0,  1.0);

 glNormal3f( 0.0, 0.0,-1.0);
 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
 glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
 glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);

 glNormal3f( 0.0, 1.0, 0.0);
 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0,  1.0,  1.0);
 glTexCoord2f(1.0, 0.0); glVertex3f( 1.0,  1.0,  1.0);
 glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);

 glNormal3f( 0.0,-1.0, 0.0);
 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, -1.0, -1.0);
 glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, -1.0);
 glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);

 glNormal3f( 1.0, 0.0, 0.0);
 glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
 glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
 glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
 glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);

 glNormal3f(-1.0, 0.0, 0.0);
 glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
 glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
 glTexCoord2f(1.0, 1.0); glVertex3f(-1.0,  1.0,  1.0);
 glTexCoord2f(0.0, 1.0); glVertex3f(-1.0,  1.0, -1.0);
glEnd();


 
Darthman ©   (2004-09-15 12:29) [17]

Цвет, ессесна не задаешь?
А вообще, проще будет прислать мне сурсы, я гляну и постараюсь помочь. Неудобно тут по кускам все смотреть :)


 
Brenagwynn   (2004-09-15 12:45) [18]

Пробовал - не помогает. Сырцы ушли мылом...


 
Darthman ©   (2004-09-15 13:52) [19]

Не удивительно что не помогает :)
   cColorBits:= 24;
   cDepthBits:= 32;
Как ты себе это представляешь? Поле cColorBits равно 16 или 32. На 24 бита умели помоему только вуду воспроизводить, да и то под Glide. А cDepthBits не может быть больше чем cColorBits на большинстве видюх. От этого глюки могут лезть (не обязательно твои. Вообще глюки)


 
Brenagwynn   (2004-09-15 14:42) [20]

И ВСЕ РАВНО НЕ ПОМОГАЕТ!!! 16, 32 - один хрен. Как только я включаю GL_AMBIENT кубик заливается зеленым...


 
Darthman ©   (2004-09-15 15:08) [21]

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


 
Brenagwynn   (2004-09-15 15:15) [22]

Ну, большинство этих самых ляпов взяты непосредственно из уроков NeHe. Все равно, ляпы или не ляпы, нихрена не выходит.. Блиннн...


 
Darthman ©   (2004-09-15 15:26) [23]

Мой тебе совет. Сделай заного по человечески. Или может быть тебе сделать этот кубик?


 
Brenagwynn   (2004-09-15 15:41) [24]

Лучше всего, если ты скажешь, что именно здесь не по-человечески и ткнешь пальцем в то место (те места), которые могут вызывать описанный эффект.


 
Brenagwynn   (2004-09-15 15:47) [25]

ЙОМАЙО!!!!! Как я торможу... LightPosition, LightAmbient, LightDiffuse : array [0..3] of GLfloat, (!!!!!!) а не of GLDouble... РАБОТАЕТ, МАТЬ ЕГО!!! :)))



Страницы: 1 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.037 c
3-1102480164
_sulent
2004-12-08 07:29
2005.01.09
Genereal SQL error


1-1103608372
Tornado
2004-12-21 08:52
2005.01.09
Обновления программы через http


1-1103433300
Илья
2004-12-19 08:15
2005.01.09
Reset(f)


14-1103399463
Nous Mellon_
2004-12-18 22:51
2005.01.09
Страсти по МПх


4-1101297931
#Master#
2004-11-24 15:05
2005.01.09
Отслеживание нажатий клавишь