Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка текстуры в DirectX 9  (Прочитано 32738 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« : 17-06-2009 10:37 » 

Я хочу наложить текстуру на два куба, но на две стороны текстура не накладывается.

Вот как я обявляю вершины кубов

Код:
// Создаём вершины для куба
TRIANGLEVERTEX Vertices[] =
{
            {-2.5f, -2.5f, -2.5f, 0x00000fff, 1.0f, 0.0f},
            {-2.5f,  2.5f, -2.5f, 0x00000fff, 1.0f, 1.0f},
            { 2.5f,  2.5f, -2.5f, 0x00000fff, 0.0f, 1.0f},
            { 2.5f, -2.5f, -2.5f, 0x00000fff, 0.0f, 0.0f},
            { 2.5f, -2.5f,  2.5f, 0x00000fff, 0.0f, 1.0f},
            { 2.5f,  2.5f,  2.5f, 0x00000fff, 0.0f, 0.0f},
            {-2.5f,  2.5f,  2.5f, 0x00000fff, 1.0f, 0.0f},
            {-2.5f, -2.5f,  2.5f, 0x00000fff, 1.0f, 1.0f}
};

// Заполняем индексный буфер
unsigned short Indexes[36] =
{
        0, 1, 2,
        0, 2, 3,
        4, 5, 6,
        4, 6, 7,
        3, 2, 5,
        3, 5, 4,
        7, 6, 1,
        7, 1, 0,
        1, 6, 5,
        1, 5, 2,
        3, 4, 7,
        3, 7, 0
};

И ещё так как кубы мелковаты, я установил точку откуда смотрю 10 в место 80 и тогда на экране появляется один куб который можно хорошо рассмотреть.

Не ужели чтобы мне правельно выводить текстуры мне нужно описать 24 вершины куба в место 8 или можно как-то исхитрится?

И ещё я компилирую в среде Microsoft Visual C++ 6.0 Standard Edition и если я хочу запустить программу на компьютере, где не установлена среда Microsoft Visual C++ 6.0, то выскакивает сообщение об ошибке что программа не может найти какуюто d3dx9_40.dll от directx.

Что с этим делать?

В архиве лежит код, исполняемый файл и файл с текстурой.

* cube_texture.rar (46.42 Кб - загружено 1144 раз.)
« Последнее редактирование: 17-06-2009 11:11 от zuze » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 17-06-2009 10:42 » 

>>Что с этим делать?

установить DirectX9 на WXP или DirectX10 на висте Улыбаюсь

А с текстурами - наверное, легко запутаться в описаловках, проще сделать в 3D редакторе и импортировать, наверняка это возможно



-----------
хотя... сообщение про d3dx9_40.dll  и у меня выскочило,  а у меня 6 студия стоит
Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #2 : 17-06-2009 10:49 » 

У меня установлен DirectX9 на Windows XP.
Немного помучаюсь, а если не получится воспользую 3D редактором.
В примере который есть у меня показано наложение текстуры на куб, но в примере 24 вершины, а я взял вершины из 3D редактора, а он там всё оптимизировал и построил куб из 8 вершин, вот теперь и мучаюсь с текстурой.
Записан
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #3 : 17-06-2009 13:51 » 

Можно сделть  только так, используя 24 вершины

Код:
// Создаём вершины для куба
TRIANGLEVERTEX Vertices[] =
{

      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //А
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //В
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //С
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D
       
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A2
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B2
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C2
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D2
   
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A3
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B3
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C3
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D3
       
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A4
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B4
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C4
      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D4
       
      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A5
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B5
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C5
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D5
       
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A6
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B6
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C6
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f} //D6
};

// Заполняем индексный буфер
unsigned short Indexes[36] =
{
        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
};

А что касается второго вопроса, пока не решил, как это исправить.
Записан
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #4 : 17-06-2009 15:36 » 

Разобрался со вторым вопросом.
Оказывается надо было установить более новый DirectX, я установил DirectX 9.26.1590 (Март 2009).
Записан
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #5 : 18-06-2009 01:04 » 

