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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод 3D-Cube 
V
    Опции темы
Stas96
  Дата 16.12.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Всем доброго дня!При изучении DirectX подошел к выводу 3D  объекта,но случилась такая проблема:
По задумке на экран должен был выводится трехмерный вращавшийся куб smile  вот сам код:
MatrixCube
Код

//-----------------------------------------------------------------------------------
// MatrixCube.CPP 
// Создаем Куб 
//-----------------------------------------------------------------------------------
#include <windows.h>         // Подключаем заголовочный файл Windows
#include <d3d9.h>            // Подключаем заголовочный файл DirectX 9 SDK
#include <d3dx9.h>           // Подключаем из D3DX утилит для работы с матрицами
#include <mmsystem.h>        // Подключаем системную библеотеку 
//-----------------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------------

LPDIRECT3D9                 pDirect3D          = NULL;      // Главный Direct3D обьект
LPDIRECT3DDEVICE9           pDirect3DDevice    = NULL;      // Устройство 
LPDIRECT3DVERTEXBUFFER9     pBufferVershin     = NULL;      // Буфер вершин
LPDIRECT3DINDEXBUFFER9      pBufferIndex       = NULL;      // Индексный буфер 

struct CUSTOMVERTEX
{
    FLOAT x, y, z;      //кординаты 
    DWORD color;        //цвет вершин
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)  // Формат вершин
//-----------------------------------------------------------------------------------
// Функция
// InitialDirect3D()
// Инициализация Direct3D
//-----------------------------------------------------------------------------------

HRESULT InitialDirect3D( HWND hwnd )
{
    
    if( NULL == ( pDirect3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    D3DDISPLAYMODE Display;
    if( FAILED( pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display ) ) )
        return E_FAIL;

    D3DPRESENT_PARAMETERS Direct3DParametr; 
    ZeroMemory( &Direct3DParametr, sizeof(Direct3DParametr) );
    Direct3DParametr.Windowed         = TRUE;
    Direct3DParametr.SwapEffect       = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;

    if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                      &Direct3DParametr, &pDirect3DDevice ) ) )
    {
        return E_FAIL;
    }
    
    //
    pDirect3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

    // Отключить освещенние Direct3D
    pDirect3DDevice->SetRenderState( D3DRS_LIGHTING, TRUE );

    return S_OK;
}
//---------------------------------------------------------------------------------------
// Функция
// InitialBufferVershin()
// Иннициализирует вершины
//---------------------------------------------------------------------------------------

