Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4

Как захватить правый кадр?(стереопара)

12.03.2018, 12:55. Показов 1750. Ответов 6

Студворк — интернет-сервис помощи студентам
Хочу захватить рабочий стол,при запущенном приложении,выводящем в стерео.
Захватываю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        IDirect3D9 *d3d = nullptr;
        IDirect3DDevice9* device = nullptr;
    IDirect3DSurface9 *surfaceMono = nullptr, *surfaceLeft=nullptr, *surfaceRight=nullptr, *surfaceFront=nullptr;
    D3DDISPLAYMODE mode;
    D3DPRESENT_PARAMETERS parameters;
    ZeroMemory(&mode, sizeof(mode));
    ZeroMemory(&parameters, sizeof(parameters));
    HRESULT result=S_OK;
 
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
 
    result = d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &mode);
    
    parameters.Windowed = true;
    parameters.BackBufferCount = D3DPRESENT_BACK_BUFFERS_MAX;
    parameters.BackBufferHeight = mode.Height;
    parameters.BackBufferWidth = mode.Width;
    parameters.SwapEffect = D3DSWAPEFFECT_FLIP;
    parameters.hDeviceWindow = NULL;
        parameters.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
 
 
    result = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, NULL,D3DCREATE_HARDWARE_VERTEXPROCESSING, &parameters, &device);
 
        result = device->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surfaceMono, nullptr)
    result = device->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surfaceLeft, nullptr)
    result = device->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surfaceRight, nullptr)
        result = device->CreateOffscreenPlainSurface(mode.Width,mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surfaceFront, nullptr)
 
        result = device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &surfaceMono);
    result = D3DXSaveSurfaceToFile(FilePathMono, D3DXIFF_PNG, surfaceMono, NULL, NULL);
 
    result = device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_LEFT, &surfaceLeft);
    result = D3DXSaveSurfaceToFile(FilePathLeft, D3DXIFF_PNG, surfaceLeft, NULL, NULL);
 
    result = device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_RIGHT, &surfaceRight);
    result = D3DXSaveSurfaceToFile(FilePathRight, D3DXIFF_PNG, surfaceRight, NULL, NULL);
 
    result = device->GetFrontBufferData(0,surfaceFront);
    result = D3DXSaveSurfaceToFile(FilePathFront, D3DXIFF_PNG, surfaceFront, NULL, NULL);
Это кусок кода,все проверки есть и всё работает.
Задние буферы пусты.
Передний всегда содержит левую стереопару.
Пробовал в цикле захватывать и расширять CreateOffscreenPlainSurface в надежде,
что они идут друг за другом или рядом на одной поверхности-но нет.

Как получить правый кадр?
(Он же где-то есть)

В direct -новичок.
win 7,quadro,3d vision
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2018, 12:55
Ответы с готовыми решениями:

Как захватить звук с микрофона?
Собственно интересует тема топика. Наверное делается это так: создаётся какой - то буфер и начинается запись в него до тех пор, пока он не...

Как захватить курсор в OpenGL?
Я использую OpenGL + OpenTK. Но не могу найти функцию, которая бы могла захватить курсор.

Как захватить контекст стороннего приложения?
А точнее, как установить свой фреймрейт для любого стороннего окна, использующего DX3D9? Ну или скажите хотя бы в какую сторону копать. ...

6
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.03.2018, 12:58
В 9-ом иксе это вообще не предусмотрено. Он бедняга вообще не в курсах что в стереорежиме фигачит. Стерео драйвер делает если умеет. Что то в тему управления стерео только в 12-ом появилось.
0
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
12.03.2018, 15:43  [ТС]
?
В смысле?
Ведь мы можем использовать задние левый и правый, чтобы потом сделать стерео.
Получается можем и захватить.
Больше всего смущает, что один глаз есть, значит и второй он откуда-то берёт.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.03.2018, 21:59
saqef, DirectX особенно 9-ый про второй не знает. Он вообще не знает про то что режим стерео. Его параллельно отрисовывает сам драйвер по комадам левого, только с другой позицией камеры которую опять же сам рассчитывает. Т.е. второй буфер создается вообще не DirectX-ом поэтому D3DDevice9 вообще не в курсе что этот буфер существует. При этом мало понятно как обеспечивается корректность изображения в случае предотсечения объектов по пирамиде на стороне приложения и несовпадении поля обзора левой и правой камер.
0
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
13.03.2018, 11:15  [ТС]
Хорошо.
Можешь подсказать каким образом можно захватить стереопару?
(dx12 не пойдёт-оборудования нет)
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.03.2018, 05:46
saqef, Вообще начиная с 10-го буферами и свапчейном уже не девайс занимается а DXGI тот со второй версии уже хотя бы знает про стерео. DXGI 2 вроде с 11-ым иксом была в комплекте
0
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
14.03.2018, 14:16  [ТС]
Вроде 1.2 может помочь,но работает только с начиная c win 8.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2018, 14:16
Помогаю со студенческими работами здесь

Как захватить изображение со второго монитора в VLC?
Всем привет! :) К системному блоку подключены два монитора, нужно захватить видео рабочего стола со второстепенного монитора в...

Как в Lazarus захватить видео с веб камеры?
Как в Delphi7 понятно, в Lazarus нет DirectShov, потому не ясно как это возможно сделать. Вернее как это сделать исключительно бесплатными...

Написать программу которая при нажатии клавиш:правый Shift+ правый Alt блокировала бы клавишу 9 на клавиатуре.
Добрый день Необходимо написать программу которая при нажатии клавиш:правый Shift+ правый Alt блокировалась бы клавиша 9 на клавиатуре.

Freeglut Как захватить клавишу не по char а по ключу на клавиатуре?
Допустим если я переключил язык на русский и врубил caps lock glutKeyboardFunc захватывает русские заглавные буквы, а мне нужны ключи,...

Как захватить нажатие клавиш глобально, а не только с формы своего приложения
Подскажите, пожалуйста)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru