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

class ground{
...
double ****strip;
...

ground(){
...
strip= new double ***[number+2];
for(int i=0;i<number+2;i++){strip[i]=new double **[number+2];}
for(int i=0;i<number+2;i++){for(int j=0;j<number+2;j++){
strip[i][j]=new double *[resolution+1];
for(int k=0;k<=resolution;k++){strip[i][j][k]=new double[resolution+1];}}}
for(int i=0;i<number+2;i++){for(int j=0;j<number+2;j++){NullizeStrip(i,j);Diamond_Squa re(i,j,sharpness, smothing);}}
for(int i=0;i<number;i++){for(int j=0;j<number;j++){mesh_deformer(i,j);Surface_Monol itizer(i,j);}}
...

}
...
void Diamond_Square(int a,int b, double sharp, int diff){
...
if(strip[a][b][i][j]==0 && val00!=0 && val01!=0 && val10!=0 && val11!=0){strip[a][b][i][j]=0.25*(val00+val01+val10+val11)+step*xRnd(-sharp,sharp);}
if(strip[a][b][i-step][j]==0 && val00!=0 && val01!=0){strip[a][b][i-step][j]=0.5*(val00+val01)+0.5*step*xRnd(-sharp,sharp);}
if(strip[a][b][i+step][j]==0 && val10!=0 && val11!=0){strip[a][b][i+step][j]=0.5*(val10+val11)+0.5*step*xRnd(-sharp,sharp);}
if(strip[a][b][i][j-step]==0 && val00!=0 && val10!=0){strip[a][b][i][j-step]=0.5*(val00+val10)+0.5*step*xRnd(-sharp,sharp);}
if(strip[a][b][i][j+step]==0 && val01!=0 && val11!=0){strip[a][b][i][j+step]=0.5*(val01+val11)+0.5*step*xRnd(-sharp,sharp);}
...
}
...
void mesh_deformer(int a,int b){
printf("\n index is %d",a);
printf(" index is %d",b);
int qvert=xCountVertices(surf[a][b]);
double xc=xVertexX(surf[a][b],0);
double yc=xVertexZ(surf[a][b],0);
for(int i=0;i<qvert;i++){
double xk=xVertexX(surf[a][b],i);
double yk=xVertexZ(surf[a][b],i);
double val=0;
if(xk-xc<resolution && yk-yc<resolution){

val=strip[a+1][b+1][xMod(xk,resolution)][xMod(yk,resolution)];}

else{
//также необходимо провести сшивку нормалей у соседних мешей
if(xk-xc==resolution && yk-yc<resolution){val=strip[a+1][b+1][resolution][xMod(yk,resolution)];}
if(yk-yc==resolution && xk-xc<resolution){val=strip[a+1][b+1][xMod(xk,resolution)][resolution];}
if(yk-yc==resolution && xk-xc==resolution){val=strip[a+1][b+1][resolution][resolution];}
}
xVertexCoords(surf[a][b],i,xk,val,yk);}}
...
};
Значит в цитируемых мной строчках происходит какая-то магия, а не то, что мне воображается. И в обычной вселенной компилятор должен посылать меня нах всвязи с отказом конвертировать double* в double. Но, блин, может я и косноязычен и в употребляемые мной термины вкладываю не общепринятые определения, но коль такой код работает и я представляю себе детально где что куда и как происходит, то отчасти я с указателями разобрался. Хватит, короче, мне самооценку понижать...
(Offline)
 
Ответить с цитированием