| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Вывод картинки на передний план |
| Автор: Div 14.7.2005, 13:41 |
| Как можно вывести небольшую картинку на экран в DirectX. Чтобы она имела один розрачный цвет и выводилась поверх объектов. Типа менюшек во время игры. |
| Автор: empter 16.7.2005, 15:18 |
| Попробуй спрайтом |
| Автор: Div 20.7.2005, 19:10 |
| Всмысле отрисовать полигон с текстурой прямо перед экраном? |
| Автор: empter 21.7.2005, 17:52 |
| Вобщем да, хотя я этим еще не занимался посмотри пример http://www.gamedev.ru/coding/20603.shtml, кое что дельное там должно быть. |
| Автор: Guest 24.7.2005, 21:18 |
| вывод картинки это текстурирование можно до восьми текстур на один объект в том числе и на буфер. if( FAILED( D3DXCreateTextureFromFileEx( pDirect3DDevice, "Directx.jpg", D3DX_DEFAULT, D3DX_DEFAULT, 100000, 131072, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,0x000000ff,NULL,NULL,&pTextura001 ) ) ) return E_FAIL; // Загружаем вторую текстру if( FAILED( D3DXCreateTextureFromFileEx( pDirect3DDevice, "Directx.bmp", D3DX_DEFAULT, D3DX_DEFAULT, 10000, 131072, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,0x0000000f,NULL,NULL,&pTextura002 ) ) ) return E_FAIL; // Создаем буфер вершин if( FAILED( pDirect3DDevice->CreateVertexBuffer( 36 * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &pBufferVershin, NULL ) ) ) return E_FAIL; //Блокируем VOID* pBV; if( FAILED( pBufferVershin->Lock( 0, sizeof(Vershin), (void**)&pBV, 0 ) ) ) return E_FAIL; //Копируем memcpy( pBV, Vershin, sizeof(Vershin) ); // Разблокируем pBufferVershin->Unlock(); // Создаем индексный буфер pDirect3DDevice->CreateIndexBuffer( 36 * sizeof(Index), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT,&pBufferIndex, NULL); //Блокируем VOID* pBI; pBufferIndex->Lock( 0, sizeof(Index) , (void**)&pBI, 0 ); //Копируем memcpy( pBI, Index, sizeof(Index) ); // Разблокируем pBufferIndex->Unlock(); |
| Автор: Helicopter 24.7.2005, 21:24 |
| это я скинул. только не зубудь всё в начале объявить LPDIRECT3DTEXTURE9 pTextura001 = NULL; // Текстyра 1 LPDIRECT3DTEXTURE9 pTextura002 = NULL; // Текстyра 2 если чё пиши |
| Автор: JoyEx 3.8.2005, 20:58 | ||
Можно это сделать еще с помощью оверлея, причем чем проще цвет, тем больше вероятность его сделать прозрачным, т.е. если не RGB(255,215,0), а типа RGB(0,255,0). Например,
В SrcColorkey (источник) указывается цвет, который будет прозрачным у источника, т.е. у адресата (lpPrimarySurface2) RGB(0,255,0) с lpSurf2 не увидишь. Можно еще задать color key адресата, чтобы только этот цвет (или диапазон) изменялся. Помните! Поверхности могут иметь разный цветовой формат. |
| Автор: Div 6.8.2005, 12:33 |
| Всё понял! Спасибо |
| Автор: p0s0l 6.8.2005, 13:12 |
| Имхо, оверлей для таких целей - слишком жирно будет Просто выставь ортогональную проекцию, единичную матрицу вида, отключи Z-тест, включи и настрой альфаблендинг, и выводи прямоугольник с текстурой, имеющей альфа-канал... |
| Автор: Div 6.8.2005, 13:37 |
| Как отключить Z-тест? |
| Автор: p0s0l 6.8.2005, 13:44 |
| d3ddev->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE) Аналогично и блендинг делается: D3DRS_ALPHABLENDENABLE, D3DRS_SRCBLEND, D3DRS_DESTBLEND... |
| Автор: Div 10.8.2005, 06:47 |
| А можно вопрос? Как подогнать прямоугольник под текстуру (по размерам)? У меня всё расплывается. Получается что-то увидеть только тогда, когда изменяю координаты текстуры, но получается так, что квадратиков (тектура - белый квадрат обведенный красным по кроям) много. Наверное в Microsoft должны были предусматреть вывод таких картинок. Может есть другой способ? |
| Автор: p0s0l 10.8.2005, 12:36 | ||||
| Не понял, что у тебя там такое расплывается и куда, наверное, ты что-то неправильно делаешь. Вот как должно примерно быть:
|
| Автор: Div 14.8.2005, 17:07 |
| Я написал свой способ вывода картинки на передний план. Он чем-то похож на разъяснения pOsOl'а. Вставил несколько комментарием, так что должно быть понятно, что к чему. Все что относиться к выводу картинки находиться в AppInit() и RenderScene(). Кому интересно, можете скачать готовый пример http://www.ekbsity.h15.ru/bbs/books/FrontScreen.rar Я писал на Microsoft Visual Studio .NET (C++), но .dsp файл создается => на VS C++ тоже пойдет! |
| Автор: NordWolf 26.9.2007, 00:52 | ||
при выводе текста проблема возникла. Вообщем код программы таков:
при компиляции появяются следующие ошибки: E:\Development\OpenGL\Text\text.c(83) : error C2059: syntax error : 'type' E:\Development\OpenGL\Text\text.c(87) : error C2059: syntax error : 'type' E:\Development\OpenGL\Text\text.c(94) : error C2059: syntax error : 'if' что это и как это исправить? |
| Автор: Ferrisgeneral 7.6.2010, 15:45 |
| встала задача соединить 2 проектика, в одном интерфейс (2D), а в другом 3D объект. посмотрел как p0s0l предлогал выводить совместно 2D и 3D графику, но нехотелось бы все мешать в секции render. Можно ли отдельно подготовить для вывода отдельно 2D часть, а отдельно 3D часть ... , а потом в секции render поочереди вывести обе части. как понимаю, нельзя сделать 2 секции render для каждой и частей (2D и 3D). |