Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2011, 02:51   #1
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию opengl трабл с текстурами

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


каким-то образом получается вот эта:


как это исправить?

буду рад, если кто-то поможет. заранее благодарен
FanRa3 вне форума Ответить с цитированием
Старый 13.08.2011, 18:37   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от FanRa3 Посмотреть сообщение
как это исправить?
А код где? Причины могут быть разными, может глубина цвета не та, а может и та.
eoln вне форума Ответить с цитированием
Старый 13.08.2011, 18:54   #3
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Код:
if fileexists(cloak) then
begin
src.LoadFromFile(cloak);
bmp.Width:=11;
bmp.Height:=17;
bmp.Canvas.CopyRect(rect(0,0,11,17),src.Canvas,rect(0,0,11,17));
bmp.SaveToFile('b.bmp');
loadtexture('b.bmp',tex,false);
deletefile('b.bmp');
end;
//------------------------------------------------------------------------------------
glBegin(GL_QUADS);
glNormal3f(0,0,0);
 
glTexCoord3D(0,0,0);
glVertex3f(-1.265,-1.955,0);
 
glTexCoord3D(1,0,0);
glVertex3f(1.265,-1.955,0);
 
glTexCoord3D(1,1,0);
glVertex3f(1.265,1.955,0);
 
glTexCoord3D(0,1,0);
glVertex3f(-1.265,1.955,0);
glEnd;
FanRa3 вне форума Ответить с цитированием
Старый 13.08.2011, 22:01   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Всё приведённое работает, показывай процедуру loadtexture.
Исходный src - это png? Попробуй не удалять bmp, а посмотреть нормально ли там.
eoln вне форума Ответить с цитированием
Старый 13.08.2011, 22:34   #5
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Всё приведённое работает, показывай процедуру loadtexture.
Исходный src - это png? Попробуй не удалять bmp, а посмотреть нормально ли там.
нет. src - это bmp. loadtexture взял из Textures.pas. вот архив с теми текстурами, которые не хотят нормально ложиться
http://rghost.ru/17865841
FanRa3 вне форума Ответить с цитированием
Старый 13.08.2011, 22:51   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

1) А другие нормально грузятся?
2) Если src это bmp, то зачем его снова в bmp конвертировать.
3) Даже если так, то вышеизложенный код + Textures.pas успешно проходит испытание. Возможно, неправильно инициализирована OpenGL. Чтобы не гадать, приаттач проект
eoln вне форума Ответить с цитированием
Старый 14.08.2011, 01:59   #7
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

http://rghost.ru/17884981
FanRa3 вне форума Ответить с цитированием
Старый 14.08.2011, 12:25   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Используй BMP размерами кратными 8. Например, вместо 110х170 надо 112х168.
eoln вне форума Ответить с цитированием
Старый 14.08.2011, 12:59   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в офф доке присутствует такая формула на размеры текстур.
Цитата:
width

Specifies the width of the texture image including the border if any. If the GL version does not support non-power-of-two sizes, this value must be n
2
+ 2 ⁡ border
for some integer n. All implementations support texture images that are at least 64 texels wide.
height

Specifies the height of the texture image including the border if any. If the GL version does not support non-power-of-two sizes, this value must be m
2
+ 2 ⁡ border
for some integer m. All implementations support texture images that are at least 64 texels high.
на МСДН говорят что лучше всегда так делать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.08.2011, 14:15   #10
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

делаю вот так:
Код:
src.LoadFromFile(cloak);
bmp.Width:=88;
bmp.Height:=136;
bmp.Canvas.CopyRect(rect(0,0,88,136),src.Canvas,rect(0,0,11,17));
bmp.SaveToFile('b.bmp');
loadtexture('b.bmp',tex,false);
deletefile('b.bmp');
получается вот это:

когда же я обрезаю картинку вручную и подгружаю её, она накладывается нормально, но становится немного сине-зелёной
FanRa3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с текстурами... Dima6120 Мультимедиа в Delphi 1 08.08.2010 20:27
Модуль работы с текстурами Miha85193 Свободное общение 0 29.03.2010 12:52
Помогите с текстурами в OpenGL anyx Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 15.09.2009 20:54
трабл Informer Общие вопросы C/C++ 0 02.06.2009 15:21
Работа с текстурами. OpenGL в Delphi. Gambler Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 21.04.2008 01:19