Тест глубины OpenGL не работает при рендеринге ортопроекции выбранных граней сеткиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Тест глубины OpenGL не работает при рендеринге ортопроекции выбранных граней сетки

Сообщение Anonymous »

Я пытаюсь визуализировать ортогональную проекцию выбранных граней сетки в OpenGL. В сетке есть дыра, и я хочу отображать только лица, видимые с точки зрения наблюдателя. Однако существует проблема со скрытыми поверхностями, которые все еще визуализируются. Чтобы справиться с этой проблемой, я включил тестирование глубины, но, похоже, оно не дало никакого эффекта. Хотя я настроил код так, чтобы он пропускал скрытые лица, они все равно видны при окончательном рендеринге. Как это исправить?
часть моего кода:

Код: Выделить всё

// Setting up the depth test and culling
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_GREATER);  // Using GL_GREATER for depth testing
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

// Clearing color and depth buffer
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Clear color and depth buffers

// Drawing selected faces
glBegin(GL_TRIANGLES);
for (const auto& face : m.cm.face) {
if (!face.IsD() && face.IsS()) {  // Only process selected faces
for (int i = 0; i < 3; ++i) {
const auto& vert = *face.V(i);
const vcg::TexCoord2& texCoord = face.WT(i);
glTexCoord2f(texCoord.U(), texCoord.V());
glVertex3f(vert.P().X(), vert.P().Y(), vert.P().Z());
}
}
}
glEnd();
и я установил glOrtho(minX, maxX, minY, maxY, minZ - 1.0f, maxZ + 1.0f);
это сетка:
Изображение

отверстие типа:
Изображение
< /p>
и это мой результат img:
[img]https://i.sstatic.net /YjA0Xw3x.png[/img]

Мне не нужна часть текстуры, которую «Я-наблюдатель» не может видеть, на передней части сетки.
Я включил тестирование глубины с помощью glEnable(GL_DEPTH_TEST) и установил glDepthFunc(GL_GREATER). Я также включил отсечение обратной грани с помощью glEnable(GL_CULL_FACE) и glCullFace(GL_BACK), но эта настройка, похоже, не устраняет скрытые лица в отображаемом выводе. Учитывая, что в сетке есть дыра, как я могу гарантировать, что только видимые грани отображаются правильно, не показывая скрытые поверхности?
Я попробовал изменить исходный glOrtho(minX, maxX, minY, maxY , minZ - 1.0f, maxZ + 1.0f); to glOrtho(minX, maxX, minY, maxY, minZ - 1.0f, maxZ - 1.5f);
Эффект такой: показано на рисунке:
Изображение
Но это не тот эффект, который мне нужен. Я хочу нарисовать текстуру, которую вижу в орфографическом виде. При этом будут удалены части, которые не следует удалять, но это все равно будет выглядеть немного раздражающе (часть в красной рамке на рисунке).

Подробнее здесь: https://stackoverflow.com/questions/791 ... ted-mesh-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»