И ещё маленькое замечание, в моём случае тексура серого цвета, а цвет при инициализации вершин 0x00000fff (синий) из-за этого синий цвет наползает на текстуру, что бы этого не было надо выбрать белый цвет (0xffffffff).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 18-06-2009 02:52 » 

имхо, цвет вершин используется только при градиентной заливке полигона, а при накладывании текстуры этот градиент просто не надо включать, то есть цвет вершин не должен влиять на вид текстуры (подобрать опции Улыбаюсь )
Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #7 : 18-06-2009 11:46 » 

Фу, разобрался оказывается, надо убрать цвет вершин и вставить в место него нормали, вот какие изменения я внёс и всё заработало.

Было так

Код:
struct TRIANGLEVERTEX
{
    float x, y, z;
    D3DCOLOR color;     // цвет
    float tu, tv;
};

А стало так

Код:
struct TRIANGLEVERTEX
{
    float x, y, z;
    float nx, ny, nz;     // нормали
    float tu, tv;
};

Было так

Код:
#define D3DFVF_TRIANGLEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

А стало так

Код:
#define D3DFVF_TRIANGLEVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)

Было так

Код:
// Создаём вершины для куба
TRIANGLEVERTEX Vertices[] =
{

      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //А
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //В
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //С
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D
       
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A2
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B2
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C2
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D2
   
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A3
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B3
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C3
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D3
       
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A4
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B4
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C4
      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}, //D4
       
      {  1.0f,-1.0f,-1.0f, 0x00000fff, 1.0f, 1.0f}, //A5
      { -1.0f,-1.0f,-1.0f, 0x00000fff, 0.0f, 1.0f}, //B5
      { -1.0f,-1.0f, 1.0f, 0x00000fff, 0.0f, 0.0f}, //C5
      {  1.0f,-1.0f, 1.0f, 0x00000fff, 1.0f, 0.0f}, //D5
       
      {  1.0f, 1.0f, 1.0f, 0x00000fff, 1.0f, 1.0f}, //A6
      { -1.0f, 1.0f, 1.0f, 0x00000fff, 0.0f, 1.0f}, //B6
      { -1.0f, 1.0f,-1.0f, 0x00000fff, 0.0f, 0.0f}, //C6
      {  1.0f, 1.0f,-1.0f, 0x00000fff, 1.0f, 0.0f}  //D6
};

А стало так

Код:
// Создаём вершины для куба
TRIANGLEVERTEX Vertices[] =
{

      {  1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 1.0f, 1.0f,}, //А
      {  1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 1.0f,}, //В
      { -1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,}, //С
      { -1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f, 1.0f, 0.0f,}, //D
       
      { -1.0f,-1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 1.0f,}, //A2
      { -1.0f, 1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 1.0f,}, //B2
      { -1.0f, 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 0.0f,}, //C2
      { -1.0f,-1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f,}, //D2
   
      { -1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}, //A3
      { -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f,}, //B3
      {  1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,}, //C3
      {  1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f,}, //D3
       
      {  1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,}, //A4
      {  1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,}, //B4
      {  1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,}, //C4
      {  1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,}, //D4
       
      {  1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, 1.0f, 1.0f,}, //A5
      { -1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f, 0.0f, 1.0f,}, //B5
      { -1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, 0.0f, 0.0f,}, //C5
      {  1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f, 1.0f, 0.0f,}, //D5
       
      {  1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,}, //A6
      { -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,}, //B6
      { -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,}, //C6
      {  1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,}  //D6
};
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 18-06-2009 14:02 » 

то есть разница была в конструкторе (третий аргумент - DWORD или float) ? )


----

хотя, при чём тут конструктор, его же там нету. Тогда я не понял разницу


----
а, всё понял ))) Дело в опциях и было, как я и предположил
« Последнее редактирование: 18-06-2009 14:05 от Алексей1153++ » Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #9 : 19-06-2009 07:43 » 

Может будет кому полезна следующая информация я попытался наложить две разные текстуры на два объекта (куба)

