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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вывод Text, Вывод Text 
V
    Опции темы
Stas96
Дата 22.12.2009, 19:22 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем доброго времени суток!Выводя текст  в DirectX
Вот код:
Код

//-----------------------------------------------------------------------------------
// Text.CPP 
// Текст в Direct3D
//-----------------------------------------------------------------------------------
#include <windows.h>         // Подключаем заголовочный файл Windows
#include <d3d9.h>            // Подключаем заголовочный файл DirectX 9 SDK
#include <d3dx9.h>           // Подключаем из D3DX утилит для работы с матрицами
#include <mmsystem.h>        // Подключаем системную библеотеку 
#include <d3dx9core.h>       // Подключаем системный заголовочный файл
//-----------------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------------
LPDIRECT3D9                 pDirect3D          = NULL;      // Главный Direct3D обьект
LPDIRECT3DDEVICE9           pDirect3DDevice    = NULL;      // Устройство 
LPDIRECT3DVERTEXBUFFER9     pBufferVershin     = NULL;      // Буфер вершин
LPDIRECT3DINDEXBUFFER9      pBufferIndex       = NULL;      // Индексный буфер 
LPD3DXFONT                  pFont              = NULL;      // Шрифт Direct3D
RECT Rec;       // Прямоугольник
HFONT hFont;    // Шрифт
struct CUSTOMVERTEX
{
    FLOAT x,  y,  z;      //кординаты 
    FLOAT nx, ny, nz;     //нормали
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)  // Формат вершин
//-----------------------------------------------------------------------------------
// Функция
// 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         = FALSE;
    Direct3DParametr.SwapEffect       = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;
    Direct3DParametr.EnableAutoDepthStencil = TRUE;
    Direct3DParametr.AutoDepthStencilFormat = D3DFMT_D16;
    Direct3DParametr.BackBufferWidth  = GetSystemMetrics(SM_CXSCREEN);;
    Direct3DParametr.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);
    Direct3DParametr.BackBufferCount = 3;
    Direct3DParametr.FullScreen_RefreshRateInHz = Display.RefreshRate;
    if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                      &Direct3DParametr, &pDirect3DDevice ) ) )
        return E_FAIL;
    
    // Включаем отсеченние Direct3D
    pDirect3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW );
    // Подключаем Z буфер
    pDirect3DDevice->SetRenderState (D3DRS_ZENABLE, D3DZB_TRUE); 
   return S_OK;
}
//---------------------------------------------------------------------------------------
// Функция
// InitialObject()
// Иннициализирует вершины
//---------------------------------------------------------------------------------------
HRESULT InitialObject()
{
   CUSTOMVERTEX Vershin[] =
    {
      
       {  1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, }, //А
       {  1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, }, //В
       { -1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, }, //С
       { -1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, }, //D
        
       { -1.0f,-1.0f,-1.0f,-1.0f, 0.0f, 0.0f, }, //A2
       { -1.0f, 1.0f,-1.0f,-1.0f, 0.0f, 0.0f, }, //B2
       { -1.0f, 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, }, //C2
       { -1.0f,-1.0f, 1.0f,-1.0f, 0.0f, 0.0f, }, //D2
    
       { -1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, }, //A3
       { -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, }, //B3
       {  1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, }, //C3
       {  1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, }, //D3
        
       {  1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, }, //A4
       {  1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, }, //B4
       {  1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, }, //C4
       {  1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, }, //D4
        
       {  1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, }, //A5
       { -1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, }, //B5
       { -1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, }, //C5
       {  1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, }, //D5
       
       {  1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, }, //A6 
       { -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, }, //B6
       { -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, }, //C6
       {  1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, }, //D6
        
    };
    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(); 
    // Создаем индексный буфер
    pDirect3DDevice->CreateIndexBuffer( 36 * sizeof(Index), 
       0, D3DFMT_INDEX16, D3DPOOL_DEFAULT,&pBufferIndex, NULL);
    //Блокируем
    VOID* pBI;
    pBufferIndex->Lock( 0, sizeof(Index) , (void**)&pBI, 0 );
    //Копируем
    memcpy( pBI, Index, sizeof(Index) );
    // Разблокируем
    pBufferIndex->Unlock();
  return S_OK;
}
//-----------------------------------------------------------------------------
// Функция
// Matrix()
// Мировая матрица, матрица вида, матрица проекции
//-----------------------------------------------------------------------------
VOID Matrix()
{
    D3DXMATRIX MatrixWorld, MatrixWorldX, MatrixWorldY;      //  Мировая матрица (MatrixWorld)
    D3DXMATRIX MatrixView;       //  Матрица вида (MatrixView)
    D3DXMATRIX MatrixProjection; //  Матрица проекции (MatrixProjection)
    // MatrixWorld
    UINT  Time  = timeGetTime() % 5000;
    FLOAT Angel = Time * (2.0f * D3DX_PI) / 5000.0f;
    D3DXMatrixRotationX( &MatrixWorldX,  Angel );
    D3DXMatrixRotationY( &MatrixWorldY,  Angel );
    D3DXMatrixMultiply(&MatrixWorld,&MatrixWorldX,&MatrixWorldY );
    pDirect3DDevice->SetTransform( D3DTS_WORLD,&MatrixWorld );
    // MatrixView
    D3DXMatrixLookAtLH( &MatrixView,  &D3DXVECTOR3 ( 0.0f, 0.0f,-11.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 );
}
//----------------------------------------------------------------------------------
//  Функция
//  LightMaterial()
//  Инициализируем Свет и Материал
//-----------------------------------------------------------------------------------
VOID LightMaterial()
{
    D3DMATERIAL9  Material; // Материал
    D3DLIGHT9     Light;    // Свет

    //  Установим материал
    ZeroMemory( &Material, sizeof(D3DMATERIAL9) );
    Material.Diffuse.r = Material.Ambient.r = 1.0f;
    Material.Diffuse.g = Material.Ambient.g = 1.0f;
    Material.Diffuse.b = Material.Ambient.b = 0.0f;
    Material.Diffuse.a = Material.Ambient.a = 1.0f;
    pDirect3DDevice->SetMaterial( &Material );

    D3DXVECTOR3 VectorDir;
    //  Установим свет
    ZeroMemory( &Light, sizeof(D3DLIGHT9) );
    Light.Type       = D3DLIGHT_DIRECTIONAL;
    Light.Diffuse.r  = 1.0f;
    Light.Diffuse.g  = 1.0f;
    Light.Diffuse.b  = 1.0f;
    Light.Range      = 1000.0f;
    //  Установим нормаль
    VectorDir = D3DXVECTOR3(0.0f, 0.0f,1.0f),
    D3DXVec3Normalize( (D3DXVECTOR3*)&Light.Direction, &VectorDir );

    pDirect3DDevice->SetLight( 0, &Light );
    pDirect3DDevice->LightEnable( 0, TRUE );

    pDirect3DDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
    pDirect3DDevice->SetRenderState( D3DRS_AMBIENT, 0 );
}
//--------------------------------------------------------------------------------------
//  Функция
//  DrawMyText()
//  Выводит текст на экран
//--------------------------------------------------------------------------------------
VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
        char* StrokaTexta,int x,int y,int x1,int y1,D3DCOLOR MyColor)
{
    // Создаем шрифт
    hFont = CreateFont(30,10,0,0,FW_NORMAL,FALSE,FALSE,0,1,0,            
                        0,0,DEFAULT_PITCH|FF_MODERN,L"Arial");    
    // Координаты прямоугольника
    Rec.left = x;                            
    Rec.top  = y;
    Rec.right  = x1;
    Rec.bottom = y1;
    // Инициализируем шрифт
    ID3DXCreateFont(pDirect3DDevice, hFont, &pFont);    
    // Начало
    pFont->Begin();    
    // Вывод текста
    pFont->DrawText(StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);
    // Конец
    pFont->End();                                    
}
//-----------------------------------------------------------------------------------
//  Функция
//  RenderingDirect3D()
//  Рисуем
//-----------------------------------------------------------------------------------

