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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2010, 18:27   #31
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
1. Эта обрезанная текстура, ведь, хранится в памяти.
да, в видео памяти насколько мне известно.

Цитата:
У меня есть текстура кнопки 256х64, с добавленной прозрачной областью справа и снизу. Это чтобы не было ошибок при сохранении в памяти. Но сам размер кнопки - 180х50. В итоге, мне нужно ее обрезать до этого размера. Но тогда размер тектуры уже не будет степенью двойки, и могут возникать ошибки?
если стороны НЕ степень двойки то текстура вроде вообще не грузится(. поэтому надо соблюдать данное требование) в DX теже самые требования касательно линейных размеров текстур. А прозрачные области текстур/спрайтов можно рисовать прозрачными и средствами gl'a. Мне известно два варианта blending смешивания для реализации так называемого эффекта "color key". 1й оригинал спрайта + маска спрайта. 2ой замена "color key" цвета в текстуре... 0й альфой в этом случае маска изображения не нужна. 1й способ http://pmg.org.ru/nehe/nehe20.htm 2ой способ смотри в прикрепленном файле.

Цитата:
2. Почему у меня после того, как я обрезал текстуру, вместо нее выводится просто белый прямоугольник?
Оо а стороны при этом остались степенями двойки?
Это первый вопрос: загрузиласть ли она, потом была ли задана с помощью glBindTexture(GL_TEXTURE_2D, ....) для прорисовки?
включено ли текстурирование? glEnable(GL_TEXTURE_2D);
есть ли текструные координаты на прямоугольнике?

Цитата:
3. Это, я так понимаю, при загрузке формы надо делать (когда загружаются все текстуры), а не каждый раз при рисовании в таймере?
да, текстурки лучше приготовить заблаговременно)) можно и при загрузке формы. потом только "биндить" нужные кадры/текстуры в таймере/цикле
Вложения
Тип файла: zip billboarding.zip (222.8 Кб, 18 просмотров)
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 23.08.2010, 18:56   #32
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Понятно, спасибо. Значит, все дело в том, что размеры изображения не остались степенями двойки. А в представленных примерах альфа-канал достигается программным способом. Зачем так делать, если можно нарисовать его сразу же в TGA-изображении, и OpenGL его просчитает?
[Ваш_ник] вне форума Ответить с цитированием
Старый 23.08.2010, 19:32   #33
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
Зачем так делать, если можно нарисовать...
Я привел пример)

Цитата:
OpenGL его просчитает?
Должен, но не обязан)) ...ваша задача будет состоять в том, чтобы функции glTexImage2D/glTexSubImage2D получили указатель (*data) на данные в формате GL_RGBА. Тогда возможно...

void glTexImage3D( GLenum target,
GLint level,
GLint internalFormat,
GLsizei width,
GLsizei height,
GLsizei depth,
GLint border,
GLenum format,
GLenum type,
const GLvoid * data);
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 06.09.2010, 21:17   #34
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Здравствуйте. Я пытался освоить функцию glTexSubImage2D, и вот, что получилось. Но я подозреваю, что что-то делаю неправильно, только вот что?

Код:
var
  i: Integer;
  Texture: glUInt;
  P: ^glUInt;
begin
  LoadTexture('Tex.tga', Texture, False);
  P := @Texture;
  for i := 0 to 14 do begin
    glBindTexture(GL_TEXTURE_2D, Textures[i]);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexSubImage2D(GL_TEXTURE_2D, 0, i * 128, 0, i * 128 + 128, 128, GL_RGBA, GL_UNSIGNED_BYTE, P);
  end;
Textures[] - это массив с переменными типа glUInt.
[Ваш_ник] вне форума Ответить с цитированием
Старый 07.09.2010, 00:11   #35
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

а где glGenTextures?) мне кажется его не хватает перед glBindTexture.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 07.09.2010, 00:27   #36
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Цитата:
а где glGenTextures?) мне кажется его не хватает перед glBindTexture.
Поставил его, и все равно ничего не изменилось. Я и раньше его ставил.
[Ваш_ник] вне форума Ответить с цитированием
Старый 07.09.2010, 01:06   #37
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Оо а обычный glTexImage2D грузит текстуру?
т.е. надо проверить грузится ли текстура вообще и правильно ли вас понимает glTexSubImage2D. формат флага GL_RGBA соответствует данным? а размеры текстуры? Вы не вылазите за пределы 14*128+128 = 1920? И где тут двойка в степени для размерности текстуры в 2048?

и фильт почему один? у мну их два... хоть и грузиться одиночная бмпха
Код:
#include <gl/GLAux.h>
#pragma comment(lib,"glaux.lib")

/*=============================================================================
Имя		:	LoadTexture (Загрузка текстуры)
Параметры	:	( FileName ) - Имя загружаемого (*.bmp) файла, стороны (высота/ширина) 
			загружаемого изображения должны быть кратны 2-м.
			( OutTexture ) - номер загруженной Текстуры в OpenGL
Назначение	:	Загрузка *.bmp - файлов, в текстуру OpenGL
=============================================================================*/

void LoadTexture( const char* FileName, GLuint * OutTexture)
{
	AUX_RGBImageRec *texture1;
	texture1 = auxDIBImageLoad ( FileName );

	glGenTextures ( 1, OutTexture );
	glBindTexture ( GL_TEXTURE_2D, *OutTexture );

	glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
	glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );

	glTexImage2D (	GL_TEXTURE_2D, 
							0, 
							GL_RGB, 
							texture1->sizeX, 
							texture1->sizeY, 
							0, 
							GL_RGB, 
							GL_UNSIGNED_BYTE, 
							texture1->data );

	// Освободить данные текстуры
	if ( texture1->data )
	{
		free ( texture1->data );
	}
	free ( texture1 );
};
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!

Последний раз редактировалось .pixel; 07.09.2010 в 01:12. Причина: посетила очередная мысля по поводу...
.pixel вне форума Ответить с цитированием
Старый 07.09.2010, 01:33   #38
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Цитата:
Оо а обычный glTexImage2D грузит текстуру?
Заменил glTexSubImage2D на этот код:

Код:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, @Texture);
Теперь вылетает такая ошибка: 'Project ... faulted with message 'access violation at 0x017cfce9: read of address 0x00133001'. Process stopped. Use Step or Run to continue.'

Цитата:
формат флага GL_RGBA соответствует данным?
Загружается tga-текстура. Это же RGBA?

Цитата:
а размеры текстуры? Вы не вылазите за пределы 14*128+128 = 1920? И где тут двойка в степени для размерности текстуры в 2048?
Да, это неправильно, но исправление размера текстуры ошибку не исправило.

Код:
и фильт почему один? у мну их два... хоть и грузиться одиночная бмпха
У меня тоже два, просто один не написал (что-то вроде опечатки).
[Ваш_ник] вне форума Ответить с цитированием
Старый 08.09.2010, 01:52   #39
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Помучил glTexSubImage2D и выяснил что она дохлый номер(… она как оказывается для обновления областей текстуры из указателя на данные, а не для выборки из указателя по указанным кордам… вот. Но есть еще вариант выборки спрайта из общей текстуры -манипуляция текстурными координатами. На скорую руку набросал пример с классом сGLSprite… гляньте, может быть поможет)
Вложения
Тип файла: rar myGL2D_TexCordsScroll.rar (401.0 Кб, 31 просмотров)
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 08.09.2010, 09:02   #40
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Спасибо, буду разбираться.
[Ваш_ник] вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Визуальные эффекты в программе SKS Мультимедиа в Delphi 12 19.01.2011 08:31
Эффекты к имиджу Marsik Помощь студентам 31 08.01.2010 16:45
Эффекты окон BOBAH13 Мультимедиа в Delphi 1 03.10.2008 08:49
Эффекты картинок Andrey1433 PHP 1 17.03.2008 02:07
Визуальные эффекты... ~N@um~ Помощь студентам 2 11.12.2007 11:15