Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Вниз

ЧЗХ при включении 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.033 c
3-1102496556
chum
2004-12-08 12:02
2005.01.09
Использование Ado


1-1103554339
Zeqfreed
2004-12-20 17:52
2005.01.09
Всплывающее окно


1-1103556332
malij
2004-12-20 18:25
2005.01.09
messages


14-1103457387
dr Tr0jan
2004-12-19 14:56
2005.01.09
Пищит монитор


6-1097865516
vers
2004-10-15 22:38
2005.01.09
прокси на IdTCPServer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский