I created a DirectX 3D viewer in the past for small grids and vectors in the past.  The ability to turn a small grid into a 3D terrain map using DirectX is fairly straight forward.  However, the real element that is necessary is a library module that can start with a massive terrain grid in a standard GIS format, process it into perhaps a custom format that works more like a Mipmap and then have an open source library that works with that format in order to generate the necessary DirectX models on the fly as you zoom around, but does it without huge delays.  We all know how google earth feels, but a lot of very smart developers had to work quite some time in order to coordinate that sort of ability.  Everyone points out that gaming engines can do spectacular things with 3D vertices.  When you &quot;walk around&quot; in a 3D world, some of them can even load the necessary elements as you go, and accomplish changes without noticeable loading screens.  However, what they don&#39;t typically do is zoom way out and zoom back in the way we are used to doing in GIS.  When they do support something like that, the 3D part is very low definition, almost flat, and most of what you are seeing is image mipmapping, which allows for rapid scaling.  <br>
<br>I think one thing that is important to remember is that while everyone knows that the gaming industry uses techniques in order to create extremely effective 3D displays, they usually work on engines that are designed for very specialized applications.  The difference between a tiny crude 3D grid being displayed on the screen and a navigable 3D world is proprietary, secret or just so specialized for a particular type of gaming that it usually isn&#39;t helpful for GIS.  Further, the people with the training and skill to work with those tools demand a notable salary compared to your standard graduate student.<br>
<br>If truly effective open source GIS specialized 3D engines were available, they would obviously be in high demand and used by a lot of people.  But you almost have to have an entertainment business model in mind to cost-justify the expense building it.  You might almost have to imagine a game that works a lot like GIS, so that you could finance the framework development by selling the resulting game that depends on the open source framework :P.<br>
<br>Ted<br> <br><br><br><br><div class="gmail_quote">On Tue, May 31, 2011 at 8:42 AM, Michael P. Gerlek <span dir="ltr">&lt;<a href="mailto:mpg@flaxen.com">mpg@flaxen.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div link="blue" vlink="purple" lang="EN-US"><div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">For a year now, I have had a dream of making a really slick DirectX-based 3D viewing engine for geo applications.  The work I’ve done in the past, and the work you’re doing now, is all stuff that the DirectX “experts” have done a million times and we are just reinventing their wheel.  Since I do mostly lidar these days, I’d love to make a solid, canonical open source library for 3D, but I’ve just not had the time/funding for it yet…</span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">-mpg</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:dotnet-bounces@lists.osgeo.org" target="_blank">dotnet-bounces@lists.osgeo.org</a> [mailto:<a href="mailto:dotnet-bounces@lists.osgeo.org" target="_blank">dotnet-bounces@lists.osgeo.org</a>] <b>On Behalf Of </b>Carsten Troelsgaard<br>
<b>Sent:</b> Monday, May 30, 2011 1:45 PM<br><b>To:</b> <a href="mailto:dotnet@lists.osgeo.org" target="_blank">dotnet@lists.osgeo.org</a><br><b>Subject:</b> [DotNet-OSGeo] RE: 3D display</span></p></div></div><p class="MsoNormal">
 </p><p class="MsoNormal"><span style="font-size:10.0pt"> <br>Hi Michael <br>Thanks for the informative response.<br> <br>&gt; 3D, but it really depends on what you need to do. Simple rendering/viewing?<br> <br>Yes, I think that it comes down to this. Making a crude topography appear on the screen is a good start for getting to work on a lot of topics that relates to the topography. I admit that I&#39;m hooked on delicious appearances, But .. as for transferring data through the net, vectors as in a topologic grid, passes a lot of info pr bit compared to bitmap image data. The abillity to interact with it as a viewer (flyby and such) makes the perception of the topological data unsurpasable by other media. <br>
