С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
ящюр
97 / 97 / 60
Регистрация: 15.03.2013
Сообщений: 528
Записей в блоге: 1
1

Скрыть невидимые ребра

23.11.2016, 12:24. Просмотров 399. Ответов 10
Метки нет (Все метки)

1.Есть код, который рисует пирамиду. Как и куда, что мне прописать чтобы скрывались невидимые грани. Перепробывал много чего, но либо ничего не видно, либо никаких изменений.
2. Работа glLookAt. тот же вопрос.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <GL\freeglut.h>
#include <iostream>
#include <math.h>
 
int versh = 40;
struct XZPos{
    GLfloat x;
    GLfloat z;
};
XZPos VerPos[40] ; // Всего точек внизу
XZPos ZXDef[40]; // Разница в координатах по оси Z или X
float Radius = 0.707;
void setVershPos(){
    int count = 0;
    
    for (float Pos = -0.5; Pos < 0.5; Pos += 0.1){
        // Левая[count] = Задняя[count + 10] = Правая[count+20] =  Передняя[count + 30]
        VerPos[count].z = ZXDef[count].z= VerPos[count + 30].x =ZXDef[count+30].x= -Pos;
        VerPos[count + 20].z = ZXDef[count+20].z =  VerPos[count + 10].x =ZXDef[count+10].x= Pos;
        count++;
    }
    for (int a = 0; a < 10; a++){
        VerPos[a].x =  -0.5;
        VerPos[a + 10].z = -0.5;
        VerPos[a + 20].x =  0.5;
        VerPos[a + 30].z = 0.5;
    }
    // На выходе имеем в VerPos позиции нижних точек для 4-х гранной пирамиды
}
void DRFigure(XZPos *fig){
        // Строит фигуру треугольниками с вершиной в у=0.5 и двумя вершинами из массива
    for (int a = 0; a < versh; a++){
        glBegin(GL_LINE_LOOP);
        glVertex3f(0, 0.5, 0);
        glVertex3f(fig[a].x, -0.5, fig[a].z);
        if (a == (versh - 1)){
            glVertex3f(fig[0].x, -0.5, fig[0].z);
        }
        else {
            glVertex3f(fig[a + 1].x, -0.5, fig[a + 1].z);
        }
        glEnd();
 
    }
}
void display(){
    
    glColor3f(1.0, 1.0, 0); // Устанавливаем цвет линий
    glRotatef(45.0, 1.0, 0, 0); // Поворот на угол по оси Х
    
    DRFigure(VerPos);   // Рисует пирамиду
    glEnd();
    glFlush();
    
        // ________END NEW________
        
    //gluLookAt(0, 0, -50.0, 0, 0, 0, 0, 1, 0);
        
 
}
 
int main(int argc, char** argv) {
    
    glutInit(&argc, argv);
 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    
    glutInitWindowSize(500, 500);
 
    glutInitWindowPosition(100, 140);
    glutCreateWindow("Test");
    
    setVershPos();
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    glutDisplayFunc(display);
    glutMainLoop();
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2016, 12:24
Ответы с готовыми решениями:

Убрать невидимые элементы сетки
Здравствуйте, строю поверхность безье, сетку этой поверхности, и, собственное...

При определённом угле поворота поверх рисуются невидимые (закрытые другими) части объекта
из известных недостатков своей программы точно знаю один - координаты z не в...

[OpenGL] Закрутить кубик вокруг ребра
Здравствуйте, друзья! у меня такая проблема - нужно закрутить кубик вокруг...

Матрицы поворота вокруг оси(ребра) куба
Здравствуйте, не могу понять как использовать матрицы поворота. Хотел сделать...

Невидимые отступы
function create(inputArray){ for (var i = 0, L = inputArray.length; i &lt; L;...

10
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
23.11.2016, 12:48 2
ящюр, добавить в начало display
C++
1
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
0
ящюр
97 / 97 / 60
Регистрация: 15.03.2013
Сообщений: 528
Записей в блоге: 1
23.11.2016, 13:40  [ТС] 3
Без изменений =(
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
23.11.2016, 13:47 4
ящюр, простите я вас не так понял. вы рисуете ребра, а нужно рисовать грани. тогда можно будет скрыть невидимые
0
ящюр
97 / 97 / 60
Регистрация: 15.03.2013
Сообщений: 528
Записей в блоге: 1
23.11.2016, 14:20  [ТС] 5
Я рисую треугольники если честно ))). Пирамида рисуется треугольниками, в последствии трансформируется в конус. И там и там видны "задние" линии.
0
Excalibur921
731 / 436 / 71
Регистрация: 12.10.2013
Сообщений: 2,937
23.11.2016, 14:20 6
Цитата Сообщение от ящюр Посмотреть сообщение
ерепробывал много чего, но либо ничего не видно, либо никаких изменений.
Как это? Это ж не алхимия…
Рисуете фигуру отрезками.
Находите критерий видимости каждому отрезку.
Решаете рисовать или нет…
Примерно так можно: если a0=1 то рисуем определенный отрезок иначе дальше. И так все отрезки фигуры.
Цитата Сообщение от ящюр Посмотреть сообщение
Работа glLookAt. тот же вопрос.
Какой тот же? Это команда куда смотрит камера и все.
0
ящюр
97 / 97 / 60
Регистрация: 15.03.2013
Сообщений: 528
Записей в блоге: 1
23.11.2016, 14:29  [ТС] 7
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Какой тот же? Это команда куда смотрит камера и все.
Ну вот вписал я в Display, например,
C++
1
gluLookAt(15.0, 15.0,15.0, 0, 0, 0, 0, 1, 0);
и никаких изменений я не вижу. А камера должна смотреть с позиции 15,15,15 на позицию 0,0,0.
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
23.11.2016, 14:47 8
Цитата Сообщение от ящюр Посмотреть сообщение
Я рисую треугольники если честно
вы рисуете ребра потому что GL_LINE_LOOP. если бы было например GL_POLYGON то были бы грани
1
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
24.11.2016, 15:00 9
Цитата Сообщение от ящюр Посмотреть сообщение
Перепробывал много чего,
Штатное средство glCullFace, правда тогда придется использовать glDrawElements или glDrawArrays, ну это и правильно.

Не стоит писать код рисующий тот или иной конкретный объект, напр пирамиду. Все объекты имеют вертексы, фейсы и нормали, поэтому и рисоваться все должны одним кодом, разница лишь в контейнерах что подаются на вход отрисовки
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,004
24.11.2016, 16:01 10
Igor3D, glCullFace не будет рисовать грани не являющиеся лицевыми. это фишка для увеличения производительности. рисование без нее все равно будет корректным. проблема в том что у ТС выводится именно ребра и glCullFace они до лампочки
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
24.11.2016, 17:15 11
Цитата Сообщение от vxg Посмотреть сообщение
проблема в том что у ТС выводится именно ребра и glCullFace они до лампочки
Я и советую рисовать полигоны, а чтобы был wireframe включить glPolygonMode(GL_LINE)
1
24.11.2016, 17:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2016, 17:15

Невидимые линии
Здравствуйте, не могу разобраться с алгоритмом Робертса, чтобы сделать...

Невидимые поля
Подскажите пожалуйста. В отчете есть таблица, поля в которой вычисляются с...

невидимые speedbutton
подскажите как сделать speedbutton невидимыми в программе Builder при запуске...


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

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

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