Навигация
Главная
Новости
Скачать
Шаблоны сайтов
Партнеры

Графика
Adobe Photoshop

Программирование
Теория алгоритмов
Code Snippets
Все о PHP
Visual C++
WIN32 API
Delphi
ASP

Java
VBScript
CGI
VRML
PERL
HTML
XML

Сети
Cisco
IP-сети
Сетевые термины

IT
UNIX-системы
Хостинг

Операционные системы
Windows
Linux

Поисковая оптимизация
Основы SEO
Мастер-класс SEO
Анализ трафика
Google AdSense

В перерыве
Интересное
Поиск работы
Немного юмора
Материалы
Публикации


RSS / РСС
.
Минутку внимания!
Direct3dX - От теории к практике
Ну ладно, вы уже создали простейшую программу. Теперь вы хотите, чтобы она чего-нибудь показывала, например треугольник. Если вы создали программу по методу, изложенному в предыдущем уроке, то вам будет немного сложнее ее отлаживать, если используете AppWizard – вам нужно будет дольше ее чистить. Пусть вы сделали все это. Теперь вам нужно создать структуру, которая будет описывать тип вашей вершины. Пусть информация о вершине будет содержать координаты точки и ее цвет, тогда код будет выглядеть так:

struct CUSTOMVERTEX 
{
D3DXVECTOR3 pos;
float diffuse;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)

Внимание: если вы используете функции, начинающиеся с D3DX, добавьте в проект D3dx8.lib. После того, как вы сделали это, создайте какую-нибудь функцию инициализации (например InitApp()). Там вы должны создать буффер вершин (предварительно определив его):

LPDIRECT3DVERTEXBUFFER8 m_VB; // в начало файла 

g_pd3dDevice -> CreateVertexBuffer(3*sizeof(CUSTOMVETEX), 0, D3DFVF_CUSTOMVERTEX, &m_VB); 

Вы создали буффер вершин на три вершины. Теперь надо его заполнить. Для этого напишите следующий жуткий кусок кода:

VOID* pVertices;
CUSTOMVERTEX gVertices[3];
//  вы описываете вершины //
gVertices[0].pos=D3DXVECTOR3(1.0f, 1.0f, 1.0f);
gVertices[0].diffuse=0xff0000ff;
…..
//-вы закончили описание вершин//

m_pVB->Lock( 0, sizeof(gVertices), (BYTE**)&pVertices, 0 );
  memcpy(pVertices, gVertices, sizeof(gVertices));
m_pVB->Unlock();

Вставьте эту функцию после InitD3D(). Внимание: эта функция должна вызываться только одит раз, т.к. в ней создается буффур вершин, при повторном ее запуске программа вылетит с ошибкой. Теперь эту функцию можно временно покинуть. Найдите функцию Render(). Залезте между BeginScene и EndScene, вставьте туда вот это:

g_pd3dDevice->SetRenderState(D3DRS_CULLMODE , D3DCULL_NONE); // чтобы рендерилась задняя сторона полигона
g_pd3dDevice->SetStreamSource( 0, m_pVB, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

Функция SetStreamSource сообщает рендеру откуда брать точки (из m_pVB). SetVertexShader указывает текущий вертексный шейдер. Поскольку его сейчас нет, то ставим стандартный. Третья функция, как понятно из названия, рисует треугольник (одну штуку). Вот вроде и все, можете запускать. Если после запуска все точки будут черными, то добавьте перед SetStreamSource следующий кусок:

g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, 100); 

Теперь вы увидите цвет вершин. На этом точно все.


Для наших любимых посетителей:
Мы рекомендуем вам ознакомиться со следующими материалами на тему:
Информация для интересующихся веб-дизайном и программированием:
Right one

Online from 2006-2008 #We are the CoDeRs! Наши статьи и новости можно свободно перепечатывать при указании обратной ссылки на источник Связь с админом