HOOPS基础培训课程2
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用例如:HC_Insert_Polygon
HPoint points[5]; points[0].Set(10,10,0); points[1].Set(-10,10,0); points[2].Set(-10,-10,0); points[3].Set(10,-10,0); points[4].Set(10,10,0); HC_Insert_Polygon(5,points);
fRad[0] = 5; fRad[1] = 5; fRad[2] = 5; fRad[3] = 8; fRad[4] = 8; fRad[5] = 0;
HC_Insert_PolyCylinder(6,posArray,6,fRad,〞first〞);
HC_Insert_Cutting_Plane
wenku.baidu.com
HOOPS ➢Marker ➢Polyline ➢Edge ➢Face ➢SHELL
ACIS ➢Vertex ➢Edge ➢Face ➢Shell ➢BODY
HOOPS几何图元的创立
创立 void HC_Insert_XXX(XXX) 在创立的时候得到ID键值 HC_KEY_KInsert_XXX(XXX) 保存模式并不依赖于序列数目
HC_Insert_Mesh
插入网格
• void HC_Insert_Mesh (int rows, int columns, const HC_POINT * points)
• rows:行数 • columns:列数 • points:顶点坐标
很容易构造三角带因为拓扑是固定的
使用例如:HC_Insert_Mesh
delete []posMesh;
Shell
具有连接信息的多边形组合 可以退化 点不能重合 可以有孔 边的号码可以使用负数。例如〔-3,7,4,…〕 面表的排列是非常重要的 渲染效果 性能
HC_Insert_Shell
插入Shell
• void HC_Insert_Shell (int pcount, const HC_POINT * points, int flist_length, const int *face_list)
• pcount:顶点数目 • points:顶点坐标 • flist_length:面列表的数目 • face_list:面列表
face_list是构成多边形的顶点序号整数数组
• 构成多边形的顶点个数在多边形点序号之前
三角形:3 举行:4
• 在顶点个数之后列出了组成多边形点序号
使用例如:HC_Insert_Shell
HC_Insert_PolyCylinder
插入多义圆柱体 void Insert_PolyCylinder( int p_count
const HC_POINT *pts, int r_count, const float *radii, const char *capping) p_count:中心点的数目 pts:中心点的坐标 r_count:半径的数目 radii:半径列表 capping:字符串指定哪一局部要封闭
练习5:插入Mesh和Shell
Mesh和Shell
Mesh和Shell是高层次几何
可以设置一些特殊的渲染效果
Phong和gouraud
性能优化
分解成三角片并连接它们,然后建立适宜的三角带
建立三角带是在后处理〔在插入以后的第一次更形〕中进 行的
共用顶点以减少内存 v长0 的三角v2带=更好v4的性能
插入切平面 void Insert_Cutting_Plane(double a, double b, double c, double d);
a,b,c,d: 平面方程ax+by+cz+d=0中的参数值,定义了 一个平面
所有几何沿切平面法向端的局部被切除 关闭切平面的可见性属性将不执行切除操作 可以设置局部切平面—存在于一个段 切平面几何〔R14〕
v0
v2
v4
v3
v5
v1
三角带表示
v1
v3
v5
最终结果
Mesh和Shell
拥有边〔edge〕和面〔face〕 每一个顶点处都有一个标记〔marker〕 边可以根据在外表上的位置来区分 三角网格的外边界边 三角网格的侧面轮廓边 四边形网格〔去除对角线后〕 可以对面、边和标记设置不同的属性
根本图元
➢markers ➢lines ➢polylines ➢images ➢text ➢cylinders
➢circular arcs ➢elliptical arcs ➢NURB curves ➢NURB surfaces
HOOPS几何图元
根本图元
➢grids ➢meshes ➢shells ➢cylinders ➢polygons ➢polucylinder
4,1,5,6,2, 4,5,4,7,6, 4,4,0,3,7, 4,3,2,6,7, 4,0,4,5,1}; HC_Insert_Shell(8,points,30,face_list);
Text
根据参考点位置和字符串来插入文本 使用键值来操作文本
• HC_Edit_Text • HC_Move_Text • HC_Scroll_Text
HC_Insert_Polygon
插入polygon void Insert_Polygon(int count,const HC_POINT *
point) count:顶点数目 HC_POINT:顶点坐标 两局部组成 Edge:连接顶点的多义线 Face:由边所围成的区域 法线依赖于点的排列次序 用于背平面剔除
HOOPS根底培训课程安排
HOOPS简介
1
HOOPS 3dGS基础
1
HOOPS 3dGS API
1
HOOPS MVO
1
几何、属性、坐标
2
几何体的编辑
2
选择与高亮
3
大模型显示
3
动画
3
HOOPS Stream
3
HOOPS/ACIS Bridge
3
HOOPS几何
相应的计算函数 HOOPS几何图元 与建模内核中的定义不同 HOOPS几何图元的创立 HC_Insert_Polyline HC_Insert_Polygon HC_Insert_Cutting_Plane 练习4:HOOPS几何图元的创立
相应的计算函数
3D坐标
• HPoint (float X, float Y, float Z=0.0f)
• void Set (float X, float Y, float Z=0.0f)
• void Add (float X, float Y, float Z=0.0f)
• bool Equal (HPoint *p) const
Light
3种类型的光照
• 平行光源 • 发散点光源 • 聚光源
光照的有效区域是包含它的窗口
• 对父类几何体是有效的
使用HC_Set_Color()来调整光的强度 使用HC_Move_XXX_Light()来调整光的位置 当关闭光的可见性时就不进行光照计算
• 在特定的段中不进行相应几何光照的计算
计算函数的主坐标
• HC_Compute_Cross_Product
//叉乘
• HC_Compute_Dot_Product
//点乘
• HC_Compute_Normalized_Vector //单位化
可以指定HOOPS坐标左右手系
• HC_Set_Handedness
Z Y
X
HOOPS几何图元
(-1,1,0)
(1,1,0)
(0,0,0)
(-1,-1,0)
(1,-1,0)
HOOPS几何图元〔续〕
Mesh和Shell
• HC_Insert_Mesh • HC_Insert_Shell
Text
• HC_Insert_Text
Light
• HC_Insert_Distant_Light • HC_Insert_Local_Light • HC_Insert_Spot_Light
HC_Insert_Distant_Light
插入平行光源〔无穷远处〕 void HC_Insert_Distant_Light(double
HC_Insert_Polyline
插入Polyline
• void HC_Insert_Polyline(int count,const HC_POINT * point) • count:顶点数目 • HC_POINT:定点坐标
HPoint points[5]; points[0].Set(10,10,0); points[1].Set(-10,10,0); points[2].Set(-10,-10,0); points[3].Set(10,-10,0); points[4].Set(10,10,0); HC_Insert_Polyline(5,points);
HC_Insert_Cutting_Plane(0,0,1,-0.001f);
练习4:切平面对象的显示
在练习3的工程中增加一个切平面
• 增加一个命令:菜单-[Test][Cutting Plane]
• 在view类中实现
所需的几何
• 为切平面的框架绘制一条多义线 • 为切平面的面绘制多边形 • 绘制一个箭头来控制切平面的方向 • 插入切平面
HPoint* posMesh = new HPoint[10];
int i,j,k; k=0; for(i=0,i<=1;i++) {
for(j=0;j<5;j++) {
posMesh[k].x = (float)i*0.1+1; posMesh[k].y = (float)j*0.1+1; posMesh[k].z = 0.0f; k++; } } HC_Insert_Mesh(2,5,posMesh);
HPoint points[8]; points[0].Set(-0.5f,-0.5f,-0.5f); points[1].Set(-0.5f,-0.5f,-0.5f); points[2].Set(-0.5f,-0.5f,-0.5f); points[3].Set(-0.5f,-0.5f,-0.5f); points[4].Set(-0.5f,-0.5f,-0.5f); points[5].Set(-0.5f,-0.5f,-0.5f); points[6].Set(-0.5f,-0.5f,-0.5f); points[7].Set(-0.5f,-0.5f,-0.5f); int face_list[] = {4,0,1,2,3,
➢circles ➢ellipses ➢circular chords ➢circular wedge ➢NURB curves ➢BURB surfaces
HOOPS几何图元
特定的图元
• cutting planes • lights
与建模内核中的定义不同
即使在术语方面是相同的,但是表达的意思是不同的 在HOOPS中拓扑意味着多边形之间的关系 在HOOPS中使用外表几何来表示3D形体 在HOOPS中壳是指多外表几何 在HOOPS中边/面是所属外表几何的一个元素
计算出所给文本轮廓的多面体描述
• HC_Compute_Text_Outline
计算一个文本的场景大小
• HC_Compute_Text_Extent
HC_Insert_Text
文本的插入 void HC_Insert_Text(double x,
double y, double z, const char* text) x,y,z:文本的坐标 string:文本字符串 可以作为块的形式来插入文本 在文本字符串中可以使用换行符〞\n〞
适合建议一个用圆进行扫描生成的实体 管道
使用例如:HC_Insert_PolyCylinder
HPoint posArray[6]; float fRad[6]; posArray[0].Set(0,0,0); posArray[1].Set(0,0,10); posArray[2] = posArray[1]; posArray[3] = posArray[1]; posArray[4] = posArray[1]; posArray[5].Set(0,0,15);