Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ OpenGL Линии

Автор: Sensitive 22.10.2009 1:26

Здравствуйте!
Возникла небольшая проблемка с выводом линий с Делфи с помощью OpenGL.
Нужно вывести линии пучком из центра, к примеру 6 штук.
Сделала вот таки образом:

glBegin(GL_LINE_STRIP);
for i:=0 to 2 do
begin
glVertex2f(0.5,0.5);
glVertex(i/2,i*sin(pi));
end;
for i:=0 to 2 do
begin
glVertex2f(0.5,0.5);
glVertex(i/2,i*cos(pi/2)+1);
end;
glEnd;


Тип соединения должен быть обязательно GL_LINE_STRIP. Выводит одну из линий более жирную, чем все остальные. Что сделано не верно?
Прикрепляю изображение (это результат работы программы). Верхняя линия справа жирнее других.


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Lapp 22.10.2009 11:11

Цитата(Sensitive @ 21.10.2009 22:26) *
Верхняя линия справа жирнее других.
А почему я не вижу никакого утолщения? blink.gif я вроде проверял в граф.редакторе, скопировав куски и соединив.. Мне кажется, все ровно.

Автор: Sensitive 22.10.2009 13:15

У меня на мониторе вроде бы тоже всё ровно, а в университете действительно та линия толще. Я так понимаю, наверное, из-за типа соединения линий, хотя ...не знаю.

Автор: volvo 22.10.2009 13:22

Ты бы код полностью привела, проверили бы, толще линия или нет. А то гадать на кофейной гуще - как то не хочется...

Автор: Sensitive 27.10.2009 17:42

Прикреплю полностью проект. Посмотрите, пожалуйста.


Прикрепленные файлы
Прикрепленный файл  LabOpenGL.zip ( 5.79 килобайт ) Кол-во скачиваний: 213

Автор: volvo 27.10.2009 18:58

Попробуй добавить glEnable(GL_LINE_SMOOTH), посмотри, изменит ли это картинку там, где сейчас тебе кажется, что линии разной толщины.

Автор: TarasBer 28.10.2009 2:06

У меня тоже есть вопрос по толщине линий.
Насколько я понял, можно рисовать линию только фиксированной толщины? То есть сначала говоришь - толщина 2, и он и рисует ровно 2 пиксела по сей длине.
А мне хотелось бы, чтобы толщина данного конкретного куска линии зависела от её удалённости от наблюдателя. Это бы очень помогло при отрисовке некоторых элементов, а то так либо вдалеке что-то страшное, либо вблизи паутина.

Автор: andriano 28.10.2009 3:11

Цитата(TarasBer @ 27.10.2009 22:06) *

У меня тоже есть вопрос по толщине линий.
Насколько я понял, можно рисовать линию только фиксированной толщины? То есть сначала говоришь - толщина 2, и он и рисует ровно 2 пиксела по сей длине.
А мне хотелось бы, чтобы толщина данного конкретного куска линии зависела от её удалённости от наблюдателя. Это бы очень помогло при отрисовке некоторых элементов, а то так либо вдалеке что-то страшное, либо вблизи паутина.

Элементарно - каждую линию рисуешь в виде узкого прямоугольника, лежащего в плоскости параллельной экрану.

Автор: TarasBer 28.10.2009 4:05

Цитата(andriano @ 27.10.2009 23:11) *

Элементарно - каждую линию рисуешь в виде узкого прямоугольника, лежащего в плоскости параллельной экрану.


Ничего не элементарно.
Во-первых, эту плоскость ещё вычислять надо, и не параллельной экрану, а лежащей под наименьшим углом к экрану, скажем так.
Во-вторых, на расстоянии 10 метров этот прямоугольник приобретёт нулевую толщину.
В-третьих, рисовать и прямоугольник, и линию нелогично и затратно. Рисование линии переменной толшины реализуется для дровописателя (но не для пользователя этих дров, в которые такая возможность не встроена) довольно просто, так в чём проблема?

Автор: andriano 28.10.2009 13:06

Цитата(TarasBer @ 28.10.2009 0:05) *

Ничего не элементарно.
Во-первых, эту плоскость ещё вычислять надо, и не параллельной экрану, а лежащей под наименьшим углом к экрану, скажем так.
Во-вторых, на расстоянии 10 метров этот прямоугольник приобретёт нулевую толщину.
В-третьих, рисовать и прямоугольник, и линию нелогично и затратно. Рисование линии переменной толшины реализуется для дровописателя (но не для пользователя этих дров, в которые такая возможность не встроена) довольно просто, так в чём проблема?
Ты хочешь конкретный совет, как можно решить проблему, или просто поговорить о несовершенстве Вселенной?
Да, насчет плоскости параллельной экрану я поспешил, не подумав.
Вычисляется элементарно, если интересуют подробности, можно почитать здесь: http://www.gamedev.ru/code/terms/Billboard
Нулевую толщину он приобрести никак не может. Гоаметрическая оптика, однако. И законы перспективы.
По поводу "затратно" - это ты скажи производителям видеокарт. Зачастую бывает наоборот, что нарисовать полигон намного дешевле, чем линию.
А проблем, собственно, нет. Тебе указали рабочий вариант решения проблемы. Если ты считаешь, что он чем-то неудобен - напиши для него свою обертку, которой лично тебе будет удобно пользоваться.
Готовых решений на все случаи жизни не бывает - что-то приходится делать самому.

Автор: TarasBer 28.10.2009 17:31

Цитата(andriano @ 28.10.2009 9:06) *

Ты хочешь конкретный совет, как можно решить проблему, или просто поговорить о несовершенстве Вселенной?

Конкретный ответ. Который бы подошёл для ати рейдж, у которой опенгл тупо эмулируется, то есть писать 3д вручную не намного дороже.
Цитата

Вычисляется элементарно, если интересуют подробности, можно почитать здесь: http://www.gamedev.ru/code/terms/Billboard

Спасибо.
Цитата

Нулевую толщину он приобрести никак не может. Гоаметрическая оптика, однако.

Даааа? А то, что когда его толщина становится меньше пиксела, он перестаёт рисоваться?