DirectContext3D 解析一

DirectContext3D回调

   使用DirectContext3D的外部应用程序可以从Revit对应用程序的回调中执行绘图操作。回调结构使用DirectContext3D的方式,使应用程序参与Revit的内部绘图过程的适当阶段。这个约束使得外部应用程序提交的几何图形可以以与Revit原生几何图形相同的方式绘制。对回调架构的支持是由Revit API中称为外部服务框架(ESF)的部分提供的

绘制委托功能

  ESF是一个框架,它允许Revit基于服务和服务器系统将功能委托给外部应用程序。在这种情况下,服务器是构成服务的数据或其他功能的本地提供者。当Revit请求执行服务时,ESF调用实现与服务对应的功能的服务器。外部应用程序为特定的服务创建和注册服务器DirectContext3D包含一个名为DirectContext3DService的外部服务,它与实现IDirectContext3DServer接口的服务器交互。委托给服务器的功能包括两个主要任务:

       1:通过调用DirectContext3D绘制外部图形

       2:计算外部图形的包围框

  服务器接口包含两个对应于这两个任务的回调:RenderScene()和GetBoundingBox()。图1总结了DirectContext3D回调和ESF之间的关系

  

   DirectContext3DService是一个MultiServerService,这意味着它可以同时拥有多个活动的服务器。外部应用程序的数量以及每个应用程序注册的DirectContext3D服务器的数量没有限制。每个活动服务器由Revit参与绘图过程

实现RenderScene ()

  对于绘制图形,最重要的回调函数是RenderScene()。为了实现这个回调,外部应用程序使用DirectContext3D API的主要部分来执行绘图操作。绘图过程将在下面几节中详细讨论

  外部应用程序绘制的图形可能依赖于Revit的当前状态,例如正在进行绘图的视图和视图的显示风格。因此,外部应用程序能够从DirectContext3D回调中调用DirectContext3D(和其他Revit API),完成与Revit的双向通信通道是至关重要的。特别是,DirectContext3D的DrawContext对象的角色之一是为在RenderScene()中执行的应用程序提供与渲染相关的信息。图2说明

 

 

 

DirectContext3D和图形管道在Revi

DirectContext3D是一个图形API,它公开了图形管道的底层部分。Revit在内部要使用此管道绘制图形,外部应用程序提交以顶点和索引缓冲区对编码的图形原语列表。DirectContext3D的回调将与管道的任何交互约束为与内部呈现同步

 

计算机图形学相关概念

  本节提供了一些计算机图形学背景知识,涉及外部应用程序可以使用DirectContext3D访问的渲染管道的关键方面

绘图过程概述

  为了支持不同3D场景的渲染,图形API和它所代表的绘图过程必须是通用的。由于这个原因,图形包有很多相似之处,可以在给定的情况下识别抽象绘图过程的某些典型元素API。DirectContext3D属于一类api,它从几何原语(如三角形)在屏幕上生成图形,这些原语是根据顶点的位置指定的。这些几何形状在称为光栅化的过程中转换为相应的基于像素的表示

  可以有许多参数来决定绘图过程的结果。最简单的参数是基本形状的位置和颜色。然而,图形api通常实现许多绘图操作,这些操作可以选择启用,并且其参数可以控制。例如,光栅化形状可以根据其透明度混合到输出缓冲区中,而不是覆盖目标值。还可以有与操作输出缓冲区有关的其他绘图操作,而不是初始几何形状

图形API的复杂性可以通过将支持的绘图操作组织到图形管道中来管理,其中每个阶段都可以独立控制。可选阶段,例如透明对象的混合,只有在适当的对象提交到管道中进行绘图时才能启用。在输出缓冲区中绘制对象的动作可以从设置控制整个管道状态的参数开始。虽然某些状态可能会从以前的绘图操作中保留下来,但理解是很重要的

  DirectContext3D的设计思路与许多其他用于在屏幕上绘制图形的api相同。这个API表示一个简单的管道,它接受几何形状编码作为输入,并根据管道的状态对它们进行栅格化。然而,有一个基本的区别使DirectContext3D的设计及其操作更加复杂:图形管道是在Revit内部实现的,而DirectContext3D是一个额外的接口级别,允许外部应用程序(即Revit插件)使用内部管道执行绘图操作。

posted @   garyguo66  阅读(76)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示