c++ - Displaying mesh using DirectX 9 -
<पूर्व>
#include & lt; windows.h & gt; # शामिल करें & lt; d3d9 एच & gt; # शामिल करें & lt; D3DX9Mesh.h & gt; #define THROW_ERROR_AND_EXIT (x) {\ संदेशबॉक्स (0, x, 0,0); \ Return -1; \} LRESULT कॉलबैक WndProc (HWND hWnd, uint संदेश, wParam wParam, lParam lParam) {// संभाल पास घटना स्विच (एमएसजी) {मामले WM_DESTROY: PostQuitMessage (0); वापसी 0; } वापसी DefWindowProc (hWnd, msg, wParam, lParam); } पूर्णांक APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, पूर्णांक nCmdShow) {// पंजीयन वर्ग WNDCLASSEX wcex; Wcex.cbSize = sizeof (WNDCLASSEX); Wcex.style = CS_HREDRAW | CS_VREDRAW; Wcex.lpfnWndProc = (WNDPROC) WndProc; Wcex.cbClsExtra = 0; Wcex.cbWndExtra = 0; Wcex.hInstance = hInstance; Wcex.hIcon = 0; Wcex.hCursor = लोडकर्सर (NULL, IDC_ARROW); Wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); Wcex.lpszMenuName = 0; Wcex.lpszClassName = "MyMeshViewer"; Wcex.hIconSm = 0; RegisterClassEx (& amp; wcex); // बनाना विंडो HWND hWnd = CreateWindow ( "MyMeshViewer", "MyMeshViewer", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, शून्य, शून्य, hInstance, शून्य); // डायरेक्ट 3 डी वस्तु बनाना LPDIRECT3D9 d3dObject = NULL; LPDIRECT3DDEVICE9 d3dDevice = NULL; d3dObject = Direct3DCreate9 (D3D_SDK_VERSION); // डायरेक्ट 3 डी डिवाइस बनाना अगर (नाल == डी 3 डी ऑब्जेक्ट) THROW_ERROR_AND_EXIT ("NULL == d3dObject"); D3DPRESENT_PARAMETERS presParams; ZeroMemory (& amp; presParams, sizeof (presParams)); presParams.Windowed = true; presParams.SwapEffect = D3DSWAPEFFECT_DISCARD; presParams.BackBufferFormat = D3DFMT_UNKNOWN; presParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE; HRESULT घंटे = d3dObject- & gt; CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, & amp; presParams, & amp; d3dDevice); अगर (FAILED (एचआर)) THROW_ERROR_AND_EXIT ("d3dObject- & gt; CreateDevice"); // प्रतिपादन d3dDevice- & gt; साफ़ करें (0, शून्य, डी 3 डीक्लियर_TARGET, D3DCOLOR_XRGB (0, 255,0), 1.0 एफ, 0); d3dDevice- & gt; BeginScene (); // मेष लोड हो रहा है LPD3DXBUFFER contentBuffer = NULL; DWORD nummaterials = 0; एलपीडी 3 डीएक्सएमईएसएच जाल = नल; घंटा = D3DXLoadMeshFromX ( "tiger.x", D3DXMESH_SYSTEMMEM, d3dDevice, शून्य, & amp; materialBuffer, शून्य, & amp; numMaterials, & amp; जाल); अगर (FAILED (एचआर)) THROW_ERROR_AND_EXIT ("hr = D3DXLoadMeshFromX"); // सामग्री बफर लोड हो रहा है D3DXMATERIAL * d3dxMaterials = (D3DXMATERIAL *) materialBuffer- & gt; GetBufferPointer (); // होल्डिंग सामग्री और बनावट संकेतक D3DMATERIAL9 * meshMaterials = नया D3DMATERIAL9 [nummaterials]; एलपीडीईआरटीईटी 3 डीएक्वेअर 9 9 * मेशटिचचर = नया एलपीडीईआरईटी 3 डीएक्वायर 9 [न्यूमेटरीज]; // सामग्री (DWORD i = 0; i & lt; nummaterials; i ++) के लिए सामग्री और बनावट सरणियां भरना {// सामग्री की सामग्री की सामग्री की नकल [i] = डी 3 डीएक्सएमएरियल्स [आई] .MATD3D; // सामग्री के लिए परिवेश का रंग सेट करें (डी 3 डीएक्स ऐसा नहीं करता है) मेष सामग्री [आई] एंबिएन्ट = मेश सामग्री [आई] .Diffuse; // बनावट बनायें यदि वह मौजूद है - यह संभव नहीं हो सकता है [i] = नल; अगर (d3dxMaterials [i] .pTextureFilename) D3DXCreateTextureFromFile (d3dDevice, d3dxMaterials [i] .pTextureFilename, & amp; meshTextures [i]); } सामग्रीबफर- & gt; रिलीज़ (); (DWORD i = 0; i & lt; nummaterials; i ++) {// इस सबसेट के लिए सामग्री और बनावट सेट करें d3dDevice-> SetMaterial (& amp; meshMaterials [i]); d3dDevice- & gt; SetTexture (0, meshTextures [i]); // मेष टॉपसेट मेष ड्रा-> ड्रासब्सेट (i); } D3dDevice- & gt; एंडस्सेन (); D3dDevice- & gt; वर्तमान (शून्य, शून्य, शून्य, शून्य); // शो विंडो दिखाएँ (एचडब्ल्यूएनड, एनसीएमडी शो); UpdateWindow (hWnd); // संदेश MSG msg संभाल; जबकि (GetMessage (& msg, NULL, 0, 0)) {अनुवाद संदेश (& amp; msg); DispatchMessage (& amp; msg); } वापसी (इंट) msg.wParam; }
यह एक मेष tiger.x
को लोड करने के लिए मेरा प्रोग्राम है और इसे प्रदर्शित करें। लेकिन यह प्रदर्शित नहीं हो रहा है। वेरिएबल nummaterials
का मान हर समय 1 रहता है। मुझे लगता है मेरे कार्यक्रम के साथ कुछ समस्या है। कोई कृपया मुझे इसे समझने में मदद करें धन्यवाद।
नीचे tiger.x
जाल फ़ाइल
समस्या यह है कि आप विंडो को प्रतिपादन कर रहे हैं और फिर अपडेटविंडो को बुलाते हैं जो फिर से पेंट करता है, इस प्रकार ड्राइंग मिटा देता है।
डायरेक्टएक्स एसडीके और नमूनों को देखो कि कैसे एक 'सही' रेंडरिंग पाश बनाने के लिए।
Comments
Post a Comment