Тема: Странное.
Показать сообщение отдельно
Старый 18.02.2012, 23:14   #410
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Сфера.


Surface* sphere(int seg,float radius, Engine *eng){

//int resol=1<<seg;
int resol=seg;
//подсчет индексов для поверхности
int count_vertices = pow(resol+1,2);
int count_indices = resol * resol * 6;
//создание поверхности
Surface *surf = eng->CreateSurface(count_vertices,count_indices);
surf->Lock();
//расстановка точек.
for(int i=0;i<=resol;i++){
    for(int j=0;j<=resol;j++){

        int index=(resol+1)*i+j;
        float M_PI=2.0f*3.14159265358979323846f;
        float x=cos(M_PI*i/(float)resol);
        float y=sin(M_PI*i/(float)resol);
        float zc=cos(M_PI*j/(float)resol);
        float zs=sin(M_PI*j/(float)resol);
        vec3 position(x*zs,y*zs,zc);
        surf->SetVertexPosition(index,position*radius);
        surf->SetVertexNormal(index,position);
        surf->SetVertexTexCoord(index,i/(float)resol,j/(float)resol);
    }}

//натяжка полигонов
for(int i=0;i<resol;i++){
    for(int j=0;j<resol;j++){
        int index=2*(resol*i+j);
        int v00=(resol+1)*i+j;
        int v10=v00+1;
        int v01=v00+resol+1;
        int v11=v01+1;
        surf->SetTriangle(index,v00,v10,v01);
        surf->SetTriangle(index+1,v10,v11,v01);

    }}
surf->RecalcTangents();
surf->UnLock();
return surf;
}
Как мне в подобного вида функциях использовать cSurface чтоб в функцию указатель на двиг не передавать?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (18.02.2012)