Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

И снова DirectX9   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2007-06-21 23:15) [0]

Приведите, пожалуйста, пример программы WinAPI (Delphi) с использованием Mesh"ей. Сегодня наконец-то добился, чтобы нечто отдалённо напоминающее искомый объект вывелось на экран, но на выходе - Access Violation (кроме DirectX ничего создаваемого//удаляемого (типа объектов) в программе не используется).

Заранее спс.


 
Zeqfreed ©   (2007-06-21 23:32) [1]

Меш — это набор вершин. Какие проблемы его отрисовать?

Код лучше показывай. Где-нибудь, наверное, _Release написал или забыл, я уж не помню как там было :)

А вообще, бери лучше C++ и OpenGL. Приятней гораздо :)


 
ProgRAMmer Dimonych ©   (2007-06-22 01:15) [2]

> Код лучше показывай.

ОК, только больно не бить :)

Проект простенький пока, для изучения. Все Vertex- и IndexBuffer"ы отбросил.

Файл проекта DX.dpr

program DX;

uses
 Windows, Messages, AuxLib, DXAux, Direct3D9, D3DX9;

var
Wnd:HWND;
WndMsg:TMsg;
DXObj:TDXObj;
DXDev:TDXDev;
DXMesh:ID3DXMesh;

function OnIdle:HRESULT;
begin
Result:=E_FAIL;
if Failed(DXDev.Clear(0,nil,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1,0)) then Exit;
if Failed(DXDev.BeginScene) then Exit;
if Failed(DXDev.SetFVF(DXMesh.GetFVF)) then Exit;
if Failed(DXMesh.DrawSubset(0)) then Exit;
if Failed(DXDev.EndScene) then Exit;
if Failed(DXDev.Present(nil,nil,0,nil)) then Exit;
Result:=D3D_OK;
end;

procedure DoExit;
begin
if Assigned(DXMesh) then begin DXMesh._Release; DXMesh:=nil; end;
DeInitDX(DXObj,DXDev);
Halt;
end;

function WndProc(Window:HWND; Msg:UINT; wParam,lParam:Cardinal):Cardinal; stdcall;
begin
Result:=0;
case Msg of
 WM_DESTROY:
  DoExit;
 WM_KEYUP:
  if wParam=VK_ESCAPE then DoExit;
 else
  Result:=DefWindowProc(Window,Msg,wParam,lParam);
end;
end;

begin
Wnd:=CreateMyCoolWindow(@WndProc);
ShowWindow(Wnd,SW_SHOWMAXIMIZED);
if Failed(InitDX(DXObj,DXDev,Wnd)) then Halt;
if Failed(D3DXCreateTeapot(DXDev,DXMesh,nil)) then Exit;
while True do
begin
 if PeekMessage(WndMsg,0,0,0,PM_REMOVE) then
 begin
  TranslateMessage(WndMsg);
  DispatchMessage(WndMsg);
 end
 else
 begin
  if Failed(OnIdle) then DoExit;
 end;
end;
end.


 
ProgRAMmer Dimonych ©   (2007-06-22 01:18) [3]

AuxLib и DXAux - это чтобы не отвлекаться на процедуры инициализации//деинициализации во время работы с рендерингом.

unit AuxLib;

interface

uses Windows;

const
WndName="DXWindow";

function CreateMyCoolWindow(WinProc:Pointer):HWND;

implementation

function CreateMyCoolWindow(WinProc:Pointer):HWND;
var
WndClass:TWndClass;
begin
Result:=0;
with WndClass do
begin
 Style:=CS_VREDRAW or CS_HREDRAW;
 lpfnWndProc:=WinProc;
 cbClsExtra:=0;
 cbWndExtra:=0;
 hInstance:=0;
 hIcon:=LoadIcon(0,IDI_APPLICATION);
 hCursor:=LoadCursor(0,IDC_ARROW);
 hbrBackground:=NULL_BRUSH;
 lpszMenuName:=nil;
 lpszClassName:=WndName;
