![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL [Delphi, Windows]
yurique © (2005-05-22 19:33:00)Привет!
У меня возникла следующая проблемка (а времени разобраться по-хорошему нету :( ).. Так вот: мне в опенГЛ нужно нарисовать трехмерный график функции от двух переменных. С этим проблем нет, рисую.. вот только график получается "полупрозрачным" с одной стороны, и нормальным с другой - от этого нужно избавиться. Рисую четырехугольниками, вот один из них:
z := self.z[xi, yi];
Vertex(x, y, z);
z := self.z[xi+1, yi];
Vertex(x1, y, z);
z := self.z[xi+1, yi+1];
Vertex(x1, y1, z);
z := self.z[xi, yi+1];
Vertex(x, y1, z);
Используется один источник освещения. Материал "графика":
a[0] := 0.2; a[1] := 0.8; a[2] := 0.8; a[3] := 1;
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, @a);
Подскажите плз, кто знает...
ЗЫ: можно ли как-нить нарисовать сетку при включенном освещении? (после включения оного, линии перестали быть видными.. )
AlterEgo of WondeRu (2005-05-23 10:47:00) [1]yurique (22.05.05 23:20) [7]
будь у меня время, я бы разобрался.. и по рамблеру полазил бы.. и по гуглю :) .. а так горит..
мдя... уважение так и прёт!
П7 (2005-05-23 01:28:00) [2]Нормали, это такие хреньки, вектора, которые определяют, как бы это, угол отражения падающего на вершину цвета. Или там полигон...
Т.е. когда ты треугольник рисуешь, то предварительно впихиваешь нормаль. И тогда свет нормально освещает поверхность.
В общем, это единичный вектор - перпендикулярный плоскости полигона.
yurique (2005-05-22 23:36:00) [3]ps: а освещение использовать хотел, чтоб график можно было рассмотреть :) - иначе просто контур.. но вместо света, я использовал цвет.. изменяя его в заыисимости от высоты например...
yurique (2005-05-22 23:20:00) [4]2 П7:
будь у меня время, я бы разобрался.. и по рамблеру полазил бы.. и по гуглю :) .. а так горит.. к тому же, я имел в виду с какой стороны тут нормали прикрутить - т.е. зачем?
впрочем, вопрос исчерпался.. всё работает: не хватало действительно
glEnable(GL_DEPTH_TEST);
и
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
yurique (2005-05-22 23:12:00) [5]2 VitGun:
я писал ;) :
>я вообще решил отказаться от освещенности...
вот вроде подобрался к сути проблемы: я не включал glEnable(GL_DEPTH_TEST).. теперь включил, теперь почти всё почти работает :)
П7 (2005-05-22 23:12:00) [6]Собственно про нормали тебе расскажет твой друг РАМБЛЕР! (:
VitGun (2005-05-22 23:04:00) [7]Вопрос назрел: "А зачем ты используешь источник света?" Коли ты сторишь всего лишь график.
yurique (2005-05-22 22:43:00) [8]2 Кефир87:
спасибо :)
я вообще решил отказаться от освещенности - график чётче видно.. но тем не менее "глюк" остаётся - с одной стороны график выглядит нормально, с противоположной - как бы просвечивается, вообще мне трудно понять что "происходит" - но картинка получается противная.. может тут что-то связано с буфером глубины..
2 VitGun:
что ты имеешь в виду? я с 3д не особо знаком.. это вообще первое что, пишу в 3д..
зы: может я не правильно использую
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
и нужно ли это вообще испольщовать?
Кефир87 (2005-05-22 20:54:00) [9]
> нарисовать сетку при включенном освещении?
glDisable(GL_LIGHTINING);
narisovat_setka();
glEnable(GL_LIGHTINING);
VitGun (2005-05-22 19:46:00) [10]ИМХО. Нормали строй....