В общем мне надо нарисовать интерфес и курсор, можо было бы сделать и в 3д, но тогда всю эту многовертексную махину пришлось бы крутить, а у меня и без того код корявый, нельзя ли как-нибудь в задний буфер просто рисовать? Кстати, как можно немедленно узнать позицию мыши(что-нибудь вроде invoke MouseGetPoint,add point), без собщений, а то мне надо всего 1 раз в начале узнать где ента мышь, а потом неохота каждый раз вынимать ненужные сообщения.
Можно получить указатель на бэкбуфер с помощью GetBackBuffer и писать туда напрямую, правда тормоза будут Лучше квадами выводит по два треугольника с текстурой при формате вершины XYZRHW Методы SetCursor,SetCursorProperties,ShowCursor интерфейса IDirect3DDevice9 якобы эмулируют отображение курсора в приложение d3d но я никогда ими не пробовал пользоваться
А че за формат такой, ентот ваш D3DFVF_XYZRHW? Если выводить квадами, то их крутить надо будет, или это формат такой особенный? Кстати, причем тут GetDeviceState? Нет, ведь рисуют же как-то интерфейс в 3D играх, такая неизученная область что-ли?
Формат D3DFVF_XYZRHW представляет собой набор параметеров вершины, таких как: X,Y и Z координата, причем HRW указывает на то, что вершины уже трансформированы (т.е к ним не нужно применять матрицы проекции и вида). x,y содержат числа в пикселях, а z требуется устанавливать в 1.0. Итогом является то, что выводимые треугольники (два треугольника -> квадрат) будут иметь размеры в точности такие какие были описаны и натянутая на них текстура не будет искажена. таким образом выводятся составляющие интерфейса в подавляющем большинстве приложений. Есть вариант вывода интерфейса через спрайты. Но это имхо как кому удобнее. GetDeviceState в DirectInput возвращает в буфер состояние клавиш и курсора мыши или клавиатуры в момент вызова. Но чтобы воспоспользоваться этим методом требуется создать устройство directinput, что не есть лучший выход для того чтобы один раз узнать где находится мышь перед запуском. Почему нельзя вызвать winapi GetCursorPos?
Вау, мне бы такого учителя блин в школке. Ну да ладно, короче говоря D3DFVF_XYZRHW - это фактически 2D вершина, как я понял, все ясно. С DirectInput я работаю в относительном режиме, мне для этого и надо узнать начальную позицию, хотелось бы, чтобы мой новый курсор появлялся на месте старого, т.к. моё приложение может работать и в окне.GetCursorPos вроде поможет, а параметры там какие?
GetCursorPos передается один параметр, указатель на структуру Point, в которую и будут размещены координаты после вызова этой функции. Координаты будут экранные.
Практика обнаружила отклонение от теории(в моем ее понимании).Пишу так: INTERFACE_VERTEX equ D3DFVF_XYZRHW or D3DFVF_TEX1 InterfaceVertex struc x dd ? y dd ? z dd ? tx dd ? ty dd ? InterfaceVertex ends <...........................................> ivb dd 0; Interface vertex buffer mpvs InterfaceVertex <100.0f,100.0f,1.0f,0.0f,0.0f> InterfaceVertex <131.0f,100.0f,1.0f,1.0f,0.0f> InterfaceVertex <131.0f,131.0f,1.0f,1.0f,1.0f> InterfaceVertex <100.0f,100.0f,1.0f,0.0f,0.0f> InterfaceVertex <131.0f,131.0f,1.0f,1.0f,1.0f> InterfaceVertex <100.0f,131.0f,1.0f,0.0f,1.0f> <...........................................> d3dev8 CreateVertexBuffer,g_pd3ddev,(6)*(type InterfaceVertex),D3DUSAGE_WRITEONLY,INTERFACE_VERTEX,D3DPOOL_MANAGED,a ddr ivb d3dvb8 Lock1,ivb,0,6,addr mpbuf,0 lea esi,mpvs mov edi,mpbuf mov ecx,6 * (type InterfaceVertex)/4 rep movsd d3dvb8 Unlock,ivb <...........................................> d3dev8 SetStreamSource,g_pd3ddev,0,ivb,type InterfaceVertex d3dev8 SetVertexShader,g_pd3ddev,INTERFACE_VERTEX d3dev8 SetTexture,g_pd3ddev,0, ptex d3dev8 DrawPrimitive,g_pd3ddev,D3DPT_TRIANGLELIST,0,2 Рисуется все где надо, но текстура как-то совсем не так отображается, причем по-разному в обоих треугольниках(хотя сама в порядке)
Разобрался. Я забыл про само поле RHW. Сейча не могу понять только почему у меня раньше воообще что-то работало.