VOID RenderingDirect3D()
{
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER,
                              D3DCOLOR_XRGB(60,100,150), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
    
    // Здесь происходит прорисовка сцены
    LightMaterial();
    Matrix();
 
    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->SetIndices(pBufferIndex);

    // Вывод объекта
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
    // Вывод текста
    DrawMyText(pDirect3DDevice,hFont,"Урок 9\nТекст в Direct3D\nДля выхода нажмите клавишу <Esc> ",
                       10,10,500,700,D3DCOLOR_ARGB(250,250,250,50));              
     // Конец сцены
    pDirect3DDevice->EndScene();       
    //  Представляем на экран 
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
}
//-----------------------------------------------------------------------------------
//  Функция
//  DeleteDirect3D()
//  Освобождает захваченные ресурсы
//-----------------------------------------------------------------------------------
VOID DeleteDirect3D()
{

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

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

    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);
        }
     case WM_KEYDOWN: 
        {
        if(wparam==VK_ESCAPE)
        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" Текст в Direct3D ",                // название окна
                       WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                       0,0,                   // левый верхний угол
                       GetSystemMetrics(SM_CXSCREEN),// ширина
                       GetSystemMetrics(SM_CYSCREEN),// высота
                       NULL,                   // дескриптор родительского окна 
                       NULL,                   // дескриптор меню
                       hinstance,              // дескриптор экземпляра приложения
                       NULL)))                   // указатель на данные окна                                            