end;
if not Boolean(RegisterClass(WndClass)) then
begin
 MessageBox(0,"Ошибка регистрации класса!","Ошибка",MB_ICONERROR);
 Halt;
end
else
begin
 Result:=CreateWindow(WndName,WndName,WS_POPUP,0,0,500,500,0,0,hInstance,nil);
end;
end;

end.


unit DXAux;

interface

uses Direct3D9, Windows;

type
 TDXObj=IDirect3D9;
 TDXDev=IDirect3DDevice9;
 TDXVB=IDirect3DVertexBuffer9;
 TDXIB=IDirect3DIndexBuffer9;
 function InitDX(var DXObj:TDXObj; var DXDev:TDXDev; Window:HWND):HRESULT;
 procedure DeInitDX(var DXObj:TDXObj; var DXDev:TDXDev);

implementation

function InitDX(var DXObj:TDXObj; var DXDev:TDXDev; Window:HWND):HRESULT;
var
VP:Cardinal;
Caps:D3DCAPS9;
PP:D3DPRESENT_PARAMETERS;
begin
Result:=E_FAIL;
DeInitDX(DXObj,DXDev);
DXObj:=Direct3DCreate9(D3D_SDK_VERSION);
if DXObj=nil then Exit;
if Failed(DXObj.GetDeviceCaps(0,D3DDEVTYPE_HAL,Caps)) then Exit;
if Boolean(Caps.DevCaps and D3DDEVCAPS_HWTRANSFORMANDLIGHT) then
 VP:=D3DCREATE_HARDWARE_VERTEXPROCESSING
else
 VP:=D3DCREATE_SOFTWARE_VERTEXPROCESSING;
ZeroMemory(@PP,SizeOf(PP));
PP.SwapEffect:=D3DSWAPEFFECT_DISCARD;
PP.Windowed:=True;
PP.EnableAutoDepthStencil:=True;
PP.AutoDepthStencilFormat:=D3DFMT_D16;
if Failed(DXObj.CreateDevice(0,D3DDEVTYPE_HAL,Window,VP,@PP,DXDev)) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE)) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_LIGHTING,Cardinal(False))) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_CULLMODE,D3DCULL_CW)) then Exit;
Result:=D3D_OK;
end;

procedure DeInitDX(var DXObj:TDXObj; var DXDev:TDXDev);
begin
if Assigned(DXDev) then begin DXDev._Release; DXDev:=nil; end;
if Assigned(DXObj) then begin DXObj._Release; DXObj:=nil; end;
end;

end.


Чует моё сердце, что где-то совсем по-тупому лоханулся, но где..? Этот раз - самый удачный, до этого вообще ничего не рисовало, здесь всё рисует нормально (для заданного RenderState"а).


 
Servelat ©   (2007-06-22 01:56) [4]

Для интерфейсов Release вызывать не нужно, ибо компилятор Делфи сам вставляет его вызов туда, где переменной присваивается nil (или при выходе за границы видимости, но обычно предпочитают ставить nil руками).


 
db2admin ©   (2007-06-22 07:55) [5]

http://www.google.com/codesearch?as_q=Mesh&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%BA%D0%BE%D0%B4%D0%B0&hl=ru&as_lang=pascal&as_license_restrict=i&as_license=&as_package=&as_filenam e=&as_case=

новая услуга Гугла поиск кода



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
2-1182878717
T.V
2007-06-26 21:25
2007.07.22
Вопрос по ф-ции GetProcessImageFileName


15-1181831248
DrAndrey
2007-06-14 18:27
2007.07.22
Программисты и ХО


1-1179287475
kukuikar
2007-05-16 07:51
2007.07.22
Синхронизатор: проблема быстрой проверки большого кол-ва файлов


2-1183202167
ssss
2007-06-30 15:16
2007.07.22
Как поместить картинку в ListBox?


6-1166518747
xman
2006-12-19 11:59
2007.07.22
DXplay "диалог соединения на русском языке"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский