Eu tenho um renderizador personalizado que precisa renderizar geometria modificada. Todos os recursos de entrada são recebidos através dos IFeatureCursor
elementos as polygon. (Isso é semelhante a este exemplo , embora eu não esteja renderizando pontos.)
Eu posso renderizar polígonos, linhas e pontos facilmente, passando a nova geometria IFeatureDraw.Draw
ou chamando IDisplay.DrawPolygon
/ IDisplay.DrawPoint
/ etc.
No entanto, IDisplay
não fornece um mecanismo para desenhar um multipatch e transmiti-lo como geometria para IFeatureDraw.Draw
resultar em nada desenhado na tela.
Existe uma maneira de "desenhar" diretamente um elemento multipatch (preferencialmente com texturização) dentro desse método?
arcgis-10.0
arcobjects
arcscene
Reed Copsey
fonte
fonte
Respostas:
Como Craig diz, o OpenGL é o caminho a seguir para o 3D.
Consulte Criando um aplicativo ArcGIS Engine com C-Sharp e OpenGL . As versões anteriores do ArcGIS Explorer também suportavam chamadas OpenGL , mas na última vez que verifiquei, o Esri não é mais compatível.
Não sei por que eles fizeram isso - o desenho do OpenGL realmente ajudou a diferenciar o AGX do Google Earth.
Atualizar
Mesmo que o seu plugin retorne multipatches corretamente, não acho que o ArcObjects ofereça métodos para suportar o desenho de multipatches com chamadas OpenGL. Provavelmente seria mais fácil usar apenas o formato nativo (ignorar o plug-in em outras palavras). Eu nunca o usei, mas aqui está um script que mostra como usar o OpenGL com ArcScene .
fonte
A exibição 2D (IDisplay) não oferece suporte para desenhar multipatches diretamente. Você precisará encobri-las em pegadas (consulte IMultipatch :: XYFootprint para saber como extrair a pegada). Se você deseja uma renderização 2D das texturas de várias patches, precisará criar uma imagem a partir de uma projeção 2D da multipatch e desenhá-la.
Para o 3D, você deve poder retornar vários pacotes múltiplos no cursor e isso funcionará, mas honestamente, a maioria das pessoas implementa uma camada personalizada para o globo e faz seu próprio trabalho no OpenGL.
fonte