return 0;

 if( SUCCEEDED( InitialDirect3D( hwnd ) ) )
  { 
     if( SUCCEEDED( InitialObject( ) ) )
       {
           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>e:\c++\программы\directx\directx\lesson 9.cpp(214) : error C3861: ID3DXCreateFont: идентификатор не найден
1>e:\c++\программы\directx\directx\lesson 9.cpp(216) : error C2039: Begin: не является членом "ID3DXFont"
1>        c:\program files (x86)\microsoft directx sdk (august 2009)\include\d3dx9core.h(314): см. объявление 'ID3DXFont'
1>e:\c++\программы\directx\directx\lesson 9.cpp(218) : error C2660: ID3DXFont::DrawTextW: функция не принимает 5 аргументов
1>e:\c++\программы\directx\directx\lesson 9.cpp(220) : error C2039: End: не является членом "ID3DXFont"
1>        c:\program files (x86)\microsoft directx sdk (august 2009)\include\d3dx9core.h(314): см. объявление 'ID3DXFont' "

  Прошу объяснить мне в чем проблема. smile   Заранее благодарен!!! smile 

Это сообщение отредактировал(а) Stas96 - 22.12.2009, 19:24
PM MAIL   Вверх
Sfate
  Дата 22.12.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



вместо ID3DXCreateFont надо D3DXCreateFont
"Begin: не является членом "ID3DXFont"" естественно не является)) вызов прорисовки текста должен производиться между pDirect3DDevice->BeginScene() и pDirect3DDevice->EndScene()... тоже самое и про end...
"DrawTextW" smile такой функции у тебя в коде не видно... ток DrawText...
пример, на скорую руку)
Код

    pDirect3DDevice->BeginScene();
//текст/*начало
    HFONT hFont;
    LPD3DXFONT pFont = NULL;
    RECT Rec;
    int x1=10;
    int y1=10;
    int x2=500;
    int y2=700;
    D3DCOLOR MyColor=D3DCOLOR_ARGB(250,250,250,50);
    // Создаем шрифт
    D3DXCreateFont(pDevice,30,10,FW_NORMAL,0,FALSE,1,0,0,DEFAULT_PITCH|FF_MODERN,L"Arial",&pFont);    
    // Координаты прямоугольника
    Rec.left = x1;                            
    Rec.top  = y1;
    Rec.right  = x2;
    Rec.bottom = y2;

    pFont->DrawText(NULL,L"Лаб. раб. №3\nВращение куба\nДля выхода нажмите клавишу <Esc> ", -1, &Rec, DT_WORDBREAK, MyColor);
    // удаляем
    pFont->Release();
//текст*/конец
    
    render_scene( pDevice );

    pDirect3DDevice->EndScene();


Это сообщение отредактировал(а) Sfate - 22.12.2009, 20:41
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ААА...Спасибо большое. smile  smile  smile  smile Наверное в  книге автор с примером напортачил smile 

Это сообщение отредактировал(а) Stas96 - 22.12.2009, 22:26
PM MAIL   Вверх
Sfate
Дата 22.12.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



Цитата(Stas96 @  22.12.2009,  22:22 Найти цитируемый пост)
Наверное в  книге автор с примером напортачил 
да... бывают случаи smile 


