某不知名游戏公司

2021-07-06 11:42发布


二、渲染流水线的工作任务在于由一个三维场景出发﹑生成(或者说渲染)一张二维图像。换句话说,计算机需要从一系列的顶点数据﹑纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像。

《Real-Time Rendering,Third Edition》一书中将一个渲染流程分成 3 个阶段:应用阶段(Application Stage)﹑几何阶段(Geometry Stage)﹑光栅化阶段(Rasterizer Stage)

三、

五、


七、

C#

              Console.WriteLine("请输入矩阵的行数:");
            int n = Convert.ToInt32(Console.ReadLine());
            int[,] a = new int[n, n];
            //蛇形从1开始计数,由于其值一直是累加的,故定义一个变量用来
            //代表所增加的数值  
            int count = 1;
            //a[x,y],x是二维数组的行,y代表列。  
            //round是蛇形矩阵的第几圈,从0开始。  
            int x, y, round;
            //如果n是1,则直接输出。  
            if (n == 1)
            {
                a[0, 0] = count;
            }
            else
            {
                //外层循环控制圈数 
                for (round = 0; round < n / 2; round++)
                {
                    //提示:也就是先输出第一行的每个元素,行数不变,列数变
                    //第一次循环,即round为0时,打印第一行的数字
                    x = round;
                    for (y = round; y < n - round; y++)
                    {
                        a[x, y] = count;
                        count++;
                    }
                    //提示:输出最后一列,即列数不变,行数变
                    y = n - round - 1; //5-0-1=4,对应的是第五列 
                    for (x = round + 1; x < n - round - 1; x++)
                    { //x的值取到1,2,3 
                        a[x, y] = count;//a[1,4]=6,a[2,4]=7,a[3,4]=8  
                        count++;//count的值分别为6,7,8  
                    }
                    //此时x的值不变,y的值由大到小     
                    x = n - round - 1; //第一次循环:x=5-0-1=4.即最下面一行 
                    for (y = n - round - 1; y >= round; y--)
                    {
                        a[x, y] = count;
                        count++;
                    }
                    //y的值不变,x的值由大到小 
                    y = round;  //round的值可以取0,1,2
                    for (x = n - round - 1 - 1; x > round; x--)
                    {
                        a[x, y] = count;
                        count++;
                    }
                }
                if (n % 2 == 1)
                {
                    //如果n的值为奇数,将最中间的空填上  
                    a[n / 2, n / 2] = count;
                }
            }
            //打印矩阵  
            for (x = 0; x < n; x++)
            {
                for (y = 0; y < n; y++)
                {
                    Console.Write("{0,2} ", a[x, y]);
                }
                Console.Write("\n");
            }
            Console.Write("\n");

      

 

       C++

              // 螺旋队列.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#define max(a,b) ((a)<(b)?(b):(a))
#define abs(a) ((a)>0?(a):-(a))
 
using namespace std;
 
int foo(int x,int y)
{
int t = max(abs(x),abs(y));
int u = t+t;
int v = u-1;
v= v*v+u;
if(x == -t)
v+=u+t-y;
else if(y==-t)
v+=3*u+x-t;
else if(y ==t)
v+= t-x;
else
v+=y-t;
return v;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
int x ,y;
int N;
cout<<"请输入螺旋队列数字: "<<endl;
cin>>N;
cout<<"显示螺旋队列数值: "<<endl;
for(y=-N;y<=N;y++)
{
for(x=-N;x<=N;x++)
cout<<"\t"<<foo(x,y);
cout<<endl;
}
while(scanf("%d%d",&x,&y)==2)
//printf("%d\n",foo(x,y));
    cout<<"\t"<<foo(x,y);
return 0;
}