Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

DirectX8 и Delphi

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 11.04.2012, 00:48   #1
 Разведчик
Аватар для zaparca
 
zaparca на правильном пути
Регистрация: 07.10.2010
Сообщений: 21
Популярность: 90
Сказал(а) спасибо: 14
Поблагодарили 15 раз(а) в 14 сообщениях
 
По умолчанию DirectX8 и Delphi

Пытаюсь сделать типа этого PersInfo через это Универсальный загрузчик плагинов
... для начала просто вывести текст
Проблема текст не остаётся на экране(в окне) либо мерцает все вместе с задним фоном(окна)
Код:
library Project1;
uses
 Windows, SysUtils, Classes, Direct3D8, D3DX8;
var
 FD3D: IDirect3D8;
 FD3DDevice: IDirect3DDevice8;
 FD3DText: ID3DXFont;
 Wnd: HWND;
{$R *.res}
 
function KeyPressed(Key: Byte): Boolean;
begin
 KeyPressed := (GetAsyncKeyState(Key) and (1 shl 16) <> 0)
end;

function SetupCamera: HResult;
var
 ViewMatrix: TD3DMatrix;
 ProjectionMatrix: TD3DMatrix;
 Eye: TD3DVector;
 At: TD3DVector;
 Up: TD3DVector;
begin
 // Вектор, определяющий положение глаз наблюдателя
 Eye.x := 0; Eye.y := 0; Eye.z := -8;
 // Направление камеры
 At.x := 0; At.y := 0; At.z := 0;
 // Вектор, определяющий направление верха мировых координат.
 // Обычно имеет значение (0, 1, 0).
 Up.x := 0; Up.y := 1; Up.z := 0;
 // Строим левостороннюю матрицу вида
 D3DXMatrixLookAtLH(ViewMatrix, Eye, At, Up);
 // Устанавливаем матрицу вида
 FD3DDevice.SetTransform(D3DTS_VIEW, ViewMatrix);
 // Строим левостороннюю матрицу проекции
 D3DXMatrixPerspectiveFovLH(ProjectionMatrix, D3DX_PI / 4, 1, 1, 100);
 // Устанавливаем матрицу проекции
 Result := FD3DDevice.SetTransform(D3DTS_PROJECTION, ProjectionMatrix);
end;

function InitD3D: HResult;
var
 d3dDisplayInfo: TD3DDisplayMode;
 d3dParams: TD3DPresentParameters;
 d3dVector: TD3DVector;
 d3dLight: TD3DLight8;
begin
 Result := E_FAIL; // Создаем объект с интерфейсом IDirect3D9
 FD3D := Direct3DCreate8(D3D_SDK_VERSION);
 // Завершаем работу процедуры при ошибке
 if FD3D = nil then EXIT;
 // Получаем установки текущего режима адаптера
 Result := FD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3dDisplayInfo);
 // Завершаем аботу в случае сбоя
 if FAILED(Result) then EXIT;
 ZeroMemory(@d3dParams, SizeOf(d3dParams)); // обнуляем поля
 with d3dParams do begin
   Windowed := True; // используется оконный режим
   SwapEffect := D3DSWAPEFFECT_DISCARD; // режим переключения буферов
   BackBufferFormat := d3dDisplayInfo.Format; // формат заднего буфера
  end;
 // Сздаем объект устройства
 Result := FD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dParams, FD3DDevice);
 if FAILED(Result) then EXIT;
 // Включаем режим отсечения
 FD3DDevice.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
 // Отключаем освещение сцены
 FD3DDevice.SetRenderState(D3DRS_LIGHTING, 0);
 // Включаем поддержку Z-буфера устройством
 FD3DDevice.SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
 // Устанавливаем параметры просмотра сцены
 SetupCamera;
 // Задаем параметры источника света
 ZeroMemory(@d3dLight, SizeOf(d3dLight));
 d3dLight._Type := D3DLIGHT_DIRECTIONAL;
 d3dLight.Diffuse.r := 1;
 d3dLight.Diffuse.g := 1;
 d3dLight.Diffuse.b := 1;
 d3dLight.Range := 20;
 // Направление источника
 d3dVector.x := 0;
 d3dVector.y := 0;
 d3dVector.z := 5;
 D3DXVec3Normalize(d3dLight.Direction, d3dVector);
 // Устанавливаем параметры первого источника света сцены
 FD3DDevice.SetLight(0, d3dLight);
 // Включаем источник
 FD3DDevice.LightEnable(0, TRUE);
 // Включаем режим обработки освещения
 FD3DDevice.SetRenderState(D3DRS_LIGHTING, 1);
 // Задаем освещение окружающей среды
 FD3DDevice.SetRenderState(D3DRS_AMBIENT, $00202020);
