Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Стиль линии в OpenGL


Автор: Vanoo 19.8.2005, 21:43
Здравствуйте!
Есть ли в OpenGL возможность устанавливать стили линии?
Насколько я знаю,прирывистая линия делается наложением шаблона. Но это влечет за собой проблему некоторой не симетричности на стыке шаблонов... Естьли вожножность иначе рисовать прирывистую линию?
Есть ли возможность округлять разрывы прирывистой линии или возможность округлять концы обычной линии?
Заранее благодарен за ответы!!!!

Автор: CD20 20.8.2005, 11:02
progz.ru - тут есть перевод красной книги. Там все основы распианы. Вроде можно менять стиль. См. там.

Автор: Vanoo 20.8.2005, 19:33
CD20
Я там уже искал... К сожалению, не чего там не нашел....

Автор: MaxB 22.8.2005, 16:13
Смотри функцию:

void glLineStipple( GLint factor, GLushort pattern);

Автор: Vanoo 22.8.2005, 19:26
MaxB
Эту функцию я имел в виду когда писал о наложении шаблона...
Но на сколько я понимаю округлость концов и разрывов с помощью этой функции организовать не возможно!!! Может я что-то не так понял??? smile

Автор: WolfMax 24.10.2005, 14:15
прерывистые линии, делается это путем наложения маски при помощи следующей функции:
Код

void glLineStipple(GLint factor, GLushort pattern   );

Второй параметр задает саму маску. Например, если его значение равно 255(0x00FF), то, чтобы вычислить задаваемую маску, воспользуемся калькулятором. В двоичном виде это число выглядит так: 0000000011111111, т.е. всего 16 бит. Старшие восемь установлены в ноль, значит тут линии не будет. Младшие установлены в единицу, тут будет рисоваться линия. Первый параметр определяет, сколько раз повторяется каждый бит. Скажем, если его установить равным 2, то накладываемая маска будет выглядить так:

00000000000000001111111111111111

Далее приведен исходный текст с комментариями для наглядной демонстрации, что к чему.
Код

glLineWidth(1);       // ширину линии 
                      // устанавливаем 1
 glBegin(GL_LINES);
 
  glColor3d(1,0,0);     // красный цвет
  glVertex3d(-4.5,3,0); // первая линия
  glVertex3d(-3,3,0); 

  glColor3d(0,1,0);     // зеленый
  glVertex3d(-3,3.3,0); // вторая линия
  glVertex3d(-4,3.4,0); 
  
 glEnd();

 
 glLineWidth(3);      // ширина 3
 glBegin(GL_LINE_STRIP); // см. ниже
 
  glColor3d(1,0,0);
  glVertex3d(-2.7,3,0);
  glVertex3d(-1,3,0);

  glColor3d(0,1,0);
  glVertex3d(-1.5,3.3,0); 
  glColor3d(0,0,1);
  glVertex3d(-1,3.5,0); 
 
 glEnd();

 
 glLineWidth(5);
 glEnable(GL_LINE_SMOOTH); 
 glEnable(GL_LINE_STIPPLE); // разрешаем рисовать 
                            // прерывистую линию
 glLineStipple(2,58360);    // устанавливаем маску
                            // пояснения см. ниже


 glBegin(GL_LINE_LOOP);

  glColor3d(1,0,0);
  glVertex3d(1,3,0);
  glVertex3d(4,3,0);

  glColor3d(0,1,0);
  glVertex3d(3,2.7,0); 
  glColor3d(0,0,1);
  glVertex3d(2.5,3.7,0); 
 
  glEnd();

 glDisable(GL_LINE_SMOOTH);
 glDisable(GL_LINE_STIPPLE);




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)