Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 2
Регистрация: 22.04.2015
Сообщений: 27

Неправильная отрисовка текстур в OpenGL

27.09.2016, 19:33. Показов 1478. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня, недавно начал изучать как работать с графикой и решил повторить пример из урока, а именно - вращающийся кубик. Но столкнулся с такой проблемой: некоторые текстуры, расположенные дальше(глубже) самых ближних, отрисовываются поверх них.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <SFML/Graphics.hpp>
#include <SFML/OpenGl.hpp>
#include <glut.h>
using namespace sf;
 
int main()
{
    RenderWindow window(VideoMode(800, 600), "SFML OpenGL");
 
    Texture back;
    back.loadFromFile("resourses/background.jpg");
 
    Sprite background(back);
 
    GLuint texture = 0;
    {
        Image image;
        image.loadFromFile("resourses/texture.jpg");
 
        glGenTextures(1, &texture);
        glBindTexture(GL_TEXTURE_2D, texture);
        gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, image.getSize().x, image.getSize().y, GL_RGBA, GL_UNSIGNED_BYTE, image.getPixelsPtr());
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    }
 
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);
    glClearDepth(1.f);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90.f, 1.f, 1.f, 500.f);
    glEnable(GL_TEXTURE_2D);
 
    Clock clock;
 
    while (window.isOpen()) {
        Event event;
        while (window.pollEvent(event)) {
            if (event.type == Event::Closed)
                window.close();
        }
 
        float time = clock.getElapsedTime().asSeconds() * 100;
        float size = 20.f;
 
        window.pushGLStates();
        window.draw(background);
        window.popGLStates();
 
        glClear(GL_DEPTH_BUFFER_BIT);
        glEnable(GL_DEPTH_TEST);
 
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glTranslatef(0, 0, -100);
        glRotatef(time, 50, 50, 0);
 
        glBindTexture(GL_TEXTURE_2D, texture);
 
        glBegin(GL_QUADS);
 
        glTexCoord2f(0, 0); glVertex3f(-size, -size, -size);
        glTexCoord2f(1, 0); glVertex3f(size,  -size, -size);
        glTexCoord2f(1, 1); glVertex3f(size,   size, -size);
        glTexCoord2f(0, 1); glVertex3f(-size,  size, -size);
 
        glTexCoord2f(0, 0); glVertex3f(size,  -size, size);
        glTexCoord2f(1, 0); glVertex3f(-size, -size, size);
        glTexCoord2f(1, 1); glVertex3f(-size,  size, size);
        glTexCoord2f(0, 1); glVertex3f(size,   size, size);
 
        glTexCoord2f(0, 0); glVertex3f(-size, -size,  size);
        glTexCoord2f(1, 0); glVertex3f(-size, -size, -size);
        glTexCoord2f(1, 1); glVertex3f(-size,  size, -size);
        glTexCoord2f(0, 1); glVertex3f(-size,  size,  size);
 
        glTexCoord2f(0, 0); glVertex3f(size,  -size, -size);
        glTexCoord2f(1, 0); glVertex3f(size,  -size,  size);
        glTexCoord2f(1, 1); glVertex3f(size,   size,  size);
        glTexCoord2f(0, 1); glVertex3f(size,   size, -size);
 
        glTexCoord2f(0, 0); glVertex3f(-size, -size,  size);
        glTexCoord2f(1, 0); glVertex3f(size,  -size,  size);
        glTexCoord2f(1, 1); glVertex3f(size,  -size, -size);
        glTexCoord2f(0, 1); glVertex3f(-size, -size, -size);
 
        glTexCoord2f(0, 0); glVertex3f(-size,  size, -size);
        glTexCoord2f(1, 0); glVertex3f(size,   size, -size);
        glTexCoord2f(1, 1); glVertex3f(size,   size,  size);
        glTexCoord2f(0, 1); glVertex3f(-size,  size,  size);
 
        glEnd();
 
        window.display();
    }
 
    glDeleteTextures(1, &texture);
 
    return 0;
}
Миниатюры
Неправильная отрисовка текстур в OpenGL  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2016, 19:33
Ответы с готовыми решениями:

Неправильная отрисовка 3д модели
Я начал осваивать SFML и OpenGL. Я решил написать программу которая выводит и текстурирует простой куб. Вот код: #include...