As a geologist of education, I have a watchfull eye on the posibillities of displaying subsurface geology, but I would probably run short of proper data to use. (If I should get involved in bitmap-texturing it would be in the context of conveying subsurface geological visual presentations - but it has a low priority for now)   <br>
<br>&gt; Custom display controls? Integration with other geo tools and libraries?<br>&gt; <br>&gt; You have a few options for doing your own 3D display on Windows, and again<br>&gt; it depends on what your needs are:<br>&gt; <br>
&gt; * DirectX / D3D<br>&gt; <br>&gt; - DirectX/D3D is great, but is doesn’t have .NET bindings, so you have<br>&gt; to code the engine in C++ and use interop from C#<br><br>I use the Visual Studio Express. It has a C++ IDE. Yes .. I would still miss DirectX3D in that editor. I think that I tried to do an integration of this editor with something referred to as the &quot;Windows SDK&quot;. .. it usually leads to a plain new reinstall of the Express tools .. The MSDN library on the Windows SDK has all the stuff about DirectX3D that I spent a little year of learning and would like to stick to becourse of that. Leaving the net-framework may mean that I&#39;ll have to learn how to deploy ... so far I&#39;ve made small tools that produces one single .exe that simply works when copied from the pile of files that the Express IDE produces. <br>
 <br>&gt; - SlimDX is a really nice open source C# API that sits on top of the<br>&gt; DirectX C++ API, so using SlimDX you can skip the interop and code directly<br>&gt; in C#<br><br>Either way I do it, I&#39;ll have to come to terms with the fact, that I won&#39;t get anywhere without dependancies .. being it directX3D, Xna or OpenGL. <br>
 <br>&gt; - if you want to use WPF with DirectX underneath, you can use SlimDX as<br>&gt; well, although it takes some work to get the D3DImage class to behave (my<br>&gt; own SlimDXControl package is one solution for this problem)<br>
&gt; <br>&gt; * WPF or Silverlight<br>&gt; <br>&gt; - this would be very appealing, but you can&#39;t represent points directly,<br>&gt; only polygons, so if you want to do raw point clouds this isn&#39;t an option;<br>&gt; also, if you&#39;re trying to do tens of thousands of vertices, it will start to<br>
&gt; slow down<br>&gt; <br>&gt; - the latest release of Silverlight has started to add 3D primitives, but<br>&gt; again you can&#39;t do points and you often can&#39;t scale into thousands of<br>&gt; objects<br>&gt; <br>&gt; * XNA<br>
&gt; <br>&gt; - I know the least about this option; XNA is really designed as a game<br>&gt; API, and my quick look a couple years ago made me stay away because I didn&#39;t<br>&gt; have either the raw power of using DirectX directly or the flexibility of<br>
&gt; actual UI framework like WPF/Silverlight<br>&gt; <br>&gt; * OpenGL<br>&gt; <br>&gt; - powerful and low-level, like DirectX, but also lacking a native C# API<br>&gt; <br>&gt; - there are some C# bindings libraries out there, but I&#39;ve no experience<br>
&gt; with them<br>&gt; <br>&gt; <br>&gt; So, it comes down to these questions:<br>&gt; <br>&gt; - do you want to program in C++, C#, or a mix?<br> <br>I have an idea that I can make a &#39;lean an mean&#39; C++ form as a basis, but I&#39;m not done on pondering about the slow-down. I can display 700*700 vertices with an annoying slow performance; and 800*800 will not be accepted. I think that I use the &#39;fixed pipeline&#39; as I cannot make the code for multiple vertex-lists work. The vertices are turned into triangles .. that would be 100.000 triangles .. far less than I anticipated though it&#39;s plenty enough to have a decent look. There are different approaches to deal with these issues. <br>
 <br><a href="http://cid-382e99b169b58267.photos.live.com/self.aspx/Billeder/ng%5E_2.jpg" target="_blank">http://cid-382e99b169b58267.photos.live.com/self.aspx/Billeder/ng%5E_2.jpg</a><br> <br>I&#39;m getting the hang of C#. There&#39;s no intelli-sense so I have all the reason I need to be slow. The coding that lies behind the image above uses the parts of DirectX3D that I know .. most of the Xna stuff is one big haystack that hangs together, so it&#39;s been difficult to sort the subset out, but it&#39;s been much like making a form in C# with a different sort of code in the Paint-event (it IS a C# form).   <br>
<br>&gt; - do you want a low-level library which supports points like<br>&gt; DirectX/OpenGL, or do you want a higher level polygonal framowork like WPF?<br>&gt; - do you want to jus trun on a Windows desktop, or do you want to be able<br>
&gt; to port your engine to Windows Phone, Linux, etc?<br><br>There won&#39;t be any WPF and I prefer a proper screen for display, so desktop it is. I had some issues with Silverlight, so it&#39;s out too.<br> <br>Michael, I don&#39;t hope that I have abused your attention.<br>
 <br>Carsten</span></p></div></div></div><br>_______________________________________________<br>
DotNet mailing list<br>
<a href="mailto:DotNet@lists.osgeo.org">DotNet@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/dotnet" target="_blank">http://lists.osgeo.org/mailman/listinfo/dotnet</a><br>
<br></blockquote></div><br>