Форум программистов, компьютерный форум, киберфорум
Наши страницы
DirectX
Войти
Регистрация
Восстановить пароль
 
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 5
Регистрация: 16.04.2009
Сообщений: 489
1

Не отображается юнит

20.11.2011, 03:03. Просмотров 699. Ответов 0
Метки нет (Все метки)

Решил в целях обучения сделать простенькую стратегия но сразу же потерпел неудачу, юнит которого я хочу вывести почему-то не отображается хоть все вроде бы работает исправно, даже карту выводит. Вот исходник:
main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include <Windows.h>
#include <mmsystem.h>
#pragma warning( disable : 4996 ) // disable deprecated warning 
#include <strsafe.h>
#include <math.h>
#pragma warning( default : 4996 )
#include "main.h"
 
 
 
Player *pl;
//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
LPDIRECT3D9             g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // Buffer to hold vertices
LPDIRECT3DINDEXBUFFER9  vBi=NULL;
LPDIRECT3DTEXTURE9      texture[5];
int *map=NULL;
 
// A structure for our custom vertex type
VOID D3DUtil_InitMaterial( D3DMATERIAL9& mtrl, FLOAT r, FLOAT g, FLOAT b, FLOAT a );
 
 
 
//-----------------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    // Create the D3D object.
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
 
    // Set up the structure used to create the D3DDevice
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof( d3dpp ) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.BackBufferHeight=480;
    d3dpp.BackBufferWidth=480;
 
    // Create the D3DDevice
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }
 
    // Turn off culling, so we see the front and back of the triangle
        g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
 
    // Turn off D3D lighting, since we are providing our own vertex colors
    g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
 
    return S_OK;
}
 
 
 
 
//-----------------------------------------------------------------------------
// Name: InitGeometry()
// Desc: Creates the scene geometry
//-----------------------------------------------------------------------------
HRESULT InitGeometry()
{
    // Initialize three vertices for rendering a triangle
    unsigned short index[]={
        0,1,2,2,1,3
    };
    // Create the vertex buffer.
    if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4 * sizeof( CUSTOMVERTEX ),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    {
        return E_FAIL;
    }
    // Fill the vertex buffer.
    CUSTOMVERTEX* pVertices;
    if( FAILED( g_pVB->Lock( 0, sizeof( CUSTOMVERTEX)*4, ( void** )&pVertices, 0 ) ) )
        return E_FAIL;
    for(int i = 0; i < 4; i++)
      pVertices[i].color = 0xffffffff;
    pVertices[0].position   = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
    pVertices[0].tu         = 0.0f;
    pVertices[0].tv         = 1.0f;
 
 
    pVertices[1].position   = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
    pVertices[1].tu         = 0.0f;
    pVertices[1].tv         = 0.0f;
 
 
    pVertices[2].position   = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
    pVertices[2].tu         = 1.0f;
    pVertices[2].tv         = 1.0f;
 
 
    pVertices[3].position   = D3DXVECTOR3( 1.0f, 1.0f, 0.0f );
    pVertices[3].tu         = 1.0f;
    pVertices[3].tv         = 0.0f;
 
    
    g_pVB->Unlock();
    VOID* indeces;
    if( FAILED( g_pd3dDevice->CreateIndexBuffer(6 * sizeof(short ),
                                                  0, D3DFMT_INDEX16,
                                                  D3DPOOL_DEFAULT, &vBi, NULL ) ) )
    {
        return E_FAIL;
    }
    if( FAILED( vBi->Lock( 0, sizeof( index ), ( void** )&indeces, 0 ) ) )
        return E_FAIL;
    memcpy( indeces, index, sizeof( index ) );
    vBi->Unlock();
    map=new int[100];
    for(int i=0; i<50; i++)
        map[i]=0;
    for(int i=50; i<60; i++)
        map[i]=1;
    for(int i=60; i<100; i++)
        map[i]=2;
    // Seed the randomized
    srand( timeGetTime() );
    for(int i = 0; i < 50; i++ ) {
        // Place rock tile if random 0-10 = 5
        if( rand()%10 == 5 ) 
            map[ i ] = 3;
    }
    // Seed the randomized
    srand( timeGetTime() );
    for(int i = 60; i < 100; i++ ) {
        // Place rock tile if random 0-10 = 5
        if( rand()%10 == 5 ) 
            map[ i ] = 4;
    }
    for(int i = 90; i < 100; i++ ) {
        // Place rock tile if random 0-10 = 5
            map[ i ] = 5;
    }
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("grass00.bmp"), 
                  &texture[0] ) ) )
   {
      MessageBox( NULL, TEXT("Не удается загрузитьтекстуру"), 
             TEXT("Текстура"),
         MB_OK );
      return E_FAIL;
   }
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("grass_edging_bottom.bmp"), 
                  &texture[1] ) ) )
   {
      MessageBox( NULL, TEXT("Не удается загрузить BG.bmp"), 
         TEXT("Урок 4 - Наложение текстур, фильтрация"),
         MB_OK );
      return E_FAIL;
   }
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("beach.bmp"), 
                  &texture[2] ) ) )
   {
      MessageBox( NULL, TEXT("Не удается загрузитьтекстуру"), 
             TEXT("Текстура"),
         MB_OK );
      return E_FAIL;
   }
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("grass_rocks.bmp"), 
                  &texture[3] ) ) )
   {
      MessageBox( NULL, TEXT("Не удается загрузитьтекстуру"), 
             TEXT("Текстура"),
         MB_OK );
      return E_FAIL;
   }
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("grass_splotch.bmp"), 
                  &texture[4] ) ) )
   {
      MessageBox( NULL, TEXT("Не удается загрузитьтекстуру"), 
             TEXT("Текстура"),
         MB_OK );
      return E_FAIL;
   }
    if(FAILED(pl=new Player()))
        return E_FAIL;
    return S_OK;
}
 
 
 
 
//-----------------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects
//-----------------------------------------------------------------------------
VOID Cleanup()
{
    if( g_pVB != NULL )
        g_pVB->Release();
    if( vBi != NULL )
        vBi->Release();
 
    if( g_pd3dDevice != NULL )
        g_pd3dDevice->Release();
 
    if( g_pD3D != NULL )
        g_pD3D->Release();
}
 
 
 
