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