The following code example demonstrates how the Intel IPP realistic rendering functions can be used to perform the ray casting of the primary rays.
The input of the tracer is the scene (Teapot) specified as two arrays: array of the vertex coordinates ( pTeapotVertCoord) and array of the indexes of the triangles (pTeapotIndex) (see Figure “Structure of Arrays for Triangle Description”).
As the result of the tracing, the RGB 3-channel (8u_C3) image is created (see Figure “Rendered Image”).
#include "ipp.h" #define NVERTEX 302 #define NTRIAGLE 576 __declspec (align(16))static const float pTeapotVertCoord[NVERTEX*3] = { 17.500000f, 30.000000f, 0.000000f, 17.303200f, 31.093700f, 0.000000f, 17.905100f, 31.093800f, 0.000000f, 18.750000f, 30.000000f, 0.000000f, 15.140700f, 30.000000f, 8.892590f, 14.970500f, 31.093700f, 8.792610f, 15.491200f, 31.093700f, 9.098440f, 16.222200f, 30.000000f, 9.527780f, 8.892590f, 30.000000f, 15.140700f, 8.792610f, 31.093700f, 14.970500f, 9.098440f, 31.093800f, 15.491200f, 9.527780f, 30.000000f, 16.222200f, 0.000000f, 30.000000f, 17.500000f, 0.000000f, 31.093700f, 17.303200f, 0.000000f, 31.093800f, 17.905100f, 0.000000f, 30.000000f, 18.750000f, -9.392590f, 30.000000f, 15.140700f, -8.940760f, 31.093700f, 14.970500f, -9.116960f, 31.093700f, 15.491200f, -9.527780f, 30.000000f, 16.222200f, -15.390700f, 30.000000f, 8.892590f, -15.044600f, 31.093700f, 8.792610f, -15.500500f, 31.093800f, 9.098440f, -16.222200f, 30.000000f, 9.527780f, -17.500000f, 30.000000f, 0.000000f, -17.303200f, 31.093700f, 0.000000f, -17.905100f, 31.093800f, 0.000000f, -18.750000f, 30.000000f, 0.000000f, -15.140700f, 30.000000f, -8.892590f, -14.970500f, 31.093700f, -8.792610f, -15.491200f, 31.093700f, -9.098440f, -16.222200f, 30.000000f, -9.527780f, -8.892590f, 30.000000f, -15.140700f, -8.792610f, 31.093700f, -14.970500f, -9.098440f, 31.093800f, -15.491200f, -9.527780f, 30.000000f, -16.222200f, 0.000000f, 30.000000f, -17.500000f, 0.000000f, 31.093700f, -17.303200f, 0.000000f, 31.093800f, -17.905100f, 0.000000f, 30.000000f, -18.750000f, 8.892590f, 30.000000f, -15.140700f, 8.792610f, 31.093700f, -14.970500f, 9.098440f, 31.093700f, -15.491200f, 9.527780f, 30.000000f, -16.222200f, 15.140700f, 30.000000f, -8.892590f, 14.970500f, 31.093700f, -8.792610f, 15.491200f, 31.093800f, -9.098440f, 16.222200f, 30.000000f, -9.527780f, 21.759300f, 23.472200f, 0.000000f, 24.074100f, 17.152800f, 0.000000f, 25.000000f, 11.250000f, 0.000000f, 18.825800f, 23.472200f, 11.056900f, 20.828501f, 17.152800f, 12.233200f, 21.629601f, 11.250000f, 12.703700f, 11.056900f, 23.472200f, 18.825800f, 12.233200f, 17.152800f, 20.828501f, 12.703700f, 11.250000f, 21.629601f, 0.000000f, 23.472200f, 21.759300f, 0.000000f, 17.152800f, 24.074100f, 0.000000f, 11.250000f, 25.000000f, -11.056900f, 23.472200f, 18.825800f, -12.233200f, 17.152800f, 20.828501f, -12.703700f, 11.250000f, 21.629601f, -18.825800f, 23.472200f, 11.056900f, -20.828501f, 17.152800f, 12.233200f, -21.629601f, 11.250000f, 12.703700f, -21.759300f, 23.472200f, 0.000000f, -24.074100f, 17.152800f, 0.000000f, -25.000000f, 11.250000f, 0.000000f, -18.825800f, 23.472200f, -11.056900f, -20.828501f, 17.152800f, -12.233200f, -21.629601f, 11.250000f, -12.703700f, -11.056900f, 23.472200f, -18.825800f, -12.233200f, 17.152800f, -20.828501f, -12.703700f, 11.250000f, -21.629601f, 0.000000f, 23.472200f, -21.759300f, 0.000000f, 17.152800f, -24.074100f, 0.000000f, 11.250000f, -25.000000f, 11.056900f, 23.472200f, -18.825800f, 12.233200f, 17.152800f, -20.828501f, 12.703700f, 11.250000f, -21.629601f, 18.825800f, 23.472200f, -11.056900f, 20.828501f, 17.152800f, -12.233200f, 21.629601f, 11.250000f, -12.703700f, 23.379601f, 6.527780f, 0.000000f, 20.370399f, 3.472220f, 0.000000f, 18.750000f, 1.875000f, 0.000000f, 20.227699f, 6.527780f, 11.880300f, 17.624100f, 3.472220f, 10.351200f, 16.222200f, 1.875000f, 9.527780f, 11.880300f, 6.527780f, 20.227699f, 10.351200f, 3.472220f, 17.624100f, 9.527780f, 1.875000f, 16.222200f, 0.000000f, 6.527780f, 23.379601f, 0.000000f, 3.472220f, 20.370399f, 0.000000f, 1.875000f, 18.750000f, -11.880300f, 6.527780f, 20.227699f, -10.351200f, 3.472220f, 17.624100f, -9.527780f, 1.875000f, 16.222200f, -20.227699f, 6.527780f, 11.880300f, -17.624100f, 3.472220f, 10.351200f, -16.222200f, 1.875000f, 9.527780f, -23.379601f, 6.527780f, 0.000000f, -20.370399f, 3.472220f, 0.000000f, -18.750000f, 1.875000f, 0.000000f, -20.227699f, 6.527780f, -11.880300f, -17.624100f, 3.472220f, -10.351200f, -16.222200f, 1.875000f, -9.527780f, -11.880300f, 6.527780f, -20.227699f, -10.351200f, 3.472220f, -17.624100f, -9.527780f, 1.875000f, -16.222200f, 0.000000f, 6.527780f, -23.379601f, 0.000000f, 3.472220f, -20.370399f, 0.000000f, 1.875000f, -18.750000f, 11.880300f, 6.527780f, -20.227699f, 10.351200f, 3.472220f, -17.624100f, 9.527780f, 1.875000f, -16.222200f, 20.227699f, 6.527780f, -11.880300f, 17.624100f, 3.472220f, -10.351200f, 16.222200f, 1.875000f, -9.527780f, 17.847200f, 0.972222f, 0.000000f, 12.777800f, 0.277778f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 15.441100f, 0.972222f, 9.069030f, 11.055100f, 0.277778f, 6.493000f, 9.069030f, 0.972222f, 15.441100f, 6.493000f, 0.277778f, 11.055100f, 0.000000f, 0.972222f, 17.847200f, 0.000000f, 0.277778f, 12.777800f, -9.069030f, 0.972222f , 15.441100f, -6.493000f, 0.277778f, 11.055100f, -15.441100f, 0.972222f, 9.069030f, -11.055100f, 0.277778f, 6.493000f, -17.847200f, 0.972222f, 0.000000f, -12.777800f, 0.277778f, 0.000000f, -15.441100f, 0.972222f, -9.069030f, -11.055100f, 0.277778f, -6.493000f, -9.069030f, 0.972222f, -15.441100f, -6.493000f, 0.277778f, -11.055100f, 0.000000f, 0.972222f, -17.847200f, 0.000000f, 0.277778f, -12.777800f, 9.069030f, 0.972222f, -15.441100f, 6.493000f, 0.277778f, -11.055100f, 15.441100f, 0.972222f, -9.069030f, 11.055100f, 0.277778f, -6.493000f, -20.000000f, 25.312500f, 0.000000f, -27.453699f, 25.208300f, 0.000000f, -32.129601f, 24.479200f, 0.000000f, -33.750000f, 22.500000f, 0.000000f, -19.675900f, 26.041700f, 2.500000f, -27.897800f, 25.910500f, 2.500000f, -32.981800f, 24.992300f, 2.500000f, -34.722198f, 22.500000f, 2.500000f, -19.074100f, 27.395800f, 2.500000f, -28.722601f, 27.214500f, 2.500000f, -34.564499f, 25.945200f, 2.500000f, -36.527802f, 22.500000f, 2.500000f, -18.750000f, 28.125000f, 0.000000f, -29.166700f, 27.916700f, 0.000000f, -35.416698f, 26.458300f, 0.000000f, -37.500000f, 22.500000f, 0.000000f, -19.074100f, 27.395800f, -2.500000f, -28.722601f, 27.214500f, -2.500000f, -34.564499f, 25.945200f, -2.500000f, -36.527802f, 22.500000f, -2.500000f, -19.675900f, 26.041700f, -2.500000f, -27.897800f, 25.910500f, -2.500000f, -32.981800f, 24.992300f, -2.500000f, -34.722198f, 22.500000f, -2.500000f, -32.870399f, 18.958300f, 0.000000f, -30.046301f, 14.791700f, 0.000000f, -25.000000f, 11.250000f, 0.000000f, -33.686600f, 18.463200f, 2.500000f, -30.418400f, 14.071500f, 2.500000f, -24.675900f, 10.277800f, 2.500000f, -35.202301f, 17.543699f, 2.500000f, -31.109400f, 12.734100f, 2.500000f, -24.074100f, 8.472220f, 2.500000f, -36.018501f, 17.048599f, 0.000000f, -31.481501f, 12.013900f, 0.000000f, -23.750000f, 7.500000f, 0.000000f, -35.202301f, 17.543699f, -2.500000f, -31.109400f, 12.734100f, -2.500000f, -24.074100f, 8.472220f, -2.500000f, -33.686600f, 18.463200f, -2.500000f, -30.418400f, 14.071500f, -2.500000f, -24.675900f, 10.277800f, -2.500000f, 21.250000f, 17.812500f, 0.000000f, 28.379601f, 20.138901f, 0.000000f, 30.787001f, 25.173599f, 0.000000f, 33.750000f, 30.000000f, 0.000000f, 21.250000f, 15.138900f, 5.500000f, 29.243799f, 18.428499f, 4.614200f, 31.867300f, 24.534500f, 2.969140f, 35.694401f, 30.000000f, 2.083330f, 21.250000f, 10.173600f, 5.500000f, 30.848801f, 15.252100f, 4.614200f, 33.873501f, 23.347500f, 2.969140f, 39.305599f, 30.000000f, 2.083330f, 21.250000f, 7.500000f, 0.000000f, 31.712999f, 13.541700f, 0.000000f, 34.953701f, 22.708300f, 0.000000f, 41.250000f, 30.000000f, 0.000000f, 21.250000f, 10.173600f, -5.500000f, 30.848801f, 15.252100f, -4.614200f, 33.873501f, 23.347500f, -2.969140f, 39.305599f, 30.000000f, -2.083330f, 21.250000f, 15.138900f , -5.500000f, 29.243799f, 18.428499f, -4.614200f, 31.867300f, 24.534500f, -2.969140f, 35.694401f, 30.000000f, -2.083330f, 34.907398f, 30.625000f, 0.000000f, 35.509300f, 30.625000f, 0.000000f, 35.000000f, 30.000000f, 0.000000f, 36.971901f, 30.679001f, 1.867280f, 37.279701f, 30.692499f, 1.466050f, 36.296299f, 30.000000f, 1.250000f, 40.805901f, 30.779301f, 1.867280f, 40.567600f, 30.817900f, 1.466050f, 38.703701f, 30.000000f, 1.250000f, 42.870399f, 30.833300f, 0.000000f, 42.338001f, 30.885401f, 0.000000f, 40.000000f, 30.000000f, 0.000000f, 40.805901f, 30.779301f, -1.867280f, 40.567600f, 30.817900f, -1.466050f, 38.703701f, 30.000000f, -1.250000f, 36.971901f, 30.679001f, -1.867280f, 37.279701f, 30.692499f, -1.466050f, 36.296299f, 30.000000f, -1.250000f, 0.000000f, 39.375000f, 0.000000f, 4.537040f, 38.333302f, 0.000000f, 2.962960f, 36.041698f, 0.000000f, 2.500000f, 33.750000f, 0.000000f, 3.927850f, 38.333302f, 2.310430f, 2.564750f, 36.041698f, 1.508090f, 2.162960f, 33.750000f, 1.270370f, 2.310430f, 38.333302f, 3.927850f, 1.508090f, 36.041698f, 2.564750f, 1.270370f, 33.750000f, 2.162960f, 0.000000f, 38.333302f, 4.537040f, 0.000000f, 36.041698f, 2.962960f, 0.000000f, 33.750000f, 2.500000f, -2.310430f, 38.333302f, 3.927850f, -1.508090f, 36.041698f, 2.564750f, -1.270370f, 33.750000f, 2.162960f, -3.927850f, 38.333302f, 2.310430f, -2.564750f, 36.041698f, 1.508090f, -2.162960f, 33.750000f, 1.270370f, -4.537040f, 38.333302f, 0.000000f, -2.962960f, 36.041698f, 0.000000f, -2.500000f, 33.750000f, 0.000000f, -3.927850f, 38.333302f, -2.310430f, -2.564750f, 36.041698f, -1.508090f, -2.162960f, 33.750000f, -1.270370f, -2.310430f, 38.333302f, -3.927850f, -1.508090f, 36.041698f, -2.564750f, -1.270370f, 33.750000f, -2.162960f, 0.000000f, 38.333302f, -4.537040f, 0.000000f, 36.041698f, -2.962960f, 0.000000f, 33.750000f, -2.500000f, 2.310430f, 38.333302f, -3.927850f, 1.508090f, 36.041698f, -2.564750f, 1.270370f, 33.750000f, -2.162960f, 3.927850f, 38.333302f, -2.310430f, 2.564750f, 36.041698f, -1.508090f, 2.162960f, 33.750000f, -1.270370f, 7.175930f, 32.361099f, 0.000000f, 13.240700f, 31.388901f, 0.000000f, 16.250000f, 30.000000f, 0.000000f, 6.208500f, 32.361099f, 3.646430f, 11.455700f, 31.388901f, 6.728260f, 14.059300f, 30.000000f, 8.257410f, 3.646430f, 32.361099f, 6.208500f, 6.728260f, 31.388901f, 11.455700f, 8.257410f, 30.000000f, 14.059300f, 0.000000f, 32.361099f, 7.175930f, 0.000000f, 31.388901f, 13.240700f, 0.000000f, 30.000000f, 16.250000f, -3.646430f, 32.361099f, 6.208500f, -6.728260f, 31.388901f, 11.455700f, -8.257410f, 30.000000f, 14.059300f, -6.208500f, 32.361099f, 3.646430f, -11.455700f, 31.388901f, 6.728260f, -14.059300f, 30.000000f, 8.257410f, -7.175930f, 32.361099f, 0.000000f, -13.240700f, 31.388901f, 0.000000f, -16.250000f, 30.000000f, 0.000000f, -6.208500f, 32.361099f, -3.646430f, -11.455700f, 31.388901f, -6.728260f, -14.059300f, 30.000000f, -8.257410f, -3.646430f, 32.361099f, -6.208500f, -6.728260f, 31.388901f, -11.455700f, -8.257410f, 30.000000f, -14.059300f, 0.000000f, 32.361099f, -7.175930f, 0.000000f, 31.388901f, -13.240700f, 0.000000f, 30.000000f, -16.250000f, 3.646430f, 32.361099f, -6.208500f, 6.728260f, 31.388901f, -11.455700f, 8.257410f, 30.000000f, -14.059300f, 6.208500f, 32.361099f, -3.646430f, 11.455700f, 31.388901f, -6.728260f, 14.059300f, 30.000000f, -8.257410f }; __declspec (align(16))static const int pTeapotIndex[NTRIAGLE*4] = { 0, 4, 5, 1, 5, 1, 0, 1, 1, 5, 6, 1, 6, 2, 1, 1, 2, 6, 7, 1, 7, 3, 2, 1, 4, 8, 9, 1, 9, 5, 4, 1, 5, 9, 10, 1, 10, 6, 5, 1, 6, 10, 11, 1, 11, 7, 6, 1, 8, 12, 13, 1, 13, 9, 8, 1, 9, 13, 14, 1, 14, 10, 9, 1, 10, 14, 15, 1, 15, 11, 10, 1, 12, 16, 17, 1, 17, 13, 12, 1, 13, 17, 18, 1, 18, 14, 13, 1, 14, 18, 19, 1, 19, 15, 14, 1, 16, 20, 21, 1, 21, 17, 16, 1, 17, 21, 22, 1, 22, 18, 17, 1, 18, 22, 23, 1, 23, 19, 18, 1, 20, 24, 25, 1, 25, 21, 20, 1, 21, 25, 26, 1, 26, 22, 21, 1, 22, 26, 27, 1, 27, 23, 22, 1, 24, 28, 29, 1, 29, 25, 24, 1, 25, 29, 30, 1, 30, 26, 25, 1, 26, 30, 31, 1, 31, 27, 26, 1, 28, 32, 33, 1, 33, 29, 28, 1, 29, 33, 34, 1, 34, 30, 29, 1, 30, 34, 35, 1, 35, 31, 30, 1, 32, 36, 37, 1, 37, 33, 32, 1, 33, 37, 38, 1, 38, 34, 33, 1, 34, 38, 39, 1, 39, 35, 34, 1, 36, 40, 41, 1, 41, 37, 36, 1, 37, 41, 42, 1, 42, 38, 37, 1, 38, 42, 43, 1, 43, 39, 38, 1, 40, 44, 45, 1, 45, 41, 40, 1, 41, 45, 46, 1, 46, 42, 41, 1, 42, 46, 47, 1, 47, 43, 42, 1, 44, 0, 1, 1, 1, 45, 44, 1, 45, 1, 2, 1, 2, 46, 45, 1, 46, 2, 3, 1, 3, 47, 46, 1, 3, 7, 51, 1, 51, 48, 3, 1, 48, 51, 52, 1, 52, 49, 48, 1, 49, 52, 53, 1, 53, 50, 49, 1, 7, 11, 54, 1, 54, 51, 7, 1, 51, 54, 55, 1, 55, 52, 51, 1, 52, 55, 56, 1, 56, 53, 52, 1, 11, 15, 57, 1, 57, 54, 11, 1, 54, 57, 58, 1, 58, 55, 54, 1, 55, 58, 59, 1, 59, 56, 55, 1, 15, 19, 60, 1, 60, 57, 15, 1, 57, 60, 61, 1, 61, 58, 57, 1, 58, 61, 62, 1, 62, 59, 58, 1, 19, 23, 63, 1, 63, 60, 19, 1, 60, 63, 64, 1, 64, 61, 60, 1, 61, 64, 65, 1, 65, 62, 61, 1, 23, 27, 66, 1, 66, 63, 23, 1, 63, 66, 67, 1, 67, 64, 63, 1, 64, 67, 68, 1, 68, 65, 64, 1, 27, 31, 69, 1, 69, 66, 27, 1, 66, 69, 70, 1, 70, 67, 66, 1, 67, 70, 71, 1, 71, 68, 67, 1, 31, 35, 72, 1, 72, 69, 31, 1, 69, 72, 73, 1, 73, 70, 69, 1, 70, 73, 74, 1, 74, 71, 70, 1, 35, 39, 75, 1, 75, 72, 35, 1, 72, 75, 76, 1, 76, 73, 72, 1, 73, 76, 77, 1, 77, 74, 73, 1, 39, 43, 78, 1, 78, 75, 39, 1, 75, 78, 79, 1, 79, 76, 75, 1, 76, 79, 80, 1, 80, 77, 76, 1, 43, 47, 81, 1, 81, 78, 43, 1, 78, 81, 82, 1, 82, 79, 78, 1, 79, 82, 83, 1, 83, 80, 79, 1, 47, 3, 48, 1, 48, 81, 47, 1, 81, 48, 49, 1, 49, 82, 81, 1, 82, 49, 50, 1, 50, 83, 82, 1, 50, 53, 87, 1, 87, 84, 50, 1, 84, 87, 88, 1, 88, 85, 84, 1, 85, 88, 89, 1, 89, 86, 85, 1, 53, 56, 90, 1, 90, 87, 53, 1, 87, 90, 91, 1, 91, 88, 87, 1, 88, 91, 92, 1, 92, 89, 88, 1, 56, 59, 93, 1, 93, 90, 56, 1, 90, 93, 94, 1, 94, 91, 90, 1, 91, 94, 95, 1, 95, 92, 91, 1, 59, 62, 96, 1, 96, 93, 59, 1, 93, 96, 97, 1, 97, 94, 93, 1, 94, 97, 98, 1, 98, 95, 94, 1, 62, 65, 99, 1, 99, 96, 62, 1, 96, 99, 100, 1, 100, 97, 96, 1, 97, 100, 101, 1, 101, 98, 97, 1, 65, 68, 102, 1, 102, 99, 65, 1, 99, 102, 103, 1, 103, 100, 99, 1, 100, 103, 104, 1, 104, 101, 100, 1, 68, 71, 105, 1, 105, 102, 68, 1, 102, 105, 106, 1, 106, 103, 102, 1, 103, 106, 107, 1, 107, 104, 103, 1, 71, 74, 108, 1, 108, 105, 71, 1, 105, 108, 109, 1, 109, 106, 105, 1, 106, 109, 110, 1, 110, 107, 106, 1, 74, 77, 111, 1, 111, 108, 74, 1, 108, 111, 112, 1, 112, 109, 108, 1, 109, 112, 113, 1, 113, 110, 109, 1, 77, 80, 114, 1, 114, 111, 77, 1, 111, 114, 115, 1, 115, 112, 111, 1, 112, 115, 116, 1, 116, 113, 112, 1, 80, 83, 117, 1, 117, 114, 80, 1, 114, 117, 118, 1, 118, 115, 114, 1, 115, 118, 119, 1, 119, 116, 115, 1, 83, 50, 84, 1, 84, 117, 83, 1, 117, 84, 85, 1, 85, 118, 117, 1, 118, 85, 86, 1, 86, 119, 118, 1, 86, 89, 123, 1, 123, 120, 86, 1, 120, 123, 124, 1, 124, 121, 120, 1, 121, 124, 122, 1, 122, 122, 121, 1, 89, 92, 125, 1, 125, 123, 89, 1, 123, 125, 126, 1, 126, 124, 123, 1, 124, 126, 122, 1, 122, 122, 124, 1, 92, 95, 127, 1, 127, 125, 92, 1, 125, 127, 128, 1, 128, 126, 125, 1, 126, 128, 122, 1, 122, 122, 126, 1, 95, 98, 129, 1, 129, 127, 95, 1, 127, 129, 130, 1, 130, 128, 127, 1, 128, 130, 122, 1, 122, 122, 128, 1, 98, 101, 131, 1, 131, 129, 98, 1, 129, 131, 132, 1, 132, 130, 129, 1, 130, 132, 122, 1, 122, 122, 130, 1, 101, 104, 133, 1, 133, 131, 101, 1, 131, 133, 134, 1, 134, 132, 131, 1, 132, 134, 122, 1, 122, 122, 132, 1, 104, 107, 135, 1, 135, 133, 104, 1, 133, 135, 136, 1, 136, 134, 133, 1, 134, 136, 122, 1, 122, 122, 134, 1, 107, 110, 137, 1, 137, 135, 107, 1, 135, 137, 138, 1, 138, 136, 135, 1, 136, 138, 122, 1, 122, 122, 136, 1, 110, 113, 139, 1, 139, 137, 110, 1, 137, 139, 140, 1, 140, 138, 137, 1, 138, 140, 122, 1, 122, 122, 138, 1, 113, 116, 141, 1, 141, 139, 113, 1, 139, 141, 142, 1, 142, 140, 139, 1, 140, 142, 122, 1, 122, 122, 140, 1, 116, 119, 143, 1, 143, 141, 116, 1, 141, 143, 144, 1, 144, 142, 141, 1, 142, 144, 122, 1, 122, 122, 142, 1, 119, 86, 120, 1, 120, 143, 119, 1, 143, 120, 121, 1, 121, 144, 143, 1, 144, 121, 122, 1, 122, 122, 144, 1, 145, 149, 150, 1, 150, 146, 145, 1, 146, 150, 151, 1, 151, 147, 146, 1, 147, 151, 152, 1, 152, 148, 147, 1, 149, 153, 154, 1, 154, 150, 149, 1, 150, 154, 155, 1, 155, 151, 150, 1, 151, 155, 156, 1, 156, 152, 151, 1, 153, 157, 158, 1, 158, 154, 153, 1, 154, 158, 159, 1, 159, 155, 154, 1, 155, 159, 160, 1, 160, 156, 155, 1, 157, 161, 162, 1, 162, 158, 157, 1, 158, 162, 163, 1, 163, 159, 158, 1, 159, 163, 164, 1, 164, 160, 159, 1, 161, 165, 166, 1, 166, 162, 161, 1, 162, 166, 167, 1, 167, 163, 162, 1, 163, 167, 168, 1, 168, 164, 163, 1, 165, 145, 146, 1, 146, 166, 165, 1, 166, 146, 147, 1, 147, 167, 166, 1, 167, 147, 148, 1, 148, 168, 167, 1, 148, 152, 172, 1, 172, 169, 148, 1, 169, 172, 173, 1, 173, 170, 169, 1, 170, 173, 174, 1, 174, 171, 170, 1, 152, 156, 175, 1, 175, 172, 152, 1, 172, 175, 176, 1, 176, 173, 172, 1, 173, 176, 177, 1, 177, 174, 173, 1, 156, 160, 178, 1, 178, 175, 156, 1, 175, 178, 179, 1, 179, 176, 175, 1, 176, 179, 180, 1, 180, 177, 176, 1, 160, 164, 181, 1, 181, 178, 160, 1, 178, 181, 182, 1, 182, 179, 178, 1, 179, 182, 183, 1, 183, 180, 179, 1, 164, 168, 184, 1, 184, 181, 164, 1, 181, 184, 185, 1, 185, 182, 181, 1, 182, 185, 186, 1, 186, 183, 182, 1, 168, 148, 169, 1, 169, 184, 168, 1, 184, 169, 170, 1, 170, 185, 184, 1, 185, 170, 171, 1, 171, 186, 185, 1, 187, 191, 192, 1, 192, 188, 187, 1, 188, 192, 193, 1, 193, 189, 188, 1, 189, 193, 194, 1, 194, 190, 189, 1, 191, 195, 196, 1, 196, 192, 191, 1, 192, 196, 197, 1, 197, 193, 192, 1, 193, 197, 198, 1, 198, 194, 193, 1, 195, 199, 200, 1, 200, 196, 195, 1, 196, 200, 201, 1, 201, 197, 196, 1, 197, 201, 202, 1, 202, 198, 197, 1, 199, 203, 204, 1, 204, 200, 199, 1, 200, 204, 205, 1, 205, 201, 200, 1, 201, 205, 206, 1, 206, 202, 201, 1, 203, 207, 208, 1, 208, 204, 203, 1, 204, 208, 209, 1, 209, 205, 204, 1, 205, 209, 210, 1, 210, 206, 205, 1, 207, 187, 188, 1, 188, 208, 207, 1, 208, 188, 189, 1, 189, 209, 208, 1, 209, 189, 190, 1, 190, 210, 209, 1, 190, 194, 214, 1, 214, 211, 190, 1, 211, 214, 215, 1, 215, 212, 211, 1, 212, 215, 216, 1, 216, 213, 212, 1, 194, 198, 217, 1, 217, 214, 194, 1, 214, 217, 218, 1, 218, 215, 214, 1, 215, 218, 219, 1, 219, 216, 215, 1, 198, 202, 220, 1, 220, 217, 198, 1, 217, 220, 221, 1, 221, 218, 217, 1, 218, 221, 222, 1, 222, 219, 218, 1, 202, 206, 223, 1, 223, 220, 202, 1, 220, 223, 224, 1, 224, 221, 220, 1, 221, 224, 225, 1, 225, 222, 221, 1, 206, 210, 226, 1, 226, 223, 206, 1, 223, 226, 227, 1, 227, 224, 223, 1, 224, 227, 228, 1, 228, 225, 224, 1, 210, 190, 211, 1, 211, 226, 210, 1, 226, 211, 212, 1, 212, 227, 226, 1, 227, 212, 213, 1, 213, 228, 227, 1, 229, 229, 233, 1, 233, 230, 229, 1, 230, 233, 234, 1, 234, 231, 230, 1, 231, 234, 235, 1, 235, 232, 231, 1, 229, 229, 236, 1, 236, 233, 229, 1, 233, 236, 237, 1, 237, 234, 233, 1, 234, 237, 238, 1, 238, 235, 234, 1, 229, 229, 239, 1, 239, 236, 229, 1, 236, 239, 240, 1, 240, 237, 236, 1, 237, 240, 241, 1, 241, 238, 237, 1, 229, 229, 242, 1, 242, 239, 229, 1, 239, 242, 243, 1, 243, 240, 239, 1, 240, 243, 244, 1, 244, 241, 240, 1, 229, 229, 245, 1, 245, 242, 229, 1, 242, 245, 246, 1, 246, 243, 242, 1, 243, 246, 247, 1, 247, 244, 243, 1, 229, 229, 248, 1, 248, 245, 229, 1, 245, 248, 249, 1, 249, 246, 245, 1, 246, 249, 250, 1, 250, 247, 246, 1, 229, 229, 251, 1, 251, 248, 229, 1, 248, 251, 252, 1, 252, 249, 248, 1, 249, 252, 253, 1, 253, 250, 249, 1, 229, 229, 254, 1, 254, 251, 229, 1, 251, 254, 255, 1, 255, 252, 251, 1, 252, 255, 256, 1, 256, 253, 252, 1, 229, 229, 257, 1, 257, 254, 229, 1, 254, 257, 258, 1, 258, 255, 254, 1, 255, 258, 259, 1, 259, 256, 255, 1, 229, 229, 260, 1, 260, 257, 229, 1, 257, 260, 261, 1, 261, 258, 257, 1, 258, 261, 262, 1, 262, 259, 258, 1, 229, 229, 263, 1, 263, 260, 229, 1, 260, 263, 264, 1, 264, 261, 260, 1, 261, 264, 265, 1, 265, 262, 261, 1, 229, 229, 230, 1, 230, 263, 229, 1, 263, 230, 231, 1, 231, 264, 263, 1, 264, 231, 232, 1, 232, 265, 264, 1, 232, 235, 269, 1, 269, 266, 232, 1, 266, 269, 270, 1, 270, 267, 266, 1, 267, 270, 271, 1, 271, 268, 267, 1, 235, 238, 272, 1, 272, 269, 235, 1, 269, 272, 273, 1, 273, 270, 269, 1, 270, 273, 274, 1, 274, 271, 270, 1, 238, 241, 275, 1, 275, 272, 238, 1, 272, 275, 276, 1, 276, 273, 272, 1, 273, 276, 277, 1, 277, 274, 273, 1, 241, 244, 278, 1, 278, 275, 241, 1, 275, 278, 279, 1, 279, 276, 275, 1, 276, 279, 280, 1, 280, 277, 276, 1, 244, 247, 281, 1, 281, 278, 244, 1, 278, 281, 282, 1, 282, 279, 278, 1, 279, 282, 283, 1, 283, 280, 279, 1, 247, 250, 284, 1, 284, 281, 247, 1, 281, 284, 285, 1, 285, 282, 281, 1, 282, 285, 286, 1, 286, 283, 282, 1, 250, 253, 287, 1, 287, 284, 250, 1, 284, 287, 288, 1, 288, 285, 284, 1, 285, 288, 289, 1, 289, 286, 285, 1, 253, 256, 290, 1, 290, 287, 253, 1, 287, 290, 291, 1, 291, 288, 287, 1, 288, 291, 292, 1, 292, 289, 288, 1, 256, 259, 293, 1, 293, 290, 256, 1, 290, 293, 294, 1, 294, 291, 290, 1, 291, 294, 295, 1, 295, 292, 291, 1, 259, 262, 296, 1, 296, 293, 259, 1, 293, 296, 297, 1, 297, 294, 293, 1, 294, 297, 298, 1, 298, 295, 294, 1, 262, 265, 299, 1, 299, 296, 262, 1, 296, 299, 300, 1, 300, 297, 296, 1, 297, 300, 301, 1, 301, 298, 297, 1, 265, 232, 266, 1, 266, 299, 265, 1, 299, 266, 267, 1, 267, 300, 299, 1, 300, 267, 268, 1, 268, 301, 300, 1 }; static void rrOptimCheckMask_32s( Ipp32s* pMask, int len, int* check) { Ipp32s pMax=-1; if( pMask[0] != -1 ) { *check = 33; return; } if( pMask[len-1] != -1 ) { *check = 33; return; } ippsMax_32s( pMask, len, &pMax ); *check = pMax; return; } #define MAX_KDTREE_DEPTH 33 #define _WIDTH 320 #define _HEIGHT 256 typedef struct SceneContext { int nVert; Ipp32f *pVrt; /* pointer to array of Vertices */ int nTriangles; Ipp32s *pTng; /* pointer to array of Triangels */ IpprIntersectContext iCtx; /* Intersection context */ }SampleSceneContext; #define NBUNCH 10 typedef struct TraceContext { Ipp32f *p3D_0[3]; Ipp32f *p1D_1 ; Ipp32f *p2D_2[2]; Ipp32s *pTrngl; Ipp32f *p3D_3[3]; }SampleTraceContext; int main(/*int argc, char** argv*/) { IppiSize sizeImPlane={_WIDTH,_HEIGHT}; /* pixels */ SampleSceneContext sceneContext; IppStatus status; Ipp32f *pFlatNorm; IppBox3D_32f pBound; int pTriAccelSize; int KDTreeSize; IppPoint3D_32f ul_corner = {-0.70281667f, 0.52656168f, -1.000000f}, /* upper left coner of Image plane */ dx = { 0.0044063739f, 0.000000f, 0.000000f}, dy = { 0.000000f, -0.0044063739f, 0.000000f}, eye_pos = { 2.6851997f, 23.162521f, 75.012863f}; int isNotFinished = 1; IppiSize bunchSize = { 16, 16}; int lenBunch=bunchSize.height *bunchSize.width; int nBunch = NBUNCH; /* #bunch of rays */ SampleTraceContext rtContext; Ipp32f* pMemForTrace; int pStepBMP; Ipp8u* pBMP; Ipp8u value[3]; IppPoint3D_32f defColour; int xCnt; int yCnt; int last_cnt; int stepBunch; int counter; IpprPSAHBldContext fastKDCont; sceneContext.nVert = NVERTEX; sceneContext.nTriangles = NTRIAGLE; /* allocate memory for the coordinates of triangle's vertexes. */ sceneContext.pVrt = ippsMalloc_32f( sceneContext.nVert * 3 ); if (!sceneContext.pVrt ) return -1; status = ippsCopy_32f( pTeapotVertCoord, sceneContext.pVrt, sceneContext.nVert * 3 ); if(status < 0 ) return -1; /* allocate memory for the triangle's indexes */ sceneContext.pTng = ippsMalloc_32s( sceneContext.nTriangles * 4 ); if (!sceneContext.pVrt ) return -1; status = ippsCopy_32s( pTeapotIndex, sceneContext.pTng, sceneContext.nTriangles * 4); if(status < 0 ) return -1; /* allocate memory for the triangle's flat normales */ pFlatNorm = ippsMalloc_32f( sceneContext.nTriangles * 3 ); ipprTriangleNormal_32f(sceneContext.pVrt, sceneContext.pTng, pFlatNorm, sceneContext.nTriangles); /* ///////////////////////////////////////////////////// // Initialization of the acceleration structures //// ///////////////////////////////////////////////////// */ /* create the AABB */ status = ipprSetBoundBox_32f( sceneContext.pVrt, sceneContext.nVert, &(pBound)); if(status < 0 ) return -1; sceneContext.iCtx.pBound = &(pBound); /* create triangle acceleration structure */ ipprTriangleAccelGetSize( &pTriAccelSize); sceneContext.iCtx.pAccel = (IpprTriangleAccel *)ippsMalloc_8u( pTriAccelSize * sceneContext.nTriangles ); status = ipprTriangleAccelInit( sceneContext.iCtx.pAccel, sceneContext.pVrt, sceneContext.pTng, sceneContext.nTriangles ); if(status < 0 ) return -1; /* create the KDtree structure */ fastKDCont.Bounds = 0; fastKDCont.Alg = ippKDTBuildPureSAH; fastKDCont.AvailMemory = 2046; fastKDCont.MaxDepth = MAX_KDTREE_DEPTH; fastKDCont.QoS = 1.0f; status = ipprKDTreeBuildAlloc( &(sceneContext.iCtx.pRootNode), sceneContext.pVrt, sceneContext.pTng, sceneContext.nVert, sceneContext.nTriangles, &KDTreeSize, (void*)&fastKDCont ); if(status < 0 ) return -1; /* allocate memory for all temporary arrays */ pMemForTrace = ippsMalloc_32f( bunchSize.height *bunchSize.width * nBunch ); if(!pMemForTrace) return -1; rtContext.p3D_0[0] = pMemForTrace + 0*lenBunch; rtContext.p3D_0[1] = pMemForTrace + 1*lenBunch; rtContext.p3D_0[2] = pMemForTrace + 2*lenBunch; rtContext.p1D_1 = pMemForTrace + 3*lenBunch; rtContext.p2D_2[0] = pMemForTrace + 4*lenBunch; rtContext.p2D_2[1] = pMemForTrace + 5*lenBunch; rtContext.pTrngl =(Ipp32s*)(pMemForTrace + 6*lenBunch); rtContext.p3D_3[0] = pMemForTrace + 7*lenBunch; rtContext.p3D_3[1] = pMemForTrace + 8*lenBunch; rtContext.p3D_3[2] = pMemForTrace + 9*lenBunch; /* allocate memory for resal Image */ pBMP = ippiMalloc_8u_C3(sizeImPlane.width, sizeImPlane.height, &pStepBMP); if(!pBMP) return -1; /* init resal Image */ value[0] =value[1] =value[2] = 0; ippiSet_8u_C3R( value, pBMP, pStepBMP, sizeImPlane ); /* for simplicity we'll */ xCnt = sizeImPlane.width / bunchSize.width; yCnt = sizeImPlane.height / bunchSize.height; last_cnt = xCnt * yCnt; stepBunch = bunchSize.width*sizeof(float); counter = 0; defColour[0] = 0.999f; defColour[1] = 0.899f; defColour[2] = 0.799f; /* Simple tracer Groups of rays, or bunches, of the size bunchSize are traced. */ while(isNotFinished) { int x = counter % xCnt, y = counter / xCnt; int check; Ipp8u* pCurrentBMP_8u; Ipp8u* pBMP_8u[3]; pCurrentBMP_8u = pBMP + bunchSize.width * x * 3 + bunchSize.height * y * pStepBMP; /* calculate Eye/Primary Rays */ ipprCastEye_32f( ul_corner, dx, dy, x, y, /* coordinates of the bunch on the Image playne */ bunchSize, rtContext.p3D_0, /* direction of primary rays */ bunchSize); ippsSet_32f(IPP_MAXABS_32F, rtContext.p1D_1, lenBunch); ipprIntersectEyeSO_32f(eye_pos, rtContext.p3D_0, /* direction of primary rays */ rtContext.p1D_1, /* distance from origin to intersection point. */ rtContext.p2D_2, /* local surface parameters( u, v )at hit point. */ rtContext.pTrngl, /* the Triangle index, just it's array of masks */ &sceneContext.iCtx, bunchSize); rrOptimCheckMask_32s( rtContext.pTrngl, lenBunch, &check); if( check== -1 ){ goto secondaryEnd; /* there was no any intersections */ } /* simple shader is based on Lambert low */ ipprSurfFlatNormal_32f(pFlatNorm, rtContext.pTrngl, rtContext.p3D_3, lenBunch); ipprDot_32f_P3C1M( rtContext.p3D_0, rtContext.p3D_3, rtContext.pTrngl, rtContext.p1D_1, /* < N * EyeDir > */ lenBunch); ippsAbs_32f_I( rtContext.p1D_1, lenBunch); ippsSet_32f( defColour[0], rtContext.p3D_0[0], lenBunch ); ippsSet_32f( defColour[1], rtContext.p3D_0[1], lenBunch ); ippsSet_32f( defColour[2], rtContext.p3D_0[2], lenBunch ); ipprMul_32f_C1P3IM( rtContext.p1D_1, rtContext.pTrngl, rtContext.p3D_0, lenBunch); pBMP_8u[0] = (Ipp8u*)rtContext.p3D_3[0]; pBMP_8u[1] = (Ipp8u*)rtContext.p3D_3[1]; pBMP_8u[2] = (Ipp8u*)rtContext.p3D_3[2]; ippiReduceBits_32f8u_C1R( rtContext.p3D_0[0], stepBunch, pBMP_8u[0], stepBunch, bunchSize, 0, ippDitherBayer, 255); ippiReduceBits_32f8u_C1R( rtContext.p3D_0[1], stepBunch, pBMP_8u[1], stepBunch, bunchSize, 0, ippDitherBayer, 255); ippiReduceBits_32f8u_C1R( rtContext.p3D_0[2], stepBunch, pBMP_8u[2], stepBunch, bunchSize, 0, ippDitherBayer, 255); ippiCopy_8u_P3C3R( pBMP_8u, stepBunch, pCurrentBMP_8u, pStepBMP, bunchSize ); secondaryEnd: if(++counter==last_cnt) isNotFinished = 0; } /* free context */ ippsFree(sceneContext.pVrt); ippsFree(sceneContext.pTng); ippsFree(sceneContext.iCtx.pAccel); ippsFree(pMemForTrace); ippsFree(pFlatNorm); ippiFree(pBMP); ipprKDTreeFree(sceneContext.iCtx.pRootNode); return 0; }
Copyright © 2000 - 2011, Intel Corporation. All rights reserved.