01-23-2017, 09:38 PM
Uh, 100's of millions of points is really a lot.
For example a full HD display have only 1920 * 1080 = 2.073.600 pixels.
My advice would be to implement some kind of reduction algorithm where you would group pixeles into groups and show groups with pixels or spheres where the radius would represent the quantity (for example r = 10 would mean 100.000 items).
You might also try to use WritableBitmap and get a direct access to the bitmap's memory - then for each data item calculate its position and color and write the color data to the bitmap's memory (4 bytes for one color). You can probably do that in the background thread and show some waiting animation to the user. Here using unsafe code could improve performance; c++ would help even more. Keep in mind to try to prepare your data in a memory efficient way.
Theoretically it would be possible to use DXEngine to display pixels - you would create many 3D rectangles (one rectangle for one position) and use OrthographicCamera to make positioning rectangles in 3D space easier - for example if DXViewportView's Width is 1000 pixels and you set CameraWidth on OrthographicCamera to 1000, then a 3D rectangle with SizeX = 1 would be 1 pixel width. But it would take too long to create so much rectangles that you need.
In the future I plan to add support for Sprites. They could be used to create many 2D rectangles in the 3D world. They can be also very fast because the 3D rectangles are generated on the graphics card. But still having 100's of millions of them would not work well.
For example a full HD display have only 1920 * 1080 = 2.073.600 pixels.
My advice would be to implement some kind of reduction algorithm where you would group pixeles into groups and show groups with pixels or spheres where the radius would represent the quantity (for example r = 10 would mean 100.000 items).
You might also try to use WritableBitmap and get a direct access to the bitmap's memory - then for each data item calculate its position and color and write the color data to the bitmap's memory (4 bytes for one color). You can probably do that in the background thread and show some waiting animation to the user. Here using unsafe code could improve performance; c++ would help even more. Keep in mind to try to prepare your data in a memory efficient way.
Theoretically it would be possible to use DXEngine to display pixels - you would create many 3D rectangles (one rectangle for one position) and use OrthographicCamera to make positioning rectangles in 3D space easier - for example if DXViewportView's Width is 1000 pixels and you set CameraWidth on OrthographicCamera to 1000, then a 3D rectangle with SizeX = 1 would be 1 pixel width. But it would take too long to create so much rectangles that you need.
In the future I plan to add support for Sprites. They could be used to create many 2D rectangles in the 3D world. They can be also very fast because the 3D rectangles are generated on the graphics card. But still having 100's of millions of them would not work well.
Andrej Benedik

