1.渲染语言:GPU基于数据流计算模式。
2.流处理器把函数称作“内核”,把输入数据称作“流”。
3. 光线与三角网格求交:
输入流:三角顶点,光线参数
输出流:求交点颜色值
内核:片元程序Fragment Program
4.纹理实质是二维数组,其元素为颜色值。单个颜色值:纹理元素/纹理像素。
5.片元由【光栅器】产生,其纹理坐标存储在纹理内存中。
6.纹理查找功能:吧纹理内存子系统作为一个通用只读内存使用,以便通用计算(该功能使得GPU上实现许多包含复杂数据结构的算法,以及查找这些复杂数据结构中的元素)。
7.CPU与GPU参数传递:
【首先】Cg编译器把Cg程序翻译成OpenGL/Direct3D可以接收到形式
【然后】应用程序通过OpenGL/Direct3D命令把翻译后的Cg程序传递给GPU
注意:应用程序和Cg程序之间的参数传递是影响执行速度的关键因素。
8.CPU到GPU传参:
8.1【直接参数传递】
cgGetNameParameter():获取一个参数句柄
cgGLSetParameter3d():通过句柄用该方法设置参数
——传参是CPU与GPU协调过程,算法每执行一次,参数必须传递一次,因此该方法效率不是最优。
8.2【基于纹理参数传递】
把参数编码成纹理;一个纹理4个32位值:3个颜色通道(RGB),1个Alpha通道。
8.3Moller-Trumbore算法中:一个三角形每个顶点编码为一个纹理。
【例如】256个三角形,使用3×16×16纹理。
另外,增加一个纹理,用于存储光线参数。
如果三角形面片个数不是某个数的整数倍,用填0方式进行纹理扩充。
【代码】如下:
for(y=0;y{
for (x=0;x {
getNextTriangle(vertex0,vertex1,vertex2);
vo_data[y][x][0]=(GLfloat)((1.0+vertex[0])/2.0);
vo_data[y][x][1]=(GLfloat)((1.0+vertex[1])/2.0);
vo_data[y][x][2]=(GLfloat)((1.0+vertex[2])/2.0);
vo_data[y][x][3]=(GLfloat)1.0;
(...)
}
}
glTexImage2D(GL_TEXTURE_RECTANGLE_NV,0,
GL_FLOAT_RGBA32_NV,texture_s ize,
texture_s ize,0,GL_RGBA,GL_FLOAT,vo_data);
下面代码为纹理作为参数调用的简略说明:
float4 main(vertex_out_fragment_in IN,
uniform sampler2D vertices0:TEXTURE0,
uniform sampler2D vertices1:TEXTURE1,
uniform sampler2D vertices2:TEXTURE2,
uniform sampler2D ray_origins:TEXTURE3):COLOR
{
//从纹理中提取求交中需要的参数
float3 v0=(2*tex2D(vertices0,IN.texCoord0).rgb)-1.0;
(...)
float4 resul t=(inters ect(ray_origin,v0,v1,v2)+1.0)/2;
return resul t; // 返回求交点颜色
}
性能讨论:如果n×n纹理传递到片元处理器,执行n×n算法通道只需传递一次,相比较直接传参,性能大为提高。
9.GPU到CPU传参:
片元处理器工作完毕,确定一个片元的最终颜色。CPU到CPU传递每个值,都要进行按颜色编码。
在Cg里,用一个输出语句指明变量是如何与图形流水线的其他部分相连接的,当Cg程序返回输出结构的时候,Color指明了该成员的硬件资源。
float4 main(vertex_out_fragment_in IN,
uniform float3 ray_origin,uniform float3 v0_triangle,
uniform float3 v1_triangle,uniform float3 v2_triangle):COLOR
{
return intersection(ray_origin,v0_triangle,v1_triangle,v2_triangle);
}
执行结果:输出颜色绘制在当前的渲染环境中。
颜色值到求交结果转化:glReadPixels()方法读取【图形硬件存储器中帧缓冲值】实现。
当算法结果编码成OpenGL图元时,图元不是立即显示,而是存储在像素缓存中,待所有面元处理完毕后,一起进行绘制显示。
10.取值范围:颜色为浮点值,范围0~1,求交运算中,操作数范围在-1~1之间,因此必须进行转换。
_____________________________________________________________________