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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 10:02   #1
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию Генерация mip-уровней DirectX

Такая задача. Есть две текстуры с типами D3DUSAGE_DYNAMIC и D3DUSAGE_RENDERTARGET. Первая текстура локается и в нее записывается определенная информация (просто как массив данных). Затем из этой текстуры нужно во вторую нарендерить несколько mip-уровней. Далее код. Но вместо разноцветных слоев (вместо mip-уровней для наглядности выбрал просто текстуры с разными цветами) вижу серую текстурку. Где ошибка?
Инфу брал отсюда: http://www.two-kings.de/tutorials/dx...raphics16.html
Код:
void renderToSurface (const int i) {
	LPDIRECT3DSURFACE9 pRenderSurface = NULL,pBackBuffer = NULL;
	D3DXMATRIX matProjection,matOldProjection;
	D3DXMATRIX matRotationY, matTranslation;

	pRenderTexture->GetSurfaceLevel(i, &pRenderSurface);

    D3DXMatrixPerspectiveFovLH( &matProjection, D3DXToRadian( 45.0f ), 640.0f / 480.0f, 0.1f, 500.0f );

	g_pd3dDevice->GetTransform(D3DTS_PROJECTION,&matOldProjection);
	g_pd3dDevice->GetRenderTarget(0,&pBackBuffer);

	//render-to-texture
	//set new render target
	g_pd3dDevice->SetRenderTarget(0,pRenderSurface);
	//clear texture
	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100,100,100), 1.0f, 0);
	g_pd3dDevice->BeginScene();

	g_pd3dDevice->SetTexture(0,pTexArray[i]);

	D3DXMatrixRotationY(&matRotationY,0.0);
	D3DXMatrixTranslation(&matTranslation,0.0f,0.0f,5.0f);
	g_pd3dDevice->SetTransform(D3DTS_WORLD, &(matRotationY * matTranslation));
	//set projection matrix
	g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProjection);

	g_pd3dDevice->CreateRenderTarget(256, 256, D3DFMT_R5G6B5, D3DMULTISAMPLE_NONE, 0, false, &pRenderSurface, NULL);

	g_pd3dDevice->EndScene();

	//render scene with texture
	//set back buffer
	g_pd3dDevice->SetRenderTarget(0,pBackBuffer);
	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
	g_pd3dDevice->BeginScene();

	//set rendered texture
	g_pd3dDevice->SetTexture(0,pRenderTexture);

	g_pd3dDevice->SetTransform(D3DTS_WORLD,&matTranslation);
	//restore projection matrix
	g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matOldProjection);

	g_pd3dDevice->EndScene();
	g_pd3dDevice->Present(NULL,NULL,NULL,NULL);

	pRenderSurface->Release();
	pRenderSurface = NULL;

	pBackBuffer->Release();
	pBackBuffer = NULL;
}

void loadMipMapTexture (void) {
    D3DXCreateTextureFromFile( g_pd3dDevice, "tex256.bmp", &pTexArray[0] );
	D3DXCreateTextureFromFile( g_pd3dDevice, "tex128.bmp", &pTexArray[1] );
	D3DXCreateTextureFromFile( g_pd3dDevice, "tex64.bmp",  &pTexArray[2] );
	D3DXCreateTextureFromFile( g_pd3dDevice, "tex32.bmp",  &pTexArray[3] );
	D3DXCreateTextureFromFile( g_pd3dDevice, "tex16.bmp",  &pTexArray[4] );
	D3DXCreateTextureFromFile( g_pd3dDevice, "tex8.bmp",   &pTexArray[5] );

	g_pd3dDevice->CreateTexture(256, 256, 6, D3DUSAGE_RENDERTARGET, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &pRenderTexture, NULL);

	for (int i = 0; i < 6; ++i) {
		renderToSurface(i);
	}
}
Kukurudza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет уровней в дереве Madmaxisss Паскаль, Turbo Pascal, PascalABC.NET 28 11.09.2012 00:09
Принцип загрузки игровых уровней murzilka6002 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 27.04.2012 14:56
Расчет уровней в бинарном дереве holi10 Общие вопросы C/C++ 0 01.06.2011 18:22
Задать свойства уровней Polotenchik Microsoft Office Word 2 25.05.2010 14:44