Цитата(Stas96 @  22.12.2009,  22:22 Найти цитируемый пост)
ААА...Спасибо большое
пжл smile сам просто недавно с текстом разобрался smile 
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Слушай уже другие проблемы(
Вот ошибки:  ">e:\c++\программы\directx\directx\lesson 9.cpp(215) : error C2660: D3DXCreateFontW: функция не принимает 11 аргументов
1>e:\c++\программы\directx\directx\lesson 9.cpp(222) : error C2660: D3DXCreateFontW: функция не принимает 3 аргументов
1>e:\c++\программы\directx\directx\lesson 9.cpp(226) : error C2660: ID3DXFont::DrawTextW: функция не принимает 5 аргументов "
А вот код:
Код

//--------------------------------------------------------------------------------------
//  Функция
//  DrawMyText()
//  Выводит текст на экран
//--------------------------------------------------------------------------------------
VOID DrawText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
char* StrokaTexta)

{

    int x = 10;
    int y = 20; 
    int x1 = 500;  
    int y1 = 700; 
    D3DCOLOR MyColor = D3DCOLOR_ARGB(250,250,250,50);
    // Создаем шрифт
    D3DXCreateFont(30,10,FW_NORMAL,0,FALSE,1,0,0,DEFAULT_PITCH|FF_MODERN,L"Arial",&pFont);   
    // Координаты прямоугольника
    Rec.left = x;                            
    Rec.top  = y;
    Rec.right  = x1;
    Rec.bottom = y1;
    // Инициализируем шрифт
    D3DXCreateFont(pDirect3DDevice, hFont, &pFont);    
    // Начало
    pDirect3DDevice->BeginScene();
    // Вывод текста
    pFont->DrawText(StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);
    // Конец
    pDirect3DDevice->EndScene();                                
}
//-----------------------------------------------------------------------------------
//  Функция
//  RenderingDirect3D()
//  Рисуем
//-----------------------------------------------------------------------------------

VOID RenderingDirect3D()
{
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER,
                              D3DCOLOR_XRGB(60,100,150), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
    
    // Здесь происходит прорисовка сцены
    LightMaterial();
    Matrix();
 
    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->SetIndices(pBufferIndex);

    // Вывод объекта
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
    // Вывод текста
     pFont->DrawText(NULL,L"Лаб. раб. №3\nВращение куба\nДля выхода нажмите клавишу <Esc> ", -1, &Rec, DT_WORDBREAK, MyColor);

     // Конец сцены
    pDirect3DDevice->EndScene();       
    //  Представляем на экран 
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
}

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


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



смотри у тебя какбэ VOID DrawText(бла... бла... бла...) и там же pFont->DrawText переименуй как нить функцию, там где void...
и еще в этой же функции pDirect3DDevice->BeginScene(); и pDirect3DDevice->EndScene();  лишнее, они должны быть в только в фукции рендера, у тебя это RenderingDirect3D()...
з.ы. ща быстренько твой код подредактирую... погодь....

Это сообщение отредактировал(а) Sfate - 22.12.2009, 23:09
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



VOID DrawText(бла... бла... бла...) 

1.Я cделал void DrawMyText.

2. Функцию  pDirect3DDevice->BeginScene(); и pDirect3DDevice->EndScene();  убрал.
И все равно может я подключить что-то забыл?
PM MAIL   Вверх
Sfate
Дата 22.12.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



Код

//  Функция
//  DrawMyText()
//  Выводит текст на экран
//--------------------------------------------------------------------------------------
VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
        char* StrokaTexta,int x,int y,int x1,int y1,D3DCOLOR MyColor)
{

    int x = 10;
    int y = 20; 
    int x1 = 500;  
    int y1 = 700; 
    D3DCOLOR MyColor = D3DCOLOR_ARGB(250,250,250,50);
    // Создаем шрифт
    D3DXCreateFont(30,10,FW_NORMAL,0,FALSE,1,0,0,DEFAULT_PITCH|FF_MODERN,L"Arial",&pFont);   
    // Координаты прямоугольника
    Rec.left = x;                            
    Rec.top  = y;
    Rec.right  = x1;
    Rec.bottom = y1;  
    // Вывод текста
    pFont->DrawText(NULL,StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);
    // удаляем
    pFont->Release();
                         
}
//-----------------------------------------------------------------------------------
//  Функция
//  RenderingDirect3D()
//  Рисуем
//-----------------------------------------------------------------------------------

