ПрограммированиеФорумГрафика

Текстуры в OpenGL C++ (5 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#60
15:09, 18 фев 2020

Очередной вопрос: почему это происходит с некоторыми изображениями, а с некоторыми - нет?
Думаю на SOIL
Screenshot_20200218_170336 | Текстуры в OpenGL C++

#61
15:15, 18 фев 2020

Mifls_X
Подозреваю что это два треугольника нарисованных квадом и у верхних или нижних вершин перепутаны текстурные координаты.

#62
15:24, 18 фев 2020

В том то и дело, что нет
Меняю название файла текстуры, и все норм:
2 | Текстуры в OpenGL C++

#63
15:27, 18 фев 2020

неверно считаны данные с текстуры не учтено выравнивание

#64
15:31, 18 фев 2020

Читаю так:
#include <SOIL/SOIL.h>
unsigned char* image = SOIL_load_image("../cat.jpg", &width, &height, 0, SOIL_LOAD_RGB);

#65
15:33, 18 фев 2020

Какой размер текстуры у тебя?
Попробуй перед заливкой в текстуру - glPixelStorei(GL_UNPACK_ALIGNMENT, 2)

Типичные Ошибки
а конкретно Texture upload and pixel reads

#66
16:02, 18 фев 2020

glPixelStorei(GL_UNPACK_ALIGNMENT, 2) не помог.
Но что мы делаем, когда код не работает?
Правильно! Подключаем метод тыка!
glPixelStorei(GL_UNPACK_ALIGNMENT, 1) помог=)

Спасибо=)

#67
16:10, 18 фев 2020

Текстуры лучше грузить в формате RGBA, вроде как RGB всё равно эмулируется драйвером.

#68
18:35, 18 фев 2020

Mifls_X

lassons

#69
19:12, 18 фев 2020

Добавил структуру папок и снова проблема с текстурами:
Game/Room.h

#include "../Engine/Texture.h"
floorFigure.texture = LoadTexture(strdup("../Resources/smile.png"));

А теперь внимание: размер текстуры он загружает, а вместо текстуры - мусор.
2 | Текстуры в OpenGL C++

Если же из main.cpp сделать следующее, все ОК

#include "Game/Room.h"
Room room;
room.floorFigure.texture = LoadTexture(strdup("../Resources/smile.png"));

Ну и неизменный GitLab: https://gitlab.com/Mifls/opengl-lessons/

#70
19:57, 18 фев 2020

Нашел ошибку:
Класс инициализируется как-то не до конца.
Решение: room = *(new Room());

#71
20:16, 18 фев 2020

Mifls_X
> room = *(new Room());
привет утечкам памяти.

#72
21:13, 18 фев 2020

А как лучше?

#73
21:38, 18 фев 2020

Mifls_X
> А как лучше?
сейчас они тебе насоветуют всякие умные указатели.
Но ты их не слушай. Просто пойми, что если ты делаешь new, то делаешь это в указатель, например вот так:

Room * r = nullptr;
...
r = new Room;

r - это твой "ключ" доступа к куску памяти выделенной в куче. Потеряешь его, память утечет.
Когда ты знаешь, что дальше в твоей программе эта память не нужна, то освобождаешься от нее снова с помощью "ключа" r:

delete r;
#74
21:45, 18 фев 2020

Mifls_X
> А как лучше?
твоя проблема в том что у тебя сейчас есть глобальная переменная room конструктор которой вызывается еще до входа main() в то время когда у тебя еще не создан контекст opengl который в свою очередь необходим для загрузки текстур. Если не сильно переписывать то решений несколько:
1)

#include <memory>

std::unique_ptr<Room> room; // вместо Room room;


room = std::make_unique<Room>(); // вместо room = *(new Room());

2)

// вынести содержание конструктора в отдельный метод, anti RAiI подход.
room.Init(); // // вместо room = *(new Room());
Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.