Здравствуйте! Возникла небольшая проблемка с выводом линий с Делфи с помощью 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)
Верхняя линия справа жирнее других.
А почему я не вижу никакого утолщения? я вроде проверял в граф.редакторе, скопировав куски и соединив.. Мне кажется, все ровно.
Автор: Sensitive 22.10.2009 13:15
У меня на мониторе вроде бы тоже всё ровно, а в университете действительно та линия толще. Я так понимаю, наверное, из-за типа соединения линий, хотя ...не знаю.
Автор: volvo 22.10.2009 13:22
Ты бы код полностью привела, проверили бы, толще линия или нет. А то гадать на кофейной гуще - как то не хочется...
Автор: Sensitive 27.10.2009 17:42
Прикреплю полностью проект. Посмотрите, пожалуйста.
Попробуй добавить 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
Спасибо.
Цитата
Нулевую толщину он приобрести никак не может. Гоаметрическая оптика, однако.
Даааа? А то, что когда его толщина становится меньше пиксела, он перестаёт рисоваться?