end;

procedure FreeD3D; //Освобождаем ресурсы
begin
 FD3DText := nil;
 FD3DDevice := nil;
 FD3D := nil;
end;

procedure TextOut(S: string; R: TRect; TextColor: D3DColor);
begin
 if (FD3DText <> nil) then
  begin
   FD3DText.DrawTextA(PChar(S), Length(S), R, DT_WORDBREAK, TextColor);
  end;
end;

procedure DrawTextMessage;
var
 rectMain,
  rectName: TRect;
 d3dViewport: TD3DViewport8;
begin
 // Получаем параметры окна вывода
 FD3DDevice.GetViewport(d3dViewport);
 // Области надписей
 rectMain := Rect(0, 0, 130, 90);
 rectName := Rect(0, 0, 80, 95);
 // Выводим текст
 OffsetRect(rectMain, d3dViewport.Width - 120, 10);
 TextOut(PChar('Текст'), rectMain, D3DCOLOR_XRGB(255, 0, 0));
 OffsetRect(rectMain, 2, 2);
 TextOut(PChar('Текст'), rectMain, D3DCOLOR_XRGB(50, 255, 50));
end;

function ClearDevice: HResult;
begin
 // Результат по умолчанию
 Result := E_FAIL;
 // Если устройство не создано, то завершаем работу
 if FD3DDevice = nil then EXIT;
 // Чистим устройство
 Result := FD3DDevice.Clear(0, nil, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0, 0)
end;

function RenderScene: HResult;
begin
 // Чистим устройство
 Result := ClearDevice;
 // Если произошла ошибка, то завершаем работу
 if FAILED(Result) then EXIT;
 // Начало сцены
 FD3DDevice.BeginScene;
 try
  // Выводим текст
  DrawTextMessage;
 finally
  // Завершаем сцену
  FD3DDevice.EndScene;
 end;
 // Переключение буферов
 FD3DDevice.Present(nil, nil, 0, nil);
end;

function CreateText: HResult;
var
 DC: HDC;
begin
 DC := GetDC(0);
 try
  Result := CreateFont(20, 6, 0, 0, FW_NORMAL, 0, 0, 0, 1, 0, 0, 0, DEFAULT_PITCH, 'Arial');
  D3DXCreateFont(FD3DDevice, Result, FD3DText);
 finally
  ReleaseDC(0, DC);
 end;
end;

function IsGameWindowActive: Boolean;
var
 pId: DWORD;
begin
 IsGameWindowActive := False;
 Wnd := GetForegroundWindow;
 if (Wnd = 0) then Exit;
 GetWindowThreadProcessId(Wnd, pId);
 IsGameWindowActive := (pId = GetCurrentProcessId)
end;

procedure CText;
begin
 repeat
  RenderScene;
 until (KeyPressed(VK_F11));
end;

procedure Cheat;
begin
 repeat
  if (KeyPressed(VK_F12)) then begin
    IsGameWindowActive;
    if FAILED(InitD3D) then begin exit end;
    CreateText;
    //RenderScene;
    CText;
   end;
 until false
end;

procedure DLLMain(Reason: DWORD);
var
 UselessShit: DWORD;
begin
 if (Reason = DLL_PROCESS_ATTACH) then
  begin
   CreateThread(nil, 0, @Cheat, nil, 0, UselessShit)
  end
end;

begin
 DLLProc := @DLLMain;
 DLLProc(DLL_PROCESS_ATTACH)
end.
подскажите как правильно сделать
________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Помощь в Delphi 7 и в других версиях Delphi Babls77 Pascal/Delphi 4 03.11.2011 22:27
[Помогите!] Delphi |Sur| Общение и обсуждение 0 22.09.2011 16:54

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:18.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net