Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 5
1

OpenGL отсечение невидимых линий

17.04.2011, 15:23. Просмотров 6247. Ответов 7
Метки нет (Все метки)


На первом рисунке то что есть. На втором - как хотелось бы.
Т.е. вроде бы и каркасный режим(грани отрисованы), но в то же время невидимые линии не рисуются.
Z-буфер на каркас, разумеется не действует. Известно, что и то и другое сделано с помощью OpenGL.
Может кто подскажет как?
0
Миниатюры
OpenGL отсечение невидимых линий   OpenGL отсечение невидимых линий  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2011, 15:23
Ответы с готовыми решениями:

C++ OpenGL неправильный порядок прорисовки линий
Как видно из прикрепленного рисунка, есть некий треугольник, в который вписан треугольник, в...

Алгоритм удаления невидимых линий
В общем где можно найти любое описание и/или реализацию алгоритма удаления невидимых линий, именно...

Удаление невидимых линий и поверхностей
1.Представить тело (рисунок) как совокупность выпуклых многогранников. 2.Составить программу для...

Удаление невидимых линий(Z-буфер)
Здравствуйте! С графикой не знаком, а нужно нарисовать сложную 3D фигуру: 1)с удалением невидимых...

7
267 / 258 / 47
Регистрация: 08.10.2009
Сообщений: 554
17.04.2011, 20:10 2
z-буфер включен? glEnable(GL_DEPTH_TEST);
перед рисованием z-буфер очищен? glClear(GL_DEPTH_BUFFER_BIT);
0
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 5
17.04.2011, 20:27  [ТС] 3
да, и то и то сделано
0
267 / 258 / 47
Регистрация: 08.10.2009
Сообщений: 554
17.04.2011, 20:29 4
может код свой покажете?
0
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 5
17.04.2011, 20:43  [ТС] 5
Как-то так...Здесь он упрощен немного, так как в изначальном виде это часть модуля и было бы сложно разобраться. Но что касается вызова методов OpenGL то порядок сохранен.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public void Draw()
        {
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
 
            Gl.glLoadIdentity();
            Gl.glColor3i(0, 0, 0);
            Gl.glPushMatrix();
            Gl.glTranslated(simpleOpenGlControl1.Width / 2, simpleOpenGlControl1.Height / 2, 0);
            Gl.glMultMatrixd(Rot.Result1);
 
            Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE);
           
 
            Gl.glBegin(Gl.GL_QUADS);
           // левая грань
           Gl.glVertex3d(vertex[0].X / Scale, vertex[0].Y / Scale, vertex[0].Z / Scale);
           Gl.glVertex3d(vertex[3].X / Scale, vertex[3].Y / Scale, vertex[3].Z / Scale);
           Gl.glVertex3d(vertex[7].X / Scale, vertex[7].Y / Scale, vertex[7].Z / Scale);
           Gl.glVertex3d(vertex[4].X / Scale, vertex[4].Y / Scale, vertex[4].Z / Scale);
           // правая грань
           Gl.glVertex3d(vertex[1].X / Scale, vertex[1].Y / Scale, vertex[1].Z / Scale);
           Gl.glVertex3d(vertex[2].X / Scale, vertex[2].Y / Scale, vertex[2].Z / Scale);
           Gl.glVertex3d(vertex[6].X / Scale, vertex[6].Y / Scale, vertex[6].Z / Scale);
           Gl.glVertex3d(vertex[5].X / Scale, vertex[5].Y / Scale, vertex[5].Z / Scale);
           // нижняя грань
           Gl.glVertex3d(vertex[0].X / Scale, vertex[0].Y / Scale, vertex[0].Z / Scale);
           Gl.glVertex3d(vertex[3].X / Scale, vertex[3].Y / Scale, vertex[3].Z / Scale);
           Gl.glVertex3d(vertex[2].X / Scale, vertex[2].Y / Scale, vertex[2].Z / Scale);
           Gl.glVertex3d(vertex[1].X / Scale, vertex[1].Y / Scale, vertex[1].Z / Scale);
           // верхняя грань
           Gl.glVertex3d(vertex[4].X / Scale, vertex[4].Y / Scale, vertex[4].Z / Scale);
           Gl.glVertex3d(vertex[5].X / Scale, vertex[5].Y / Scale, vertex[5].Z / Scale);
           Gl.glVertex3d(vertex[6].X / Scale, vertex[6].Y / Scale, vertex[6].Z / Scale);
           Gl.glVertex3d(vertex[7].X / Scale, vertex[7].Y / Scale, vertex[7].Z / Scale);            
           // задняя грань
           Gl.glVertex3d(vertex[0].X / Scale, vertex[0].Y / Scale, vertex[0].Z / Scale);
           Gl.glVertex3d(vertex[1].X / Scale, vertex[1].Y / Scale, vertex[1].Z / Scale);
           Gl.glVertex3d(vertex[5].X / Scale, vertex[5].Y / Scale, vertex[5].Z / Scale);
           Gl.glVertex3d(vertex[4].X / Scale, vertex[4].Y / Scale, vertex[4].Z / Scale);
           // передняя грань
           Gl.glVertex3d(vertex[2].X / Scale, vertex[2].Y / Scale, vertex[2].Z / Scale);
           Gl.glVertex3d(vertex[3].X / Scale, vertex[3].Y / Scale, vertex[3].Z / Scale);
           Gl.glVertex3d(vertex[7].X / Scale, vertex[7].Y / Scale, vertex[7].Z / Scale);
           Gl.glVertex3d(vertex[6].X / Scale, vertex[6].Y / Scale, vertex[6].Z / Scale);
            Gl.glEnd();
 
           Gl.glFlush();
        }
0
267 / 258 / 47
Регистрация: 08.10.2009
Сообщений: 554
17.04.2011, 21:34 6
исходя из этого кода я бы посоветовал тебе убрать 12 строку, больше ничего не могу сказать в силу незнания OpenGL))
0
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
18.04.2011, 02:32 7
Насколько я знаю, OpenGL так не может. В каркасном режиме отсечение линий можно реализовать только вручную (знакомый недавно занимался этим вопросом).
0
77 / 35 / 0
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
18.04.2011, 21:50 8
Можно поступить след образом:
Настроить Z-буффер где-нить в процедуре инициализации сцены 1 раз.

C
1
2
3
4
/* Z-Buffer */
glEnable ( GL_DEPTH_TEST );     // вкл тест глубины
glDepthMask ( GL_TRUE ) // вкл запись в буффер глубины
glDepthFunc ( GL_LEQUAL );  // условие теста
далее рисуем нормальный кубик с отключенное записью в буффер цвета
C
1
2
glColorMask(0,0,0,0); 
glutSolidCube(1.0f);
… запись, по сути идет только в буффер глубины.
Следом, рисуем несколько увеличенный каркас этого же кубика, но уже с включенным буфером цвета

C
1
2
glColorMask(1,1,1,1);
glutWireCube(1.01f);
сырцы / учу прилагаются...
2
Вложения
Тип файла: rar C_GL02.rar (153.5 Кб, 130 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2011, 21:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

графика - отсечение линий
программа: задаются координаты прямоугольника и прямой и ту часть прямой, которая выходит за...

Составьте программу построения куба с рисование невидимых линий
Помогите написать программу построения куба с рисование невидимых линий.

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.