Суровая правда жизни о Direct3D

Спецвыпуск Хакер, номер #004, стр. 004-098-7

Листинг №6 - main.cpp, создание вершин логотипа Х

D3DVECTOR vNormal(0, 0, -1); //Нормаль - перпендикуляр к нашему полигону

vtx[0] = D3DVERTEX(D3DVECTOR(-2, 0, 0), -vNormal, 0, 0);

vtx[1] = D3DVERTEX(D3DVECTOR( 0, -2, 0), -vNormal, 0, 0);

vtx[2] = D3DVERTEX(D3DVECTOR( 0, 0, -2), -vNormal, 0, 0);

vtx[5] = D3DVERTEX(D3DVECTOR(-2, 0, 0), vNormal, 0, 0);

vtx[4] = D3DVERTEX(D3DVECTOR( 0, -2, 0), vNormal, 0, 0);

vtx[3] = D3DVERTEX(D3DVECTOR( 0, 0, -2), vNormal, 0, 0);

Конец листинга 6.

Пытка №4 - интересно, а какого цвета у него кровь?

Как следует из названия, мы здесь будем заниматься цветом. То есть материалом и лампой. Сначала проинициализируем материал. У него 5 параметров. 4 (dcvDiffuse, dcvAmbient, dcvSpecular и dcvEmissive) из них типа D3DCOLORVALUE - данные о цвете. Последний (dvPower) - степень отражения цвета (блики). Параметры dcvEmissive и dvPower нам не нужны - поэкспериментируешь с ними позже. Параметр dcvDiffuse реагирует с соответствующим параметром лампы (об этом позже) и является самым влиятельным на цвет параметром. dcvAmbient, как и предыдущий, реагирует с соответствующим параметром лампы. dcvSpecular - цвет бликов. Вместе с dvPower можно добиться интересных результатов. Какой цвет где поставить - увидишь в листинге. Чтобы применить этот материал, надо воспользоваться методом SetMaterial с параметром - указателем на структуру D3DMATERIAL7 (то есть нацарапаешь там &mat - нашу переменную типа D3DMATERIAL7). Теперь лампа. Это уже интересней. Правда, у нее куча параметров, что к чему - объяснять долго - зри в SDK. Я объясню только нужные нам сейчас. Это dcvDiffuse, dcvAmbient, dcvSpecular, dvPosition, dltType, dvAttenuation0, dvRange. Первые три объяснять не надо, они просто реагируют с соответствующими параметрами материала. dvPosition - позиция в пространстве, dltType - тип лампы (D3DLIGHT_POINT - точечный, то есть наш, не имеет направления, но имеет четко заданную позицию; D3DLIGHT_SPOT - забавный тип, имеет позицию и направление, светит неким конусом (подробнее в SDK); D3DLIGHT_DIRECTIONAL - не имеет позиции, но имеет направление), dvAttenuation0 - некий параметр, отвечающий за силу свечения лампы на определенном расстоянии (убойная вещь для создания ламп с нелинейной силой свечения), а dvRange - как далеко будет светить. Создать наш свет ("Да будет свет!", - сказал монтер и попу фосфором натер.) можно методом SetLight, первый его параметр - номер лампы (0), а второй - указатель на лампу (&d3dLight). А затем его надо заставить светить. Метод LightEnable это сделает. Первый параметр - номер лампы (0), второй - bool (true - разрешить светить, false - противоположное). А теперь торжественно скатывай все с листинга.

Листинг № 7 - Main.cpp, материал и свет.

mat.dcvDiffuse.r = (D3DVALUE)0.7;

mat.dcvDiffuse.g = (D3DVALUE)1.0;

mat.dcvDiffuse.b = (D3DVALUE)0.7;

mat.dcvDiffuse.a = (D3DVALUE)1.0;

mat.dcvAmbient.r = (D3DVALUE)0.0;

Назад на стр. 004-098-6  Содержание  Вперед на стр. 004-098-8

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001