четверг, 28 июля 2011 г.

Создание сцены со сферой и плоскостью. Присоединение фонга, цвета материала и света.


//****************************************************
//Создание сцены со сферой и плоскостью. Присоединение фонга, цвета материала и света.
//Created by senior 29.07.11
var lait;//свет
var starttime;// время от старта работы CINEMA_4D
var plo;//плоскость
var texTag;//таг текстуры
var mat;//материал
var tph;//таг фонга
var spho;//сфера
var vOp;//операнд активного документа
var vDoc;//активный документ
var random;//случайная
var rd;//красного цвета
var gr;//зелёного цвета
var bl;//синего цвета
RandCol(vDoc)//Функция Random- для псевдо-случайного выбора цвета
{
starttime = time();//Возвращает время от старта работы CINEMA_4D
random = new(Random);//Переменная со значением от Random-псевдо-случайная функция
random->Init(starttime);//Инициализация Random-псевдо-случайной функции
rd=(random->Get01());//Инициализация красного цвета
gr=(random->Get01());//Инициализация зелёного цвета
bl=(random->Get01());//Инициализация синего цвета
}
CreaPhong(vDoc)//Функция создания фонга
{
vOp=vDoc->GetActiveObject(); //Load Selected object into memory
tph = AllocTag(Tphong); //Assign the phong tag to variable named tph
vOp->InsertTag(tph); //add the phong tag to currently selected object
}
CreaMat(vDoc)//Функция создания нового материала
{
mat = new(Material); //Create a new material in memory
mat->SetName("Mat"); // Имя материала
RandCol(vDoc);//Вызов Random-псевдо-случайной функции
mat#MATERIAL_COLOR_COLOR = vector(rd,gr,bl); // Установка цвета в red-green-blue
vDoc->InsertMaterial( mat, NULL ); // Установка нового материала в Material Manager
mat#MATERIAL_PREVIEWSIZE=10; // Higher number=higher editor resolution setting
texTag = AllocTag( Ttexture ); //Create a texture tag for the new sphere
texTag#TEXTURETAG_MATERIAL = mat; //links the newly created material to the texture's Material input ield
vOp=vDoc->GetActiveObject(); //Load Selected object into memory
vOp->InsertTag(texTag , NULL); //Add it to the scene
}
CreaSphere(vDoc)//Функция создания сферы
{
spho = new(SphereObject); //Create a new Sphere Object
spho#PRIM_SPHERE_RAD = 150; // Sets the radius
spho#PRIM_SPHERE_SUB = 100; // Sets the number of segments
spho#PRIM_SPHERE_TYPE = 0; // Sets the type to standard
vDoc->InsertObject(spho,NULL,NULL); //Add it to the scene
spho->SetBit(BIT_ACTIVE); //Make it selected
CreaPhong(vDoc);//Вызов функции создания фонга
CreaMat(vDoc);//Вызов функции создания нового материала
vDoc->AddUndo(UNDO_NEW, spho); // Undo the creation of the Sphere object
vDoc->AddUndo(UNDO_NEW, mat); // Undo the creation of the material
spho->DelBit(BIT_ACTIVE); //Unselect the object in the hierarchy
}
CreaPlane(vDoc)//Функция создания плоскости
{
plo = new(PlaneObject);  // создать плоскость
plo#PRIM_PLANE_WIDTH = 1000; // ширина=10 м
plo#PRIM_PLANE_HEIGHT = 1000; // длина=10 м
plo#PRIM_PLANE_SUBW=1;//единица по ширине (субдивайд)
plo#PRIM_PLANE_SUBH=1;//единица по длине (субдивайд)
vDoc->InsertObject(plo,NULL,NULL);//Add it to the scene
plo->SetBit(BIT_ACTIVE); //Сделать плоскость активной (выбрать)
CreaPhong(vDoc);//Вызов функции создания фонга
CreaMat(vDoc);//Вызов функции создания нового материала
vOp=vDoc->GetActiveObject(); //Load Selected object into memory
var pos = vOp->GetPosition();//Получить текущую позицию плоскости
plo->SetPosition(vector(pos.x, pos.y-150, pos.z)); //Опустить плоскость по Y на 150 (1,5 метра)
plo#ID_BASEOBJECT_REL_SCALE:VECTOR_X=1.8;//Увеличить до 18 метров
plo#ID_BASEOBJECT_REL_SCALE:VECTOR_Z=1.8;//Увеличить до 18 метров
vDoc->AddUndo(UNDO_NEW, plo); // Undo the creation of the Plane object
vDoc->AddUndo(UNDO_NEW, mat); // Undo the creation of the material
plo->DelBit(BIT_ACTIVE); //Unselect the object in the hierarchy
}
CreaLight(vDoc)
{
lait = new(LightObject);  // creates a LightObject primitive
vDoc->InsertObject(lait,NULL,NULL);//Add it to the scene
lait#ID_BASEOBJECT_REL_POSITION:VECTOR_X=471.5;//позиция по X
lait#ID_BASEOBJECT_REL_POSITION:VECTOR_Y=265.5;//позиция по Y
lait#ID_BASEOBJECT_REL_POSITION:VECTOR_Z=-400.4;//позиция по Z
CallCommand(12520);//вызов SpotLight плюс Light.Target.1
}
main(doc,op)
{
vDoc = GetActiveDocument();// в vDoc-активный документ
CreaSphere(vDoc);//Вызов функции создания сферы
CreaPlane(vDoc);//Вызов функции создания плоскости
CreaLight(vDoc);  // Вызов функции создания Light primitive
}
//**************************************************************

Комментариев нет:

Отправить комментарий