Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не знаю C++

6.5K
21 апреля 2006 года
a.k.a Throne
39 / / 07.08.2005
Прочитал на GameDev.ru статейку по реализации glow-эффекта, но есть проблема: все в статье написано на С++. Я не много смыслю в С++ и с этим "не много" я не могу перевести этот код на Delphi:

BYTE gColorR[128][128];
BYTE gColorG[128][128];
BYTE gColorB[128][128];

// Макросы для получения компонента из цвета
#define _r(x) (BYTE)(x>>16)
#define _g(x) (BYTE)(x>> 8)
#define _b(x) (BYTE)(x>> 0)
#define rgb(r, g, b) (DWORD)((0xff<<24) + (r<<16) + (g<<8) + (b<<0))

void CopyFromRT()
{
D3DLOCKED_RECT d3dlr;
D3DSURFACE_DESC d3dsd;
DWORD res;

// Размер нулевого сюрфейса текстуры
gRenderTexture->GetLevelDesc(0, &d3dsd);

// Локаем текстуру
gRenderTexture->LockRect(0, &d3dlr, 0, 0);
DWORD* pSrcPixel = (DWORD*)d3dlr.pBits;

// Проходим по всем пикселям, и заполняем массивы
DWORD color;
for (register i=0; iUnlockRect(0);
}

// Эта ф-я размывает пиксели текстуры 'times' количество раз

void Blur(int times)
{
int r, g, b;
float factor = 1.3f;

for (register p=0; p<times; p++)
{
for (register i=1; i<128; i++)
{
for (register j=1; j<128; j++)
{
// Получаем среднее арифметическое 8-ми соседних для текущего пикселей
// умножаем на factor для увеличения "яркости"
r = ( gColorR[i+1][j+1] + gColorR[i+1][j] + gColorR[j+1] +
gColorR[i-1][j-1] + gColorR[i-1][j] + gColorR[j-1] +
gColorR[i-1][j+1] + gColorR[i+1][j-1] )/8 * factor;

g = ( gColorG[i+1][j+1] + gColorG[i+1][j] + gColorG[j+1] +
gColorG[i-1][j-1] + gColorG[i-1][j] + gColorG[j-1] +
gColorG[i-1][j+1] + gColorG[i+1][j-1] )/8 * factor;

b = ( gColorB[i+1][j+1] + gColorB[i+1][j] + gColorB[j+1] +
gColorB[i-1][j-1] + gColorB[i-1][j] + gColorB[j-1] +
gColorB[i-1][j+1] + gColorB[i+1][j-1] )/8 * factor;

gColorR[j] = r;
gColorG[j] = g;
gColorB[j] = b;

if (r > 255)
gColorR[j] = 255;
if (g > 255)
gColorG[j] = 255;
if (b > 255)
gColorB[j] = 255;
}
}
}

// Локаем результирующую текстуру и копируем туда информацию из массивов
gResTexture->LockRect( 0, &d3dlr, 0, 0 );
DWORD* pSrcPixel = (DWORD*)d3dlr.pBits;

for (i=0; i<128; i++)
{
for (j=0; j<128; j++)
{
*pSrcPixel++ = rgb(smr[j], smg[j], smb[j]);
}
}

gResTexture->UnlockRect(0);
}

Кто может перевести, отошлите код на [email]akathrone@mail.ru[/email]
370
01 мая 2006 года
koval
443 / / 29.08.2005
Цитата:
Originally posted by a.k.a Throne
Прочитал на GameDev.ru статейку по реализации glow-эффекта, но есть проблема: все в статье написано на С++. Я не много смыслю в С++ и с этим "не много" я не могу перевести этот код на Delphi:

BYTE gColorR[128][128];
BYTE gColorG[128][128];
BYTE gColorB[128][128];

// Макросы для получения компонента из цвета
#define _r(x) (BYTE)(x>>16)
#define _g(x) (BYTE)(x>> 8)
#define _b(x) (BYTE)(x>> 0)
#define rgb(r, g, b) (DWORD)((0xff<<24) + (r<<16) + (g<<8) + (b<<0))

void CopyFromRT()
{
D3DLOCKED_RECT d3dlr;
D3DSURFACE_DESC d3dsd;
DWORD res;

// Размер нулевого сюрфейса текстуры
gRenderTexture->GetLevelDesc(0, &d3dsd);

// Локаем текстуру
gRenderTexture->LockRect(0, &d3dlr, 0, 0);
DWORD* pSrcPixel = (DWORD*)d3dlr.pBits;

// Проходим по всем пикселям, и заполняем массивы
DWORD color;
for (register i=0; iUnlockRect(0);
}

// Эта ф-я размывает пиксели текстуры 'times' количество раз

void Blur(int times)
{
int r, g, b;
float factor = 1.3f;

for (register p=0; p<times; p++)
{
for (register i=1; i<128; i++)
{
for (register j=1; j<128; j++)
{
// Получаем среднее арифметическое 8-ми соседних для текущего пикселей
// умножаем на factor для увеличения "яркости"
r = ( gColorR[i+1][j+1] + gColorR[i+1][j] + gColorR[j+1] +
gColorR[i-1][j-1] + gColorR[i-1][j] + gColorR[j-1] +
gColorR[i-1][j+1] + gColorR[i+1][j-1] )/8 * factor;

g = ( gColorG[i+1][j+1] + gColorG[i+1][j] + gColorG[j+1] +
gColorG[i-1][j-1] + gColorG[i-1][j] + gColorG[j-1] +
gColorG[i-1][j+1] + gColorG[i+1][j-1] )/8 * factor;

b = ( gColorB[i+1][j+1] + gColorB[i+1][j] + gColorB[j+1] +
gColorB[i-1][j-1] + gColorB[i-1][j] + gColorB[j-1] +
gColorB[i-1][j+1] + gColorB[i+1][j-1] )/8 * factor;

gColorR[j] = r;
gColorG[j] = g;
gColorB[j] = b;

if (r > 255)
gColorR[j] = 255;
if (g > 255)
gColorG[j] = 255;
if (b > 255)
gColorB[j] = 255;
}
}
}

// Локаем результирующую текстуру и копируем туда информацию из массивов
gResTexture->LockRect( 0, &d3dlr, 0, 0 );
DWORD* pSrcPixel = (DWORD*)d3dlr.pBits;

for (i=0; i<128; i++)
{
for (j=0; j<128; j++)
{
*pSrcPixel++ = rgb(smr[j], smg[j], smb[j]);
}
}

gResTexture->UnlockRect(0);
}

Кто может перевести, отошлите код на [email]akathrone@mail.ru[/email]



а ты уверен что этот код рабочий, точно не знаю, но ощущение что он не работает сегодня вечером посмотрю

6.5K
02 мая 2006 года
a.k.a Throne
39 / / 07.08.2005
Может и не рабочий. Не рабочий код в статье на GameDev.ru - это врятли
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог