scratch网上学的3D渲染派上用场了?
查看原帖
scratch网上学的3D渲染派上用场了?
1426617
Chejc666楼主2024/11/27 20:17

就是由远及近地渲染,使用此代码满分

#include<bits/stdc++.h>
using namespace std;
char s[2048][2048];
int main(int argc,char **argv){
    int m,n,max=-20;
    cin>>m>>n;
    int a[m][n];
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i-1][j-1];
            if(a[i-1][j-1]*3+3+(m-i)*2-1>max) {max=a[i-1][j-1]*3+3+(m-i)*2-1;}
            for(int k=0;k<a[i-1][j-1];k++){
                //可见的7个顶点:
                s[k*3+(m-i)*2][j*4 +(m-i)*2]='+';//左下
                s[k*3+(m-i)*2][j*4+4 +(m-i)*2]='+';//右下
                s[k*3+(m-i)*2+3][j*4 +(m-i)*2]='+';//左上
                s[k*3+(m-i)*2+3][j*4+4 +(m-i)*2]='+';//右上
                s[k*3+(m-i)*2+2][j*4+6 +(m-i)*2]='+';//后右下
                s[k*3+(m-i)*2+5][j*4+2 +(m-i)*2]='+';//后左上
                s[k*3+(m-i)*2+5][j*4+6 +(m-i)*2]='+';//后右上
                //画竖着的三条棱(|)
                s[k*3+(m-i)*2+1][j*4 +(m-i)*2]='|';//左
                s[k*3+(m-i)*2+2][j*4 +(m-i)*2]='|';//左
                s[k*3+(m-i)*2+1][j*4+4 +(m-i)*2]='|';//右
                s[k*3+(m-i)*2+2][j*4+4 +(m-i)*2]='|';//右
                s[k*3+(m-i)*2+3][j*4+6 +(m-i)*2]='|';//后
                s[k*3+(m-i)*2+4][j*4+6 +(m-i)*2]='|';//后
                //画横着的三条棱(-)
                s[k*3+(m-i)*2][j*4+1 +(m-i)*2]='-';//下
                s[k*3+(m-i)*2][j*4+2 +(m-i)*2]='-';//下
                s[k*3+(m-i)*2][j*4+3 +(m-i)*2]='-';//下
                s[k*3+(m-i)*2+3][j*4+1 +(m-i)*2]='-';//上
                s[k*3+(m-i)*2+3][j*4+2 +(m-i)*2]='-';//上
                s[k*3+(m-i)*2+3][j*4+3 +(m-i)*2]='-';//上
                s[k*3+(m-i)*2+5][j*4+3 +(m-i)*2]='-';//后
                s[k*3+(m-i)*2+5][j*4+4 +(m-i)*2]='-';//后
                s[k*3+(m-i)*2+5][j*4+5 +(m-i)*2]='-';//后
                //画斜着的三条棱(/)
                s[k*3+(m-i)*2+4][j*4+1 +(m-i)*2]='/';//下
                s[k*3+(m-i)*2+4][j*4+5 +(m-i)*2]='/';//右
                s[k*3+(m-i)*2+1][j*4+5 +(m-i)*2]='/';//右
                //填充:长3宽2,' '
                s[k*3+(m-i)*2 +1][j*4+1 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +1][j*4+2 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +1][j*4+3 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +2][j*4+1 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +2][j*4+2 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +2][j*4+3 +(m-i)*2]=' ';//前面
                s[k*3+(m-i)*2 +4][j*4+2 +(m-i)*2]=' ';//上面
                s[k*3+(m-i)*2 +4][j*4+3 +(m-i)*2]=' ';//上面
                s[k*3+(m-i)*2 +4][j*4+4 +(m-i)*2]=' ';//上面
                s[k*3+(m-i)*2 +2][j*4+5 +(m-i)*2]=' ';//右面
                s[k*3+(m-i)*2 +3][j*4+5 +(m-i)*2]=' ';//右面
            }
        }
    }
    for(int i=max;i>=0;i--){
        for(int j=4;j<4+m*2+n*4+1;j++){
            if(s[i][j]!='\0'){
                cout<<s[i][j];
            }else{
                cout<<'.';
            }
        }
        printf("\n");
    }
    return(0);
}
2024/11/27 20:17
加载中...