Удаление текстур OpenGL
Ребята подскажите как удалить текстуру? Через метод glDeleteTextures, если да то какие параметры она принимает? И есть ли другой способ...

Неправильная отрисовка QGraphicsView
Доброго времени суток. Столкнулся со следующей проблемой. В конструкторе MainWindow создаю объекты сцены и вью, потом связываю их. Скрываю...

2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.09.2016, 19:35
https://www.cyberforum.ru/opengl/
0
1 / 1 / 2
Регистрация: 22.04.2015
Сообщений: 27
27.09.2016, 21:00  [ТС]

Не по теме:

Спасибо, за ссылку, буду в следующий раз сначала смотреть там (хотя в этот раз, даже найдя похожую тему, решить проблему сразу не удалось).



Переписал сам координаты вершин квадратов-сторон по прикрепленной картинке, и добавив glEnable(GL_CULL_FACE); добился необходимого результата.

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
glEnable(GL_CULL_FACE);  
 
        glBegin(GL_QUADS);
 
        glTexCoord2f(0, 0); glVertex3f(0,    0,    0);   //передняя
        glTexCoord2f(1, 0); glVertex3f(size, 0,    0);
        glTexCoord2f(1, 1); glVertex3f(size, 0,    size);
        glTexCoord2f(0, 1); glVertex3f(0,    0,    size);
 
        glTexCoord2f(0, 0); glVertex3f(0,    size, 0);   //левая
        glTexCoord2f(1, 0); glVertex3f(0,    0,    0);
        glTexCoord2f(1, 1); glVertex3f(0,    0,    size);
        glTexCoord2f(0, 1); glVertex3f(0,    size, size);
 
        glTexCoord2f(0, 0); glVertex3f(size, size, 0);   //задняя
        glTexCoord2f(1, 0); glVertex3f(0,    size, 0);
        glTexCoord2f(1, 1); glVertex3f(0,    size, size);
        glTexCoord2f(0, 1); glVertex3f(size, size, size);
 
        glTexCoord2f(0, 0); glVertex3f(size, 0,    0);   //правая
        glTexCoord2f(1, 0); glVertex3f(size, size, 0);
        glTexCoord2f(1, 1); glVertex3f(size, size, size);
        glTexCoord2f(0, 1); glVertex3f(size, 0,    size);
 
        glTexCoord2f(0, 0); glVertex3f(0,    0,    size);   //верхняя
        glTexCoord2f(1, 0); glVertex3f(size, 0,    size);
        glTexCoord2f(1, 1); glVertex3f(size, size, size);
        glTexCoord2f(0, 1); glVertex3f(0,    size, size);
 
        glTexCoord2f(0, 0); glVertex3f(0,    size, 0);   //нижняя
        glTexCoord2f(1, 0); glVertex3f(size, size, 0);
        glTexCoord2f(1, 1); glVertex3f(size, 0,    0);
        glTexCoord2f(0, 1); glVertex3f(0,    0,    0);
 
        glEnd();
Хотя по прежнему остается загадкой: почему у автора урока работало без этих изменений...
Миниатюры
Неправильная отрисовка текстур в OpenGL   Неправильная отрисовка текстур в OpenGL  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2016, 21:00
Помогаю со студенческими работами здесь

Неправильная отрисовка линии
Проблема с отрисовкой нулевой линии при чтении линии графика из массива. Нулевая линия рисуется тем же карандашом, что и сам график. Если...

Неправильная отрисовка фигур
Доброй ночи! Прошу помочь разобраться с ошибкой в работе программы-рисовалки (WPF). &lt;InkCanvas x:Name=&quot;MyCanvas&quot;...

Неправильная отрисовка Stroke у RoundedRect
Подскажите, пожалуйста, с чем связана непавильная отрисовка strok-а у адобовского RoundRect. Дело в том, что при рисовании строка явно...

Нанесение текстур в OpenGL
Помогите создать текстуру и нанести на объект. Раньше пользовался библиотекой &quot;glaux.h&quot;, через auxDIBImageLoad и прочее. ...

Наложение текстур в OpenGL
Пытаюсь начать писать 3D игру с помощью OpenGL, но вот ни одного тутора по наложению текстур для паскаля не нашёл, а для других языков я не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер