Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DirectX 9.0 C++ Рисование полигона, Не могу нарисовать полигон 
V
    Опции темы
MrBAIZOR
Дата 23.1.2011, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.1.2011

Репутация: нет
Всего: нет



Я только начал сам учить Directx и пройдя уже не мало проблем,никак не могу нарисовать полигон!  smile 
Скачал книгу Горнова,дошел до создания полигона,весь код просто слизал с книги - полигон не выводиться.

Решил что проблема в книге потому-что нашел не мало плохих коментов о книге.
Нашел другую,та же проблема.Все сделал,опять слизал код с книги,и все равно полигона нету! =(

Может проблема в настройке Студии,правильном подключении библиотек?
(У меня была проблема с подключением d3dx9.h/lib,пришлось указывать полный путь,иначе не работало!)

Может я не там вызываю нужную функцию,код в книгах не описывал сам _tWinMain.
Help!

_tWinMain(...)
Код C++
{
        .....
        .....
        initDirect3D();
        SetupVB();
        // Main message loop:
        for(;;)
        {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                        if(EXIT){break;}
                }
                else
                {
                        render2();G++;
                        if(G>255){G=0;}
                }
        }
}

Resourse.h
Код C++

LPDIRECT3D9 pD3D; // the Direct3D object
LPDIRECT3DDEVICE9 pd3dDevice; // the Direct3D device
LPDIRECT3DSURFACE9 surface=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
LPDIRECT3DVERTEXBUFFER9 buffer=NULL;
 
int G=0;
 
struct CUSTOMVERTEX
{
        FLOAT x, y, z, rhw; // the transformed, 3D position for the vertex
        DWORD color; // the vertex color
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW,D3DFVF_DIFFUSE)
 
bool initDirect3D(void)
{
        pD3D = NULL;
        pd3dDevice = NULL;
        // Create the DirectX object
        if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        {
                return false;
        }
        // Fill the presentation parameters structure
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory( &d3dpp, sizeof( d3dpp ) );
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
        d3dpp.BackBufferCount = 1;
        d3dpp.BackBufferHeight = 480;
        d3dpp.BackBufferWidth = 640;
        d3dpp.hDeviceWindow = GhWnd;
        // Create a default DirectX device
        if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT,
                D3DDEVTYPE_REF,
                GhWnd,
                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &d3dpp,
                &pd3dDevice ) ) )
        {
                return false;
        }
        HRESULT hResult = pd3dDevice->CreateOffscreenPlainSurface(640,480,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,&surface,NULL); // reserved; should be NULL
        // Check the return value to make sure that this function call was successful
        if (FAILED(hResult))
                return NULL;
 
        return true;
}
 
void render()
{
 
        D3DXLoadSurfaceFromFile( surface,NULL,NULL,L"D:\\ICO\\Vetton\\vetton_ru_762.jpg",NULL,D3DX_DEFAULT,0,NULL );
 
        // This will hold the back buffer
        IDirect3DSurface9* backbuffer = NULL;
        // Check to make sure you have a valid Direct3D device
        if( NULL == pd3dDevice )
                return;
        // Clear the back buffer to a blue color
        pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
                D3DCOLOR_XRGB(0,150,255), 1.0f, 0 );
        // Get the back buffer
        pd3dDevice->GetBackBuffer(0,
                0,
                D3DBACKBUFFER_TYPE_MONO,
                &backbuffer );
        // Copy the offscreen surface to the back buffer
        // Note the use of NULL values for the source and destination RECTs
        // This ensures a copy of the entire surface to the back buffer
        pd3dDevice->StretchRect( surface,
                NULL,
                backbuffer,
                NULL,
                D3DTEXF_NONE );
        // Present the back buffer contents to the display
        pd3dDevice->Present ( NULL, NULL, NULL, NULL );
}
 
 
void render2()
{
        // Clear the back buffer to black
        pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
        D3DCOLOR_XRGB(0,G,G), 1.0f, 0 );
        // Tell Direct3D to begin the scene
        pd3dDevice->BeginScene();
        // Draw the contents of the vertex buffer
        // Set the data stream first
        pd3dDevice->SetStreamSource( 0, buffer, 0, sizeof(CUSTOMVERTEX));
        
        // Set the Vertex format for the stream next
        pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        // Draw the vertices within the buffer using triangle strips
        pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
        // Tell Direct3D that drawing is complete
        pd3dDevice->EndScene();
        // copies the back buffer to the screen
        pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
 
 
void DeleteDirectXObjects()
{
        EXIT=true;
        if(NULL!=pD3D){pD3D->Release();}
        if(NULL!=pd3dDevice){pd3dDevice->Release();}
}
 
 
HRESULT SetupVB()
{
        HRESULT hr;
        // Initialize three vertices for rendering a triangle
        CUSTOMVERTEX g_Vertices[] ={
                {320.0f, 50.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 255, 0, 0), },
                {250.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 0, 255, 0), },
                {50.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 0, 0, 255), },
        };
        // Create the vertex buffer
        hr = pd3dDevice->CreateVertexBuffer(
                3*sizeof(CUSTOMVERTEX),
                0,
                D3DFVF_XYZRHW|D3DFVF_DIFFUSE,
                D3DPOOL_DEFAULT,
                &g_pVB,
                NULL );
        // Check to make sure that the vertex buffer was
        // created successfully
        if FAILED ( hr )
                return NULL;
        VOID* pVertices;
        // Lock the vertex buffer
        hr = g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 );
        // Check to make sure the lock was successful
        if FAILED (hr)
                return E_FAIL;
 
        // Copy the vertices into the buffer
        memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
        // Unlock the vertex buffer
        g_pVB->Unlock();
        return S_OK;
}

PM MAIL Skype   Вверх
Rickert
Дата 28.1.2011, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Модератор: Пользуйтесь тэгами.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
BorisVorontsov
Дата 28.1.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Цитата(MrBAIZOR @  23.1.2011,  18:27 Найти цитируемый пост)
(У меня была проблема с подключением d3dx9.h/lib,пришлось указывать полный путь,иначе не работало!)

А задал ли ты пути в настройках проекта?

По поводу рендеринга, начнем с того, что инициализируешь ты переменную pVertices, а рендеришь неинициализированную buffer


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
MrBAIZOR
Дата 9.2.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.1.2011

Репутация: нет
Всего: нет



Проблема решена.
Ошибка была в этой строке #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW,D3DFVF_DIFFUSE)

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.