Не знаю C++
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]
Цитата:
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]
Прочитал на 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]
а ты уверен что этот код рабочий, точно не знаю, но ощущение что он не работает сегодня вечером посмотрю
Может и не рабочий. Не рабочий код в статье на GameDev.ru - это врятли