Текущий архив: 2003.05.22;
Скачать: CL | DM;
Вниз
Видимые/невидимые линии Найти похожие ветки
← →
Racer (2003-01-27 23:14) [0]Проблемка у меня. Как нарисовать фигуру с использованием OpenGL (или без него) т.о., чтобы она была прозрачной, видимые ребра были сплошными, а невидимые - пунктирными. При этом фигура должна вращаться. Если можно - мыльте. Буду крайне благодарен за примеры и/или ссылки, где их можно взять. Прога должна пахать под любой Win32.
← →
pasha676 (2003-01-28 10:03) [1]Насчет линий не знаю - а полупрозрачность можно достич или текстурами или заданием для цветов альфа канала.
← →
i-C3H7OH (2003-01-28 15:46) [2]фигура-то выпуклая? (в классическом понимании)
← →
Racer (2003-01-28 22:23) [3]to Pasha676:
Мне нужна не полупрозрачность, а рисунок типа геометрической проекции (как в школе на доске).
----------------------
to i-C3H7OH
Выпуклая. В частности: куб, тетраэдр, конус, etc.
← →
pasha676 (2003-01-29 10:41) [4]Как делать проекции я не знаю. Но с удовольствием почитаю, как это надо делать :).
← →
i-C3H7OH (2003-01-30 15:25) [5]стадартных способов я не вижу
можно для каждой грани вычислять внешнюю нормаль
если нормаль направлена от экрана, то ребра, ее окружающие, рисуем пунктиром...
← →
pasha676 (2003-01-30 16:19) [6]Мне кажется в ОпеньГЛ можно сделать проекцию. Вроде даже просто в свойствах камеры что-то такое было. Но вот линии пунктиром. Это наверное нельзя.
← →
Racer (2003-01-30 23:01) [7]to pasha676
Насчет самой проекции - проблем нет, вся закавыка именно в пунктире
---------------
to i-C3H7OH
Идея неплохая. Только подскажи, как рисовать пунктиром, этого я не знаю.
← →
pasha676 (2003-01-31 10:54) [8]
> Насчет самой проекции - проблем нет, вся закавыка именно
> в пунктире
Раскажи как.
← →
Racer (2003-02-01 14:16) [9]При рисовании указываешь тип примитива не GL_POLYGON, а GL_LINE_LOOP. Пример:
Procedure DrawCube; {КУБ}
const
CubeP1: array[0..5,0..2] of glFloat = (( 0.7, 0.7, 0.7),
( 0.7, 0.7,-0.7),
(-0.7, 0.7, 0.7),
( 0.7, 0.7, 0.7),
(-0.7, 0.7, -0.7),
(-0.7, -0.7, -0.7));
CubeP2: array[0..5,0..2] of glFloat = ((-0.7, 0.7, 0.7),
(0.7, -0.7, -0.7),
(-0.7, 0.7, -0.7),
(0.7, -0.7, 0.7),
(-0.7, 0.7, 0.7),
(0.7, -0.7, -0.7));
CubeP3: array[0..5,0..2] of glFloat = ((-0.7, -0.7, 0.7),
(-0.7, -0.7, -0.7),
(-0.7, -0.7, -0.7),
(0.7, -0.7, -0.7),
(0.7, 0.7, 0.7),
(0.7, -0.7, 0.7));
CubeP4: array[0..5,0..2] of glFloat = ((0.7, -0.7, 0.7),
(-0.7, 0.7, -0.7),
(-0.7, -0.7, 0.7),
(0.7, 0.7, -0.7),
(0.7, 0.7, -0.7),
(-0.7, -0.7, 0.7));
CubeNL: array[0..5,0..2] of glFloat = ((0.0, 0.0, 1.0),
(0.0, 0.0, -1.0),
(-1.0, 0.0, 0.0),
(1.0, 0.0, 0.0),
(0.0, 1.0, 0.0),
(0.0, -1.0, 0.0));
var
i: integer;
begin
// glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @glfMaterialColor2);
glTranslatef(0.0 , 0.0, 0.0);
case fill of
0 : for i:=0 to 5 do
glBegin(GL_POLYGON);
glNormal3f(CubeNL[i,0],CubeNL[i,1],CubeNL[i,2]);
glVertex3f(CubeP1[i,0],CubeP1[i,1],CubeP1[i,2]);
glVertex3f(CubeP2[i,0],CubeP2[i,1],CubeP2[i,2]);
glVertex3f(CubeP3[i,0],CubeP3[i,1],CubeP3[i,2]);
glVertex3f(CubeP4[i,0],CubeP4[i,1],CubeP4[i,2]);
glEnd;
end;
1 : begin for i:=0 to 5 do
glBegin(GL_LINE_LOOP);
glNormal3f(CubeNL[-i,0],CubeNL[-i,1],CubeNL[-i,2]);
glVertex3f(CubeP1[i,0],CubeP1[i,1],CubeP1[i,2]);
glVertex3f(CubeP2[i,0],CubeP2[i,1],CubeP2[i,2]);
glVertex3f(CubeP3[i,0],CubeP3[i,1],CubeP3[i,2]);
glVertex3f(CubeP4[i,0],CubeP4[i,1],CubeP4[i,2]);
glEnd;
end;
end;
end;
Это просто вырезка из моей проги, так что не обращай внимания на левые переменные типа fill...
← →
i-C3H7OH © (2003-02-02 04:03) [10]
штриховка
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, $0F0F);
......
glDisable(GL_LINE_STIPPLE);
← →
Racer (2003-02-02 23:17) [11]Спасибо, i-C3H7OH.
А ты случаем не знаешь, где найти готовые геом. фигуры (типа различных произвольных конусов и т.д.). Сильно в лом самому нормали считать...
← →
i-C3H7OH © (2003-02-03 16:40) [12]насчет многоугольников не знаю
всякие модели можно найти напр. на 3dcafe.com
я когда тоже рисовал такое всегда сам задавал вершины, но это изврат.
к тому же вершины граней должны чередоваться в таком порядке, чтобы нормаль, вычисляемая ОпенГЛ (или самим), была направлена наружу.
приходилось тестировать каждую грань поочереди..
кстати насчет штриховки можно попробовать такой прием
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
DrawFigure;
glCullFace(GL_BACK);
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, $0F0F);
DrawFigure;
glDisable(GL_LINE_STIPPLE);
glDisable(GL_CULL_FACE);
при включенни GL_CULL_FACE задняя и передняя стороны определяются порядком вершин
← →
Racer (2003-02-04 02:05) [13]Если не секрет, то как именно порядок вершин влияет на определение грани (перед./зад.)? Например, в кубе?
← →
i-C3H7OH © (2003-02-04 12:26) [14]ну как, смотрим на треугольник, если вершины чередуются скажем против часовой стрелки - видим перед, иначе - зад:)
поэкспериментируй с режимом GL_CULL_FACE, чтобы окончательно разобраться.
← →
Ketmar © (2003-02-05 20:46) [15]>Racer (02.02.03 23:17)
GLUT.
Satanas Nobiscum! 05-Feb-XXXVIII A.S.
← →
Racer © (2003-02-09 23:40) [16]i-C3H7OH,
как сделать так, чтобы при рисовании отображались только передние (видимые) грани, т.е., например, при использовании примитива GL_LINE_LOOP фигура была якобы непрозрачной. Именно якобы, т.к. нужно внутри нарисовать еще фигуру, и она должна быть видна.
← →
i-C3H7OH © (2003-02-10 17:09) [17]не понимаю. что значит якобы прозрачный? либо прозрачный, либо нет.
скажу по секрету я уже накодил нечто подобное. просто интересно было. скажу вот что. так как исплоьзуем пунктир, каждое ребро должно рисоваться только 1 раз, иначе пунктир будет накладываться и смазываться. т.е. сделать 1 GL_LINE_LOOP все это проблематично.( по этой же причине не проходит ГЛЮТ)
поэтому я делал так (ч-з задницу, понимаю). каждое ребро рисуется 1 раз пунктиром либо сплошной. для этого создаем таблицу этих ребер. каждая грань тестируется видна она или нет. если да, то ребра ее окаймляющие назначаются сплошными.
потом по таблице рисуем ребра.
примерно так. сложно, но работает без проблем. могу выслать исходник
← →
Racer © (2003-02-10 22:22) [18]Буду крайне признателен, если вышлешь. По секрету - это мой диплом. Т.е. прога, которая показывает различные фигуры, но так, чтобы их можно было покрутить, посмотреть в варианте, когда видны только грани и когда видна сплошная фигура + сечения + разверстка.
Мыль mad.racer@mail.ru
Страницы: 1 вся ветка
Текущий архив: 2003.05.22;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.012 c