 |
DirectX8 и Delphi - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
11.04.2012, 00:48
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 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
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 19:18.
|
 |