//-----------------------------------------------------------------------------
// Name: SetupMatrices()
// Desc: Sets up the world, view, and projection transform matrices.
//-----------------------------------------------------------------------------
VOID SetupMatrices()
{
        D3DXMATRIX  matproj,matview;
 
    // Set up the textures
    g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
    g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
 
    // Set miscellaneous render states
    g_pd3dDevice->SetRenderState( D3DRS_DITHERENABLE,   FALSE );
    g_pd3dDevice->SetRenderState( D3DRS_SPECULARENABLE, FALSE );
    g_pd3dDevice->SetRenderState( D3DRS_ZENABLE,        TRUE );
    g_pd3dDevice->SetRenderState( D3DRS_AMBIENT,        0x00888888 );
 
    // Setup the 3D View
    D3DXMatrixIdentity(&matview);
    g_pd3dDevice->SetTransform(D3DTS_VIEW, &matview);
 
    D3DXMatrixOrthoLH(&matproj, (float)480, (float)480, -1, 2);
    g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matproj);
    g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
    g_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
 
    // Setup a material
    D3DMATERIAL9 mtrl;
    D3DUtil_InitMaterial( mtrl, 1.0f, 1.0f, 1.0f, 1.0f );
    g_pd3dDevice->SetMaterial( &mtrl );
}
 
 
 
//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-----------------------------------------------------------------------------
VOID Render()
{
    // Clear the backbuffer to a black color
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );
 
    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        SetupMatrices();
        for(int iY = 0; iY <10; iY++ ) {
            // Horizontal
        for(int iX = 0; iX < 10; iX++ ) {
        // Setup the world, view, and projection matrices
        D3DXMATRIX  matWorld;
        D3DXMATRIX  matRotation;
        D3DXMATRIX  matTranslation;
        D3DXMATRIX  matScale;
        
        // Set default position,scale,rotation
        D3DXMatrixIdentity( &matTranslation );
        // Scale the tile
        D3DXMatrixScaling( &matScale, 48.0f, 48.0f, 1.0f );
        D3DXMatrixMultiply( &matTranslation, &matTranslation, &matScale );
        // Rotate the tile
        if(map[10*iY+iX]==5) {
        g_pd3dDevice->SetTexture(0,texture[1]);
        D3DXMatrixRotationZ( &matRotation, (3.14f));
        }
        else {
            g_pd3dDevice->SetTexture(0,texture[map[10*iY+iX]]);
            D3DXMatrixRotationZ( &matRotation, 0.0f );
        }
        D3DXMatrixMultiply( &matWorld, &matTranslation, &matRotation );
        // Move the tile
        matWorld._41 = -240.0f+(iX*48.0f)-0.5f; // X-Pos
        matWorld._42 = 192.0f-(iY*48.0f)+0.5f;  // Y-Pos
        if(map[10*iY+iX]==5) {
            matWorld._42+=48.0f;
            matWorld._41+=48.0f;
        }
        // Set matrix
        g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
        // Render the vertex buffer contents
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
        g_pd3dDevice->SetIndices(vBi);
        g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
        g_pd3dDevice->SetTexture( 0, NULL);
        pl->ShowPlayer();
        }
        }
        // End the scene
        g_pd3dDevice->EndScene();
    }
 
    // Present the backbuffer contents to the display
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
 
 
 
 
//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;
        case WM_CHAR:
            Cleanup();
            PostQuitMessage (0);
            return 0;
    }
 
    return DefWindowProc( hWnd, msg, wParam, lParam );
}
 
 
 
 
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//-----------------------------------------------------------------------------
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
    UNREFERENCED_PARAMETER( hInst );
 
    // Register the window class
    WNDCLASSEX wc =
    {
        sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L,
        GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
        L"D3D Tutorial", NULL
    };
    RegisterClassEx( &wc );
 
    // Create the application's window
    HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D Tutorial 03: Matrices",
        WS_OVERLAPPEDWINDOW, 100, 100, 480, 480,
                              NULL, NULL, wc.hInstance, NULL );
 
    // Initialize Direct3D
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        // Create the scene geometry
        if( SUCCEEDED( InitGeometry() ) )
        {
            // Show the window
            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );
 
            // Enter the message loop
            MSG msg;
            ZeroMemory( &msg, sizeof( msg ) );
            while( msg.message != WM_QUIT )
            {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else
                    Render();
            }
        }
    }
 
    UnregisterClass( L"D3D Tutorial", wc.hInstance );
    return 0;
}
 
 
VOID D3DUtil_InitMaterial( D3DMATERIAL9& mtrl, FLOAT r, FLOAT g, FLOAT b, FLOAT a )
{
     ZeroMemory( &mtrl, sizeof(D3DMATERIAL9) );
     mtrl.Diffuse.r = mtrl.Ambient.r = r;
     mtrl.Diffuse.g = mtrl.Ambient.g = g;
     mtrl.Diffuse.b = mtrl.Ambient.b = b;
     mtrl.Diffuse.a = mtrl.Ambient.a = a;
}
Player::Player() 
{
    if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, TEXT("warior.bmp"), 
                      &ptexture ) ) )
       {
          MessageBox( NULL, TEXT("Не удается загрузитьтекстуру"), 
             TEXT("Текстура"),
             MB_OK );
       }
    px=endx=300.0f;
    py=endy=300.0f;
    
}
void Player::ShowPlayer() {
    D3DXMATRIX matWorld;
    D3DXMATRIX matScale;
    D3DXMATRIX matTranslation;
    D3DXMATRIX  matRotation;
 
    D3DXMatrixIdentity(&matTranslation);
    D3DXMatrixTranslation( &matTranslation, px-0.5f, py-0.5f, 0.0f );
    // Set default position,scale,rotation
    // Rotate the tile
    D3DXMatrixScaling(&matWorld,48.0f,24.0f,1.0f);
    D3DXMatrixMultiply(&matTranslation,&matTranslation,&matScale);
    D3DXMatrixRotationZ( &matRotation, 0);
    D3DXMatrixMultiply( &matWorld, &matTranslation, &matRotation );
    g_pd3dDevice->SetTexture(0,ptexture);
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
    // Render the vertex buffer contents
    g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
    g_pd3dDevice->SetIndices(vBi);
    g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
    g_pd3dDevice->SetTexture( 0, NULL);
}

main.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <d3dx9.h>
struct CUSTOMVERTEX
{
    D3DXVECTOR3 position;     // The untransformed, 3D position for the vertex
    DWORD color;        // The vertex color
    FLOAT tu,tv;
 
};
 
// Our custom FVF, which describes our custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
 
class Player {
private:
    LPDIRECT3DTEXTURE9 ptexture[2];
    LPDIRECT3DVERTEXBUFFER9 points;
    LPDIRECT3DINDEXBUFFER9 pindex;
    float px;
    float py;
    float endx;
    float endy;
    CUSTOMVERTEX pvertex[4];
public:
    Player();
    void ShowPlayer();
    void SetPosition(int tx, int ty)
    {
    }
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 03:03
Ответы с готовыми решениями:

Юнит-тесты
Разбираюсь с юнит тестами. Надо обложить тестами функцию пузырьковой...

Юнит-тестирование
Расскажите про юнит тест на с++ , как его писать?Синтаксис? (У меня такое...

Юнит тесты
Помогите разобраться, не проходят два теста, я уже не знаю почему. ...

Роутер в Юнит
Добрый день. Посоветуйте пожалуйста что-нибуль что будет держать PPPoE...

Юнит тесты на JS
Что пользовать для модульных тестов на JS? Смотрю пол дня доку по Mocha но чет...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 03:03

Юнит-тестирование
Всем доброго времени суток! В последнее время меня начал сильно интересовать...

Юнит тестирование
Добрый день. Осваиваю азы написания юнит тестов. С обычными калькуляторами,...

Несколько форм на юнит
Добрый день! Можно ли создать несколько форм в одном unit'е? Пробовал в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru