
Surface* torus(int resol, int vresol, float radius, float inradius){
Engine *eng = Engine::Instance();
//подсчет индексов для поверхности
int count_vertices =(resol+1)*(vresol+1);
int count_indices = resol * vresol * 6;
//создание поверхности
Surface *surf = eng->CreateSurface(count_vertices,count_indices);
surf->Lock();
//расстановка точек.
for(int i=0;i<=resol;i++){
for(int j=0;j<=vresol;j++){
int index=(vresol+1)*i+j;
float M_PI=2.0f*3.14159265358979323846f;
float zc=inradius*cos(M_PI*j/(float)vresol);
float zs=inradius*sin(M_PI*j/(float)vresol);
float x=(radius+zs)*cos(M_PI*i/(float)resol);
float y=(radius+zs)*sin(M_PI*i/(float)resol);
vec3 position(x,y,zc);
surf->SetVertexPosition(index,position*radius);
//определение нормали
x=(radius)*cos(M_PI*i/(float)resol);
y=(radius)*sin(M_PI*i/(float)resol);
position=(position-vec3(x,y,0)).normalize();
surf->SetVertexNormal(index,position);
surf->SetVertexTexCoord(index,i/(float)resol,j/(float)vresol);
}}
//натяжка полигонов
for(int i=0;i<resol;i++){
for(int j=0;j<vresol;j++){
int index=2*(vresol*i+j);
int v00=(vresol+1)*i+j;
int v10=v00+1;
int v01=v00+vresol+1;
int v11=v01+1;
surf->SetTriangle(index,v00,v10,v01);
surf->SetTriangle(index+1,v10,v11,v01);
}}
surf->RecalcTangents();
surf->UnLock();
return surf;
}
Почему границы полигонов проявляются? Какой то косяк при интерполяции значения нормали, так и надо, у dsd кривые руки?