![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ЧЗХ при включении GL_AMBIENT? [Delphi, Windows]
Brenagwynn © (2004-09-14 17:14:00)При освоении ОпенГЛ уперся в следующую вещь. Рисую кубик с одной и той же текстурой. Все ок. Пытаюсь включить освещение:
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), то кубик еле виден и темно серого цвета, если одно из значение поменять на что-то отличное от нуля - весь кубик заливается яркоЗЕЛЕНЫМ цветом :(((( Где собака порылась?
Brenagwynn (2004-09-15 15:47:00) [1]ЙОМАЙО!!!!! Как я торможу... LightPosition, LightAmbient, LightDiffuse : array [0..3] of GLfloat, (!!!!!!) а не of GLDouble... РАБОТАЕТ, МАТЬ ЕГО!!! :)))
Brenagwynn (2004-09-15 15:41:00) [2]Лучше всего, если ты скажешь, что именно здесь не по-человечески и ткнешь пальцем в то место (те места), которые могут вызывать описанный эффект.
Darthman (2004-09-15 15:26:00) [3]Мой тебе совет. Сделай заного по человечески. Или может быть тебе сделать этот кубик?
Brenagwynn (2004-09-15 15:15:00) [4]Ну, большинство этих самых ляпов взяты непосредственно из уроков NeHe. Все равно, ляпы или не ляпы, нихрена не выходит.. Блиннн...
Darthman (2004-09-15 15:08:00) [5]Я же говорю, что это не к твоей проблеме, а вообще. Просто тут у тебя ляп на ляпе, вот и поправляю.
Brenagwynn (2004-09-15 14:42:00) [6]И ВСЕ РАВНО НЕ ПОМОГАЕТ!!! 16, 32 - один хрен. Как только я включаю GL_AMBIENT кубик заливается зеленым...
Darthman (2004-09-15 13:52:00) [7]Не удивительно что не помогает :)
cColorBits:= 24;
cDepthBits:= 32;
Как ты себе это представляешь? Поле cColorBits равно 16 или 32. На 24 бита умели помоему только вуду воспроизводить, да и то под Glide. А cDepthBits не может быть больше чем cColorBits на большинстве видюх. От этого глюки могут лезть (не обязательно твои. Вообще глюки)
Brenagwynn (2004-09-15 12:45:00) [8]Пробовал - не помогает. Сырцы ушли мылом...
Darthman (2004-09-15 12:29:00) [9]Цвет, ессесна не задаешь?
А вообще, проще будет прислать мне сурсы, я гляну и постараюсь помочь. Неудобно тут по кускам все смотреть :)
Brenagwynn (2004-09-15 12:25:00) [10]
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:18:00) [11]glBegin(GL_QUADS);
....
glEnd();
Надо будет так попробовать куб рисовать. Кода всего три строки... а у меня выходит всегда в несколько раз больше.... Научи меня также программировать? :)
gluPerspective(90.0, 1.0, 0.1, 900); правим на gluPerspective(90.0, 1.0, 1, 900);
Не надо такие глупости делать.
Да и вообще, зачем в каждом кадре задавать перспективу. Не возьму в толк никак.
Brenagwynn (2004-09-15 12:10:00) [12]Вот так:
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:01:00) [13]Как происходит сама отрисовка куба?
Brenagwynn (2004-09-15 11:45:00) [14]Увы, увы... Попробовал - не помогает :((((
wiz (2004-09-14 21:47:00) [15]во-первых,
>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-14 18:46:00) [16]Ашыпка из-за метаний в попытках избавиться от зеленого цвета. :(
Darthman (2004-09-14 18:40:00) [17]glClearColor(0.0, 0.0, 0.0, 0.5); это зачем так? до сих пор не объяснил :)
Остальное просто поправил для "красивости" кода :)
Brenagwynn (2004-09-14 18:39:00) [18]
> glEnable(GL_LIGHTING);
> glEnable(GL_LIGHT0);
> ставим перед
> glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);
В том порядке, в котором я написал, было во всех примерах, которые я смотрел. Исправил - те же яйца...
> Дописываем GlEnable(GL_COLOR_MATERIAL); в инициализацию.
Дописал - см. выше :(
> Учимся писать по человечески для начала. Дальше будем смотреть
> :)
Ну, вот и учусь...
Darthman (2004-09-14 18:30:00) [19]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:25:00) [20]Даю :)
Инициализация
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();