HRESULT InitialBufferVershin()
{
   CUSTOMVERTEX Vershin[] =
    {
        {  1.0f,-1.0f, 1.0f, 0x00000fff, }, //А
        { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //В
        { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //С
        
        { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //C
        {  1.0f, 1.0f, 1.0f, 0x00000fff, }, //D
        {  1.0f,-1.0f, 1.0f, 0x00000fff, }, //A
      

        { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //А2
        { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //В2
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С2
        
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C2
        { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //D2
        { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //A2


        {  1.0f,-1.0f,-1.0f, 0x00000fff, }, //А3
        { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //В3
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С3
        
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C3
        {  1.0f, 1.0f,-1.0f, 0x00000fff, }, //D3
        {  1.0f,-1.0f,-1.0f, 0x00000fff, }, //A3

 
        {  1.0f,-1.0f,-1.0f, 0x00000fff, }, //А4
        {  1.0f,-1.0f, 1.0f, 0x00000fff, }, //В4
        {  1.0f, 1.0f, 1.0f, 0x00000fff, }, //С4
        
        {  1.0f, 1.0f, 1.0f, 0x00000fff, }, //C4
        {  1.0f, 1.0f,-1.0f, 0x00000fff, }, //D4
        {  1.0f,-1.0f,-1.0f, 0x00000fff, }, //A4


        {  1.0f, 1.0f, 1.0f, 0x00000fff, }, //А5
        { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //В5
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С5
        
        { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C5
        {  1.0f, 1.0f,-1.0f, 0x00000fff, }, //D5
        {  1.0f, 1.0f, 1.0f, 0x00000fff, }, //A5

        {  1.0f,-1.0f, 1.0f, 0x00000fff, }, //А6
        { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //В6
        { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //С6
        
        { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //C6
        {  1.0f,-1.0f,-1.0f, 0x00000fff, }, //D6
        {  1.0f,-1.0f, 1.0f, 0x00000fff, }, //A6
    };

   const unsigned short Index[]={
       0,1,2,     2,3,0,
       4,5,6,     6,7,4,
       8,9,10,    10,11,8,
       12,13,14,  14,15,12,
       16,17,18,  18,19,16,
       20,21,22,  22,23,20,
   };
   if( FAILED( pDirect3DDevice->CreateVertexBuffer( 36 * sizeof(CUSTOMVERTEX),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &pBufferVershin, NULL ) ) )
    return E_FAIL;
    //Блокируем
    VOID* pBV;
    if( FAILED( pBufferVershin->Lock( 0, sizeof(Vershin), (void**)&pBV, 0 ) ) ) 
        return E_FAIL;
    //Копируем
    memcpy( pBV, Vershin, sizeof(Vershin) );
    // Разблокируем
    pBufferVershin->Unlock();                

    return S_OK;
}
//-----------------------------------------------------------------------------
// Функция
// Matrix()
// Мировая матрица, матрица вида, матрица проекции
//-----------------------------------------------------------------------------
VOID Matrix()
{
    
    D3DXMATRIX MatrixWorld;      //  Мировая матрица (MatrixWorld)
    D3DXMATRIX MatrixView;       //  Матрица вида (MatrixView)
    D3DXMATRIX MatrixProjection; //  Матрица проекции (MatrixProjection)
    // MatrixWorld
    UINT  Time  = timeGetTime() % 5000;
    FLOAT Angel = Time * (2.0f * D3DX_PI) / 5000.0f;
    D3DXMatrixRotationX( &MatrixWorld, Angel  );
    pDirect3DDevice->SetTransform( D3DTS_WORLD, &MatrixWorld );
    // MatrixView
    D3DXMatrixLookAtLH( &MatrixView, &D3DXVECTOR3 ( 0.0f, 0.0f,-8.0f ),
                                     &D3DXVECTOR3 ( 0.0f, 0.0f, 0.0f ),
                                     &D3DXVECTOR3 ( 0.0f, 1.0f, 0.0f ) );
    pDirect3DDevice->SetTransform( D3DTS_VIEW, &MatrixView );
    // MatrixProjection
    D3DXMatrixPerspectiveFovLH( &MatrixProjection, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    pDirect3DDevice->SetTransform( D3DTS_PROJECTION, &MatrixProjection );
}
//-----------------------------------------------------------------------------------
//  Функция
//  RenderingDirect3D()
//  Рисуем
//-----------------------------------------------------------------------------------

VOID RenderingDirect3D()
{
    
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,0), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
    
    //  Здесь происходит прорисовка сцены
    Matrix();

    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 12 );
    //Конец сцены
    pDirect3DDevice->EndScene();       
    
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
      
}
//-----------------------------------------------------------------------------------
//  Функция
//  DeleteDirect3D()
//  Освобождает захваченные ресурсы
//-----------------------------------------------------------------------------------

VOID DeleteDirect3D()
{

    if( pBufferVershin  != NULL)
        pBufferVershin->Release(); 

    if( pDirect3DDevice != NULL) 
        pDirect3DDevice->Release();

    if( pDirect3D != NULL)
        pDirect3D->Release();
}
//-----------------------------------------------------------------------------------
// Функция
// MainWinProc()
// Здесь происходит обработка сообщений
//-----------------------------------------------------------------------------------

LRESULT CALLBACK MainWinProc(HWND   hwnd,            
                            UINT    msg,              
                            WPARAM  wparam,           
                            LPARAM  lparam)          
{
switch(msg)
    {    
    
     case WM_DESTROY: 
        {
        DeleteDirect3D();
        PostQuitMessage(0);
        return(0);
        } 
    } 

  return DefWindowProc(hwnd, msg, wparam, lparam);

} 
//-----------------------------------------------------------------------------------
// Функция
// WinMain
// Входная точка приложения
//-----------------------------------------------------------------------------------

int WINAPI WinMain(    HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{

WNDCLASSEX windowsclass;  // Создаем класс
HWND       hwnd;          // Создаем дескриптор окна
MSG        msg;           // Идентификатор сообщения

// Определим класс окна WNDCLASSEX
windowsclass.cbSize         = sizeof(WNDCLASSEX);
windowsclass.style            = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc    = MainWinProc;
windowsclass.cbClsExtra        = 0;
windowsclass.cbWndExtra        = 0;
windowsclass.hInstance        = hinstance;
windowsclass.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
windowsclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground    = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName    = NULL;
windowsclass.lpszClassName    = L"WINDOWSCLASS";
windowsclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);

// Зарегистрируем класс
if (!RegisterClassEx(&windowsclass))
    return(0);

// Теперь когда класс зарегестрирован можно создать окно
if (!(hwnd = CreateWindowEx(NULL,              // стиль окна
                       L"WINDOWSCLASS",         // класс
                       L" Урок 6. Вращаем куб ",        // название окна
                       WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                       300,150,                   // левый верхний угол
                       500,400,                // ширина и высота
                       NULL,                   // дескриптор родительского окна 
                       NULL,                   // дескриптор меню
                       hinstance,              // дескриптор экземпляра приложения
                       NULL)))                   // указатель на данные окна                                            
return 0;
     
 if( SUCCEEDED( InitialDirect3D( hwnd ) ) )
  { 
       if( SUCCEEDED( InitialBufferVershin( ) ) )
        {
           ShowWindow( hwnd, SW_SHOWDEFAULT );
           UpdateWindow( hwnd );

              ZeroMemory( &msg, sizeof(msg));
              while( msg.message!=WM_QUIT) 
                {
                  if(PeekMessage( &msg, NULL,0,0,PM_REMOVE ))
                   {
                      TranslateMessage( &msg );
                      DispatchMessage( &msg );
                   }
                  else
                  RenderingDirect3D();
                } 
        }
  } 
   return 0;
}
 
прочитав  урок разобрался как работаю некоторые функции.И тут проблема код не хочет компилироваться.Я его и так, и так, и все ровно ноль эмоций, а вот и сама ошибка:
"1>Lesson 6.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__timeGetTime@0 в функции "void __cdecl Matrix(void)" (?Matrix@@YAXXZ)
1>E:\C++\Программы\DirectX\Debug\DirectX.exe : fatal error LNK1120: 1 неразрешенных внешних элементов "
 
Прошу помощиsmile те кто может объяснить четко и понятно с меня (когда наберется 100 постов)"+"
Заранее благодарен



Это сообщение отредактировал(а) Stas96 - 16.12.2009, 21:44
PM MAIL   Вверх
rudvil
Дата 17.12.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Нужно подключить пару библиотек, добавь после инклудов
Код
#pragma comment(lib,"/путь_к_либе/d3d9.lib")
#pragma comment(lib,"/путь_к_либе/d3dx9.lib")

--------------------
xor
PM MAIL Skype   Вверх
EgoBrain
Дата 17.12.2009, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Project->Properties...->Configuration Properties->Linker->Input->Additional Dependencies Добавь туда winmm.lib.

Это сообщение отредактировал(а) EgoBrain - 17.12.2009, 04:34
PM MAIL ICQ Skype   Вверх
Stas96
Дата 17.12.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



EgoBrain, Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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