У меня был такой код и обе текстуры накладывались на каждый объект (куб)

Код:
// Функция рендеринга Direct3D
void RenderingDirect3D(void)
{
    if (pDirect3DDevice == NULL)
        return;

    pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);

    pDirect3DDevice->BeginScene();

    pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX));
    pDirect3DDevice->SetIndices(pBufferIndexes);
    pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);

    // Установка идентификатора первой текстуры
    pDirect3DDevice->SetTexture(0, pTexture0);
    // Устанавливает состояния и операции первой текстуры
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
    // Установка идентификатора второй текстуры
    pDirect3DDevice->SetTexture (1, pTexture1);
    // Устанавливает состояния и операции второй текстуры
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

    Matrix();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    Matrix1();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    pDirect3DDevice->EndScene();

    pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}

Тогда я решил изменить код так, но это не помогло

Код:
// Функция рендеринга Direct3D
void RenderingDirect3D(void)
{
    if (pDirect3DDevice == NULL)
        return;

    pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);

    pDirect3DDevice->BeginScene();

    pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX));
    pDirect3DDevice->SetIndices(pBufferIndexes);
    pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);

    // Установка идентификатора первой текстуры
    pDirect3DDevice->SetTexture(0, pTexture0);
    // Устанавливает состояния и операции первой текстуры
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
   
    Matrix();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    // Установка идентификатора второй текстуры
    pDirect3DDevice->SetTexture (1, pTexture1);
    // Устанавливает состояния и операции второй текстуры
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

    Matrix1();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    pDirect3DDevice->EndScene();

    pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}

Тогда я рашил изменить так и всё заработало

Код:
// Функция рендеринга Direct3D
void RenderingDirect3D(void)
{
    if (pDirect3DDevice == NULL)
        return;

    pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET |  D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(172, 221, 101), 1.0f, 0);

    pDirect3DDevice->BeginScene();

    pDirect3DDevice->SetStreamSource(0, pBufferVertices, 0, sizeof(TRIANGLEVERTEX));
    pDirect3DDevice->SetIndices(pBufferIndexes);
    pDirect3DDevice->SetFVF(D3DFVF_TRIANGLEVERTEX);

    pDirect3DDevice->SetTexture(1, NULL);
    // Установка идентификатора первой текстуры
    pDirect3DDevice->SetTexture(0, pTexture0);
    // Устанавливает состояния и операции первой текстуры
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);

    Matrix();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    pDirect3DDevice->SetTexture(0, NULL);
    // Установка идентификатора второй текстуры
    pDirect3DDevice->SetTexture (1, pTexture1);
    // Устанавливает состояния и операции второй текстуры
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);

    Matrix1();

    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);

    pDirect3DDevice->EndScene();

    pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}
Записан
kiler4747
Участник

by
Offline Offline

« Ответ #10 : 03-03-2011 15:12 » 

Читаю книгу Горгонова(глава 10), не получается загрузить текстуру и освещение не работает, Visual Studio 2010:
Код: (C++)
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#include <Windows.h>
#include <d3dx9.h>
#include <d3d9.h>
#include <d3dx9core.h>
#include <MMSystem.h>
#include <d3dx9tex.h>
#include <d3d9types.h>
double angle;
LPDIRECT3D9 pDIRECT3D9=NULL;
LPDIRECT3DDEVICE9 pDirect3ddevice9=NULL;
LPDIRECT3DVERTEXBUFFER9 pbuffervershin=NULL;
LPDIRECT3DINDEXBUFFER9 pbufferindex=NULL;
LPDIRECT3DTEXTURE9 textura001;
LPD3DXFONT pfont;
RECT rec;
HFONT hfont;
struct customvertex
{
        FLOAT x,y,z;
        float nx, ny,nz;
        float tu,tv;
};


