Главная страница
    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.032 c
3-1102496164
msguns
2004-12-08 11:56
2005.01.09
Извлечение метаданных. Документация


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


1-1103649058
dance
2004-12-21 20:10
2005.01.09
Синхронизация потоков


1-1103706374
V l a d i m i r
2004-12-22 12:06
2005.01.09
Компонент для ввода и отображения даты


1-1103795423
TUser
2004-12-23 12:50
2005.01.09
Как может оптимизатор пропускать такое?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский