Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наложение текстуры в OpenGL, glCoord2i 
:(
    Опции темы
Dr.Death
Дата 12.6.2004, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Итак вопрос, я сделал в OpenGL сцену без координаты Z и рисую на ней с помощью
glVertex2i(x,y) прямоугольник. И есть у меня текстура. Мне надо както указать с помощью
с помощью glTexCoord2i(x,y) прямоугольник текстуры, который надо наложить на мой
нарисованный треугольник, но беда в том, что у меня не воспринимаются кооодинаты
x,y у функции glTexCoord2i как координаты текстуры, иначе говоря пример:
текстура размером 384х384, надо наложить из этой текстуры прямоугольник
0,0,64,64. Я делаю так:
Код

 glTexCoord2i(0,0);
 glTexCoord2i(64,0);
 glTexCoord2i(64,64);
 glTexCoord2i(0,64);

И у меня ничего не происходит, но если указать размеры через glTexCoord2f, то все
нормально, в чем проблема?



--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
gepard
Дата 12.6.2004, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: нет
Всего: 40



А что происходит? Она просто изменяет размер текстуры? Там по-моему должна быть спец. функция для вырезки фрагмента текстуры.

А зачем тебе 2d. Дум4 делаешь? biggrin.gif


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Dr.Death
Дата 12.6.2004, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Она ничего практически не делает.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
chipset
Дата 12.6.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: нет
Всего: 165



Эээ... Там что то типа glTexSubImage или glSubTexImage...
Ещё кстати я подозреваю что при инициализации ОпенГл преобразует размеры имэджа и меняет там все вм
А почему бы тебе не юзать glTexCoord2f и подбирать дроби на основе нужных тебе значений?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Dr.Death
Дата 12.6.2004, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



chipset
Подбирать это сложно, т.к. мне надо сделать процедуру, ко-ая возвращает для номера картинки ее координаты x1,y1,x2,y2
Цитата
Ещё кстати я подозреваю что при инициализации ОпенГл преобразует размеры имэджа и меняет там все вм

Насчет этого, у меня проблемы были сначала с glVertex2i, потом сделал glOrtho2d, может есть что-то подобное для текстур?



--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
chipset
Дата 12.6.2004, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: нет
Всего: 165



если ничего не поможет а надо срочно юзай макрос
Код

GLfloat width = 1024;
GLfloat height = 768;
#define itfx(x) (1/((width)/(x)))
#define itfy(y) (1/((height)/(y)))

А если не срочно, забей и юзай привычный всем glTexCoord2f adv/super.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Dr.Death
Дата 13.6.2004, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Кстати, каковы координаты левого верхнего угла текстуры в float?


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
Cheba
Дата 13.6.2004, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: нет
Всего: 62



Левого верхнего: -1, 1.
Нижнего правого: 1, -1.
PM MAIL ICQ   Вверх
Dr.Death
Дата 13.6.2004, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Вот пример, у меня данная вещь не работает. Она высчитывает координаты прямогульника для текстуры, т.к. на текстуре множество слайдов.
Код

procedure tModel.draw;//N-номер слайда(0-64)
var tmpx,tmpy:single;
begin
tmpx:=-1+N*width/384;//width - ширина объекта
tmpy:=1-N*height/384;//height - высота
glBindTexture(GL_TEXTURE_2D,texture);
glBegin(GL_QUADS);
 glVertex2i(x,y);//x,y - координаты объекта

  glTexCoord2f(tmpx,tmpy);

glVertex2i(x+width,y);

  glTexCoord2f(tmpx+width/384,tmpy);

glVertex2i(x+width,y+height);

  glTexCoord2f(tmpx+width/384,tmpy+height/384);

glVertex2i(x,y+height);
  glTexCoord2f(tmpx,tmpy+height/384);
glEnd();
end;

384 - ширина текстуры и высота, т.е. файл jpg 384х384
И получается фигня, все время не тот слайд рисуется.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
Гость_Lavr
Дата 28.8.2005, 23:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Dr @ 12.6.2004, 10:50)
пример:
текстура размером 384х384, надо наложить из этой текстуры прямоугольник
0,0,64,64. Я делаю так:
Код

  glTexCoord2i(0,0);
  glTexCoord2i(64,0);
  glTexCoord2i(64,64);
  glTexCoord2i(0,64);

И у меня ничего не происходит, но если указать размеры через glTexCoord2f, то все
нормально, в чем проблема?

Дело в том что координаты на текстуре (s и t) меняются от 0 до 1 (glTexCoord2i или glTexCoord2f неважно). При выходе из этого диапазона (а именно это случается здесь glTexCoord2i(64,0);), берется значение либо на границе, либо текстура продолжается. Таким образом используйте glTexCoord2f.
  Вверх
Гость_Lavr
Дата 28.8.2005, 23:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











допустим нужно наложить из текстуры кусок (x1,y1)-(x2,y2)

Код

  glTexCoord2f(x1/383.0,y1/383.0);
  glTexCoord2f(x2/383.0,y1/383.0);
  glTexCoord2f(x2/383.0,y2/383.0);
  glTexCoord2f(x1/383.0,y2/383.0);

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.