VOID RenderingDirect3D()
{
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER,
                              D3DCOLOR_XRGB(60,100,150), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
    
    // Здесь происходит прорисовка сцены
    LightMaterial();
    Matrix();
 
    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->SetIndices(pBufferIndex);

    // Вывод объекта
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
    // Вывод текста
     pFont->DrawMyText(pDirect3DDevice,hFont,"Лаб. раб. №3\nВращение куба\nДля выхода нажмите клавишу <Esc> ",10,10,500,700,D3DCOLOR_ARGB(250,250,250,50));

     // Конец сцены
    pDirect3DDevice->EndScene();       
    //  Представляем на экран 
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
}

вот юзай должно работать... 
з.ы. мы с тобой уже по звездочке наколотили на твоем посте smile 

Это сообщение отредактировал(а) Sfate - 22.12.2009, 23:20
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Блин я с этим кодом здурею скоро smile !!!
Все равно  не работает ладно завтра на свежую голову может чето придумаю.
Sfate, Спасибо за помощь!

з.ы. Ага smile  smile  smile  smile 

Это сообщение отредактировал(а) Stas96 - 22.12.2009, 23:27
PM MAIL   Вверх
Sfate
Дата 22.12.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



Stas96, пжл)
странно... с моим кодом работать должно... какие ошибки?
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1>e:\c++\программы\directx\directx\lesson 9.cpp(209) : error C2660: D3DXCreateFontW: функция не принимает 11 аргументов
1>e:\c++\программы\directx\directx\lesson 9.cpp(216) : error C2664: ID3DXFont::DrawTextW: невозможно преобразовать параметр 2 из 'char *' в 'LPCWSTR'
1>        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>e:\c++\программы\directx\directx\lesson 9.cpp(246) : error C2660: ID3DXFont::DrawTextW: функция не принимает 8 аргументов

Добавлено через 2 минуты и 17 секунд
Ты правда в коде  чуть неверно написал
Место:
Код

VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
        char* StrokaTexta,int x,int y,int x1,int y1,D3DCOLOR MyColor)
{
    int x = 10;
    int y = 20; 
    int x1 = 500;  
    int y1 = 700; 
    D3DCOLOR MyColor = D3DCOLOR_ARGB(250,250,250,50);

Мне кажется надо:
Код

VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
        char* StrokaTexta)
{
    int x = 10;
    int y = 20; 
    int x1 = 500;  
    int y1 = 700; 
    D3DCOLOR MyColor = D3DCOLOR_ARGB(250,250,250,50);

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


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



со второй ошибкой понятно... перед кавычками с текстом напиши "L" без кавычек...
ты какой пакет sdk используешь не 2004 года?
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 22.12.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет... Август 2009
З.Ы Давай завтра продолжим а тут уже спать гонят( Пока)


Это сообщение отредактировал(а) Stas96 - 22.12.2009, 23:34
PM MAIL   Вверх
Sfate
Дата 22.12.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



ок... снов...
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Sfate
Дата 22.12.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



все отредактил... в студии компилится без ошибок и работает))
Код
VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont,
        char* StrokaTexta,int x,int y,int x1,int y1,D3DCOLOR MyColor)
{
    MyColor = D3DCOLOR_ARGB(250,250,250,50);
    // Создаем шрифт
    D3DXCreateFont(pDirect3DDevice,30,10,FW_NORMAL,0,FALSE,1,0,0,DEFAULT_PITCH|FF_MODERN,"Arial",&pFont);   
    // Координаты прямоугольника
    Rec.left = x;                            
    Rec.top  = y;
    Rec.right  = x1;
    Rec.bottom = y1;  
    // Вывод текста
    pFont->DrawText(NULL,StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);
    // удаляем
    pFont->Release();
                         
}
VOID RenderingDirect3D()
{
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER,
                              D3DCOLOR_XRGB(60,100,150), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
    
    // Здесь происходит прорисовка сцены
    LightMaterial();
    Matrix();
 
    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->SetIndices(pBufferIndex);

    // Вывод объекта
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
    // Вывод текста
     DrawMyText(pDirect3DDevice,hFont,"Лаб. раб. №3\nВращение куба\nДля выхода нажмите клавишу <Esc> ",10,10,500,700,D3DCOLOR_ARGB(250,250,250,50));

     // Конец сцены
    pDirect3DDevice->EndScene();       
    //  Представляем на экран 
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
}

вот теперь смело можешь юзать))
если будет ссылаться на отсутствие либы d3dx9_XX.dll (3.7 МБ), просто добавь в директорию, куда компилиться exe-шник эту либу... XX меняешь на цифры в ошибке...
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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