Форум: "Игры";
Текущий архив: 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