HRESULT initialdirect3d(HWND hwnd)
{
        if (NULL==(pDIRECT3D9=Direct3DCreate9(D3D_SDK_VERSION)))
                return E_FAIL;
        D3DDISPLAYMODE  display;
        if (FAILED(pDIRECT3D9->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.BackBufferCount=3;
        direct3dparametr.BackBufferHeight=GetSystemMetrics(SM_CYSCREEN);
        direct3dparametr.FullScreen_RefreshRateInHz=display.RefreshRate;
        if (FAILED(pDIRECT3D9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &direct3dparametr,&pDirect3ddevice9)))
                return E_FAIL;
        pDirect3ddevice9->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
        return S_OK;
}
HRESULT initialbuffervershin()
{
        customvertex vershin[]={
                { 1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f,1.0f,1.0f}, //a
                { 1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f,0.0f,1.0f}, //b
                {-1.0f, 1.0f,-1.0f, 0.0f, 0.0f,-1.0f,0.0f,0.0f}, //c
                {-1.0f,-1.0f,-1.0f, 0.0f, 0.0f,-1.0f,1.0f,0.0f}, //d

                {-1.0f,-1.0f,-1.0f,-1.0f, 0.0f, 0.0f,1.0f,1.0f}, //a2
                {-1.0f, 1.0f,-1.0f,-1.0f, 0.0f, 0.0f,0.0f,1.0f}, //b2
                {-1.0f, 1.0f, 1.0f,-1.0f, 0.0f, 0.0f,0.0f,0.0f}, //c2
                {-1.0f,-1.0f, 1.0f,-1.0f, 0.0f, 0.0f,1.0f,0.0f}, //d2

                {-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,1.0f,1.0f}, //a3
                {-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.0f,1.0f}, //b3
                { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.0f,0.0f}, //c3
                { 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,1.0f,0.0f}, //d3

                {1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f,1.0f,1.0f}, //a4
                {1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,0.0f,1.0f}, //b4
                {1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f,0.0f,0.0f}, //c4
                {1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f,1.0f,0.0f}, //d4

                { 1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f,1.0f,1.0f}, //a5
                {-1.0f,-1.0f,-1.0f, 0.0f,-1.0f, 0.0f,0.0f,1.0f}, //b5
                {-1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f,0.0f,0.0f}, //c5
                { 1.0f,-1.0f, 1.0f, 0.0f,-1.0f, 0.0f,1.0f,0.0f}, //d5

                { 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,1.0f,1.0f}, //a6
                {-1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,0.0f,1.0f}, //b6
                {-1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f,0.0f,0.0f}, //c6
                { 1.0f, 1.0f,-1.0f, 0.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(D3DXCreateTextureFromFile(pDirect3ddevice9,"directx.bmp",&textura001)))
                return E_FAIL;
               
        if (FAILED(pDirect3ddevice9->CreateVertexBuffer(36*sizeof(customvertex),0,
                D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1,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();
        pDirect3ddevice9->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;
}
void matrix()
{
        D3DXMATRIX matrixworld, matrixwotldx,matrixwotldy,matrixwotldz;
        D3DXMATRIX matrixview;
        D3DXMATRIX matrixprojection;
        UINT Time =timeGetTime() % 5000;
        float angle=Time*(2.0f*D3DX_PI)/5000.f;
        D3DXMatrixRotationY(&matrixwotldy,angle);
        D3DXMatrixRotationX(&matrixwotldx,angle);
        D3DXMatrixMultiply(&matrixworld,&matrixwotldx,&matrixwotldy);
        pDirect3ddevice9->SetTransform(D3DTS_WORLD,&matrixworld);
        D3DXMatrixLookAtLH(&matrixview,&D3DXVECTOR3(0.0f,0.0f,-11.0f),&D3DXVECTOR3(0.0f,0.0f,0.0f),
                &D3DXVECTOR3(0.0f,1.0f,0.0f));
        pDirect3ddevice9->SetTransform(D3DTS_VIEW,&matrixview);
        D3DXMatrixPerspectiveFovLH(&matrixprojection,D3DX_PI/4,1.0f,1.0f,100.0f);
        pDirect3ddevice9->SetTransform(D3DTS_PROJECTION,&matrixprojection);

}
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;
        pDirect3ddevice9->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);
        pDirect3ddevice9->SetLight(0,&light);
        pDirect3ddevice9->LightEnable(0,TRUE);
        pDirect3ddevice9->SetRenderState(D3DRS_LIGHTING,TRUE);
        pDirect3ddevice9->SetRenderState(D3DRS_AMBIENT,0);
}
void renderingdirect3d()
{
        if (pDirect3ddevice9==NULL)
                return;
        pDirect3ddevice9->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(60,100,150),1.0f,0);
        pDirect3ddevice9->BeginScene();
        lightmaterial() ;
        matrix();
        pDirect3ddevice9->SetStreamSource(0,pbuffervershin,0,sizeof(customvertex));
        pDirect3ddevice9->SetFVF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);
        pDirect3ddevice9->SetIndices(pbufferindex);
        pDirect3ddevice9->SetTexture(0, textura001);
        // Устанавливает состояния и операции первой текстуры
        pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLOROP,  D3DTOP_MODULATE);
        pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
        pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
        pDirect3ddevice9->SetTextureStageState(0, D3DTSS_ALPHAOP,  D3DTOP_DISABLE);
        pDirect3ddevice9->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,36,0,12);
        pDirect3ddevice9->EndScene();
        pDirect3ddevice9->Present(NULL,NULL,NULL,NULL);
}
void deletedirect3d()
{
        if (textura001!=NULL)
                textura001->Release();
        if (pbufferindex!=NULL)
                pbuffervershin->Release();
        if (pbuffervershin!=NULL)
                pbuffervershin->Release();
        if (pDirect3ddevice9!=NULL)
                pDirect3ddevice9->Release();
        if (pDIRECT3D9!=NULL)
                pDIRECT3D9->Release();
}
LRESULT CALLBACK MainWinProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
        switch(msg)
        {
        case WM_CREATE:    // Вызывается, когда впервые создается окно
                return(0);
        case WM_PAINT:    // Вызывается, когда окно обновляется
                renderingdirect3d();
                ValidateRect(hwnd, NULL);
                return(0);
        case WM_DESTROY:
                {
                        deletedirect3d();
                        PostQuitMessage(0);
                        return(0);
                }
                default:
        return(DefWindowProc(hwnd,msg,wparam,lparam));
        }
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
        WNDCLASSEX windowsclass;
        HWND hwnd;
        MSG msg;
        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=LoadIcon(NULL,IDC_ARROW);
        windowsclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
        windowsclass.lpszMenuName=NULL;
        windowsclass.lpszClassName="WINDOWSCLASS";
        windowsclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
        if (!RegisterClassEx(&windowsclass))
                return(0);
        if (!(hwnd=CreateWindowEx(NULL,"WINDOWSCLASS","базовое окно для директа",WS_OVERLAPPEDWINDOW| WS_VISIBLE,0,0,
                GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),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);
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 03-03-2011 16:52 » 

kiler4747, какие ошибки возвращаются из функций ?
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #12 : 03-03-2011 19:29 » 

"urok1.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\lpk.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\usp10.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\advapi32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\sechost.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\rpcrt4.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\sspicli.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\cryptbase.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\winmm.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\d3d9.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\version.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\d3d8thk.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\dwmapi.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\D3DX9_43.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"urok1.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\uxtheme.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\shell32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\shlwapi.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\ole32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\nvd3dum.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\powrprof.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\setupapi.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\cfgmgr32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\oleaut32.dll", Невозможно найти или открыть файл PDB
"urok1.exe": Загружено: "C:\Windows\SysWOW64\devobj.dll", Невозможно найти или открыть файл PDB

но проект всеравно запускается но без текстуры и освещения
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 03-03-2011 20:23 » 

kiler4747, отлично - сборка прошла. Теперь переходим к:

kiler4747, какие ошибки возвращаются из функций ?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
kiler4747
Участник

by
Offline Offline

« Ответ #14 : 03-03-2011 21:34 » 

-2005530520    pDirect3ddevice9->Present(NULL,NULL,NULL,NULL);
S_OK
S_OK
S_OK


Добавлено через 1 минуту и 56 секунд:
-2005530520    pDirect3ddevice9->Present(NULL,NULL,NULL,NULL);
все остальные   S_OK
« Последнее редактирование: 03-03-2011 21:36 от kiler4747 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 04-03-2011 06:33 » 

kiler4747, теперь нужно поискать по коду ошибки
http://www.gamedev.ru/code/forum/?id=32708
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #16 : 04-03-2011 13:38 » 

HRESULT: 0x88760868 (2289436776)
Name: D3DERR_DEVICELOST
Description: Device lost
Severity code: Failed
Facility Code: FACILITY_D3D (2166)
Error Code: 0x0868 (2152)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 04-03-2011 15:11 » 

kiler4747, ну, так и что из этого следует ?
http://msdn.microsoft.com/en-us/library/bb172554(VS.85).aspx
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #18 : 04-03-2011 15:59 » 

Незнаю
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 04-03-2011 16:05 » 

kiler4747, перебори лень и найди там, по ссылке, описание ошибки Отлично
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #20 : 04-03-2011 16:24 » 

Я нашол описание ошибки, но не понял что нужно сделать
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 04-03-2011 17:26 » 

ну ты шо!
Вот же всё написано, английским по белому
Цитата
The device has been lost but cannot be reset at this time. Therefore, rendering is not possible.A Direct 3D device object other than the one that returned this code caused the hardware adapter to be reset by the OS. Delete all video memory objects (surfaces, textures, state blocks) and call Reset() to return the device to a default state. If the application continues rendering without a reset, the rendering calls will succeed.
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #22 : 04-03-2011 17:28 » 

Так что мне нужно исправить?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 04-03-2011 18:09 » 

у тебя с английским как ? Улыбаюсь
Записан

kiler4747
Участник

by
Offline Offline

« Ответ #24 : 04-03-2011 18:16 » 

не оч
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 04-03-2011 18:30 » 

Хочешь программировать - придется подучить. У нас почти у всех "не оч", но стараемся. Кроме того, есть онлайн-словари (хорош multitran.ru) и переводчики (например, Гугль).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
kiler4747
Участник

by
Offline Offline

« Ответ #26 : 04-03-2011 18:53 » 

Исправил, но всеравно не работает
HWND hw;
HRESULT renderingdirect3d()
{
   if (pDirect3ddevice9==NULL)
      return E_FAIL;
   dd=pDirect3ddevice9->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(60,100,150),1.0f,0);
   pDirect3ddevice9->BeginScene();
   lightmaterial() ;
   matrix();
   dd=pDirect3ddevice9->SetStreamSource(0,pbuffervershin,0,sizeof(customvertex));
   dd=pDirect3ddevice9->SetFVF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);
   dd=pDirect3ddevice9->SetIndices(pbufferindex);
   dd=pDirect3ddevice9->SetTexture(0, textura001);
   // Устанавливает состояния и операции первой текстуры
   dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLOROP,  D3DTOP_MODULATE);
   dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
   dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
   dd=pDirect3ddevice9->SetTextureStageState(0, D3DTSS_ALPHAOP,  D3DTOP_DISABLE);
   dd=pDirect3ddevice9->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,36,0,12);
   pDirect3ddevice9->EndScene();
   if (FAILED(pDirect3ddevice9->Present(NULL,NULL,NULL,NULL)))
   {   deletedirect3d();
      initialdirect3d(hw);
   }
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 04-03-2011 18:58 » new

kiler4747, во-первых, поиск не нашёл в твоём коде ни "Reset", ни "D3DERR_DEVICELOST"
во-вторых, для достижения удобства оберни объекты в классы, приделай методы Load и Delete.

Тогда код сильно упроститься и станет читаемым

Про детали не спрашивай, я уже ничего не помню, да и в изучении DX далеко зайти не успел Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines