范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

chai3D之网格对象

  推荐:将 NSDT 编辑器 加入你的3D开发工具链介绍
  网格对象是由三角形和顶点组成的形状
    在 CHAI3D 中,多边形网格是定义多面体对象形状的顶点和三角形的集合。
    顶点是一个位置以及其他信息,例如颜色、法线矢量和纹理坐标。由直线连接的两个顶点成为一条边。三个顶点通过三条边相互连接,定义一个三角形,这是欧几里得空间中最简单的多边形。
    网格对象可以平移、旋转或调整大小,并具有分配给它们的材质和纹理属性。 以下代码演示如何创建由 4 个顶点和 2 个三角形组成的带纹 理的正方形。
  using namespace chai3d;
  // create a mesh
  object = new cMesh();
  // create a texture map
  object->m_texture = cTexture2d::create();
  // load a texture file
  object->m_texture->loadFromFile("myTexture.jpg");
  // enable texture mapping
  object1->setUseTexture(true);
  // set material to white
  object1->m_material->setWhite();
  // create vertices
  int vertex0 = object0->newVertex();
  int vertex1 = object0->newVertex();
  int vertex2 = object0->newVertex();
  int vertex3 = object0->newVertex();
  // set position, surface normal, and texture coordinate for vertex 0
  object0->m_vertices->setLocalPos(vertex0,-0.1,-0.1, 0.0);
  object0->m_vertices->setNormal(vertex0, 0.0, 0.0, 1.0);
  object0->m_vertices->setTexCoord(vertex0, 0.0, 0.0);
  // set position, surface normal, and texture coordinate for vertex 1
  object0->m_vertices->setLocalPos(vertex1, 0.1,-0.1, 0.0);
  object0->m_vertices->setNormal(vertex1, 0.0, 0.0, 1.0);
  object0->m_vertices->setTexCoord(vertex1, 1.0, 0.0);
  // set position, surface normal, and texture coordinate for vertex 2
  object0->m_vertices->setLocalPos(vertex2, 0.1, 0.1, 0.0);
  object0->m_vertices->setNormal(vertex2, 0.0, 0.0, 1.0);
  object0->m_vertices->setTexCoord(vertex2, 1.0, 1.0);
  // set position, surface normal, and texture coordinate for vertex 3
  object0->m_vertices->setLocalPos(vertex3,-0.1, 0.1, 0.0);
  object0->m_vertices->setNormal(vertex3, 0.0, 0.0, 1.0);
  object0->m_vertices->setTexCoord(vertex3, 0.0, 1.0);
  // create two triangles by assigning their vertex IDs
  object0->m_triangles->newTriangle(vertex0, vertex1, vertex2);
  object0->m_triangles->newTriangle(vertex0, vertex2, ver tex3); 渲染选项材质
    材料属性定义表面如何反射光线。他们通过定义颜色值来实现这一点,其方式与灯光大致相同。材质具有漫射(直射)光、环境(散射)光和镜面反射(反射)光的颜色值,但这些值定义了光的分量如何从材质表面反射。更多信息可以在有关材料的部分找到。
    材质属性可以启用或禁用,并且需要在世界中至少使用一个光源才能使对象可见。
  using namespace chai3d;
  // create a mesh
  cMesh* mesh = new cMesh();
  // add mesh to world
  world->addChild(mesh);
  // build mesh using a cylinder primitive
  cCreatePipe(mesh,
  0.15,
  0.05,
  0.06,
  32,
  1,
  cVector3d(-0.05,-0.20, 0.0),
  cMatrix3d(cDegToRad(0), cDegToRad(0), cDegToRad(170), C_EULER_ORDER_XYZ)
  );
  // enable material property
  cylinder->setUseMaterial(true);
  // (1) set material by simply assigning a color name
  mesh->m_material->setBlueCornflower();
  // (2) or set material by assigning a color values for each component
  mesh->m_material->m_ambient.set(0.2, 0.1, 0.1);
  mesh->m_material->m_diffuse.set(0.6, 0.3, 0.3);
  mesh->m_material->m_specular.set(1.0, 1.0, 1.0);
  mesh->m_material->setShininess(10); 顶点颜色
    可以为网格的每个顶点指定不同的颜色值。如果三角形的三个顶点共享不同的颜色,则三角形上任何点的颜色都是通过三种顶点颜色的插值来计算的。
  三角形和顶点颜色
    如果启用了材料属性,顶点颜色将与材料颜色组合在一起。通常将材质设置为白色并为不同的顶点分配颜色以产生所需的光晕。如果禁用材质属性,则忽略所有光源,并使用纯顶点颜色 来渲染对象。
  using namespace chai3d;
  // create a mesh
  cMesh* mesh = new cMesh();
  // add mesh to world
  world->addChild(mesh);
  // create three new vertices
  int vertex0 = mesh->newVertex();
  int vertex1 = mesh->newVertex();
  int vertex2 = mesh->newVertex();
  // set position of each vertex
  mesh->m_vertices->setLocalPos(vertex0, 0.0, 0.0, 0.0);
  mesh->m_vertices->setLocalPos(vertex1, 0.0, 1.0, 0.0);
  mesh->m_vertices->setLocalPos(vertex2, 1.0, 1.0, 0.0);
  // assign color value to each vertex
  cColorf color(1.0, 0.2, 0.2);
  mesh->m_vertices->setColor(vertex0, color);
  mesh->m_vertices->setColor(vertex1, color);
  mesh->m_vertices->setColor(vertex2, color);
  // create new triangle from vertices
  mesh->newTriangle(vertex0, vertex1, vertex2);
  // enable vertex colors
  mesh->setUseVertexColors(true);
  // compute surface normals
  mesh->computeAllNorm als(); 纹理映射
  纹理映射
    纹理贴图将应用(映射)到形状或多边形的表面。此过程类似于将图案纸应用于纯白框。多边形中的每个顶点都通过显式分配或过程定义分配一个纹理坐标(在 2d 情况下也称为 UV 坐标)。然后,在多边形的表面插值图像采样位置,以生成视觉结果,该结果似乎比使用有限数量的多边形可以实现的更丰富。
    要了解如何在 CHAI3D 中创建纹理,请参阅本页顶部的第一个示例。 线框图
    三角形可以在实心或线模式下渲染。
  (左)固体模式。(右)线框模式。
  using namespace chai3d;
  // enable wireframe rendering mode
  mesh->setWireMode(true);
  // enable solid rendering mode
  mesh->setWireMode(false); 边缘
    要同时渲染边和三角形,CHAI3D 提供了显示三角形的选项,并覆盖根据相邻三角形之间所需的最小角度选择的边子集。
  (左)实心和边缘。(右)仅边缘。
  using namespace chai3d;
  // compute all edges for which adjacent triangles have more than 40 degrees angle
  mesh->computeAllEdges(40);
  // set line width of edges and color
  cColorf color;
  color.setBlack();
  mesh->setEdgeProperties(1, color);
  // (1) enable surfaces and edges
  mesh->setShowTriangles(true);
  mesh->setShowEdges(true);
  // (2) enable edges only
  mesh->setShowTriangles(false);
  mesh->setShowEdges(true); 面部剔除
    背面剔除确定网格对象的三角形是否可见。这是图形管道中的一个步骤,用于测试三角形中的顶点在投影到屏幕上时是否按顺时针顺序显示。
  using namespace chai3d;
  // enable culling
  object->setUseCulling(true);
    如果启用了面部剔除,但投影在屏幕上的多边形具有逆时针缠绕,则它已旋转为背离相机,不会被绘制。
    该过程通过减少程序绘制的多边形数量,使渲染对象更快、更高效。例如,在城市街道场景中,通常不需要在建筑物背对摄影机的侧面绘制多边形;它们被面向相机的侧面完全遮挡。
    通常,如果背面剔除仅包含封闭和不透明的几何体,则可以假定在渲染场景中不会产生可见的伪影。在包含透明多边形的场景中,通过 Alpha 合成过程,后向多边形可能会变得可见。 透明度、半透明性和混合
  渲染相机的半透明镜头
    透明的物理材质显示其后面的对象未被遮挡,并且不会从其表面反射光线。透明玻璃是一种近乎透明的材料。虽然玻璃允许大多数光线不受遮挡地通过,但实际上它也反射了一些光。完全透明的材料是完全看不见的。
    半透明物理材质显示其后面的对象,但这些对象被半透明材质遮挡。此外,半透明材质会反射照射到它的一些光线,使材料可见。半透明材料的物理示例包括透明布料、薄塑料和烟熏玻璃。
    透明和半透明通常是同义词。既不透明也不半透明的材料是不透明的。
    混合是OpenGL的机制,用于将帧缓冲中已有的颜色与传入基元的颜色组合在一起。然后,这种组合的结果将存储回帧缓冲器中。混合经常用于模拟半透明的物理材质。一个例子是渲染汽车的烟熏玻璃挡风玻璃。驾驶员和内饰仍然可见,但它们被烟熏玻璃的深色所掩盖。 表面法线
  渲染网格的顶点法线
    在 CHAI3D 中启用照明时,法线矢量用于确定在指定顶点或表面上接收的光量。如果尚未定义曲面法线,则可以通过取该三角形两条边的向量叉积来计算每个三角形的法线。 出于调试目的,可以使用以下调用显示曲面法线:
  using namespace chai3d;
  // compute all surface normals
  mesh->computeAllNormals();
  // set normal properties for display
  cColorf color;
  color.setOrangeTomato();
  mesh->setNormalsProperties(0.01, color);
  // display surface normals
  mesh->setShowNormals(true); 多网格对象介绍
    由于网格对象每个对象仅包含一个材质和纹理属性,因此创建使用材质和纹理集合的网格需要使用称为 cMultiMesh 的不同类,该类将网格列表连接在一起。通过在单独的网格对象中根据三角形的材质和纹理属性来组织三角形,可以有效地构建和渲染具有丰富属性集的复杂对象。
  using namespace chai3d;
  // create a multi mesh object
  cMultiMesh* multiMesh = new cMultiMesh();
  // add multi mesh object to world
  world->addChild(multiMesh);
  // create a first mesh
  cMesh* mesh1 = multiMesh->newMesh();
  // create a second mesh
  cMesh* mesh2 = multiMesh->newMesh(); 文件支持
    CHAI3D 支持 3DS、OBJ 和 SLT 文件格式来导入或导出模型。如果您希望导入不同格式的文件,可以使用Blender或Visual Enterprise Author(以前称为Deep Exploration)等应用程序来编辑文件并将其转换为所需的格式。
  using namespace chai3d;
  // load 3DS model file
  multiMesh->loadFromFile("myModel.3ds");
  // load OBJ model file
  multiMesh->loadFromFile("myModel.obj");
  // load STL model file
  multiMesh->loadFromFile("myModel.stl");
  // save model to 3DS file
  multiMesh->saveToFile("myModel.3ds");
  // save model to OBJ file
  multiMesh->saveToFile("myModel.obj");
  // save model to STL file
  multiMesh->saveToFile("myModel.stl"); 碰撞检测
    碰撞检测器用于计算射线与组成网格(或多网格)的任何三角形之间的交点。为了使此操作快速进行,CHAI3D 使用边界体积层次结构或 BVH。BVH 是一组几何对象上的树结构。所有几何对象都包裹在构成树的叶节点的边界体积中。然后将这些节点分组为小集合,并包含在较大的边界体积中。反过来,这些也以递归方式分组并封闭在其他较大的边界体积中,最终导致树结构在树的顶部具有单个边界体积。边界体积层次结构用于有效地支持对几何对象集的多项操作,例如在触觉交互计算、光线追踪或鼠标选择的碰撞检测中。
  轴对齐边界体积层次结构
    在 CHAI3D 中,必须在定义三角形后生成边界体积层次结构。如果修改了三角形或移动了顶点,则必须再次计算层次结构。更新碰撞树时,正确包含世界上使用的最大触觉点的半径非常重要。此信息用于创建足够大的包络,以检测与半径小于或等于定义阈值的接触点的任何交互。
  using namespace chai3d;
  // create axis aligned bounding volume hierarchy
  multiMesh->createAABBCollisionDetector(toolRadius); 触觉效果
  网格对象的触觉渲染
    为了触觉渲染网格对象,CHAI3D使用由Ruspini和Khatib开发的虚拟"手指代理"算法,类似于Zilles和Salisbury提出的"上帝对象"。虚拟代理是替代虚拟环境中物理手指或探测器的代表性对象。
  Ruspini和Khatib的手指代理算法
    上图说明了虚拟代理的运动,因为触觉设备的位置发生了变化。代理的运动试图始终朝着目标移动。当畅通无阻时,代理直接向目标移动。当代理遇到障碍物时,无法直接移动,但代理仍可以通过沿一个或多个约束曲面移动来缩短到目标的距离。选择运动以局部最小化到目标的距离。当代理无法减少其与目标的距离时,它将停止在本地最小配置处。力是通过对触觉设备和代理位置之间的虚拟弹簧进行建模来计算的。弹簧的刚度在材料属性中定义。
  using namespace chai3d;
  // create collision detector
  mesh->createAABBCollisionDetector(toolRadius);
  // set haptic properties
  mesh->m_material->setStiffness(1000);
  mesh->m_material->setStaticFriction(0.3);
  mesh->m_material->setDynamicFriction(0.4);
    还可以通过材料属性等级激活和调整其他触觉效果。触觉效果使用势场算法,任何通用形状对象也支持这些算法。请注意,网格对象目前不支持磁性效果。
  using namespace chai3d;
  // create a haptic stick-slip effect
  mesh->createEffectStickSlip();
  // set haptic properties
  mesh->m_material->setStickSlipForceMax(5.0);
  mesh->m_material->setStickSlipStiffness(1000);
  3D建模学习工作室  翻译整理,转载请标明出处!

高解析力直推平板首选,HIFIMANANANDA隐形磁体版入手体验对于爱听音乐的发烧友来说,HIFIMAN的产品相信都不会陌生,作为国内外一线音频大厂,不管是他家的耳机类产品或是便携式播放器在业界均是有口皆碑。本次测试的这款耳机ANANDA作为一医圣张仲景2味药小妙方,调理耳鸣心慌胸闷失眠头晕有效黄帝内经记载上气不足,脑为之不满,耳为之苦鸣,头为之苦倾,目为之眩。意思是说,头为诸阳之会,目视也好,耳听也好,都离不开阳气的支持基础。简单来说阳气要升发到头面上去才能耳聪目明。一明确了!幼儿园只能收取四类费用近日,湖北省发改委省教育厅省市场监管局发通知,进一步加强我省幼儿园收费管理工作。通知明年1月1日起执行。通知明确了,全省幼儿园收费项目实行省级管理,统一为保教费住宿费服务性收费和代锦州这家幼儿园想赚钱想疯了!收取年费不按月退合理吗?近日有锦州网友反映,其是一名幼儿园小朋友的家长,现在疫情防控期间,为了保护孩子的安全健康,在提前告知幼儿园整月请假不去幼儿园的情况下,幼儿园还是扣取整月园费。一个月2000元,过完原来多喝热水真的可以治病原来多喝热水不是敷衍啊大家好!我是不爱说话的小周!记录生活坚持分享点击上方关注送心送心我们一起提升自我加油来看我来看我来看我喝水的好处还是很多的,喝水能缓解我们的便秘情况,如果身体广西巴马瑶族自治县长寿村饮水揭秘广西巴马瑶族自治县是世上五个长寿村之一,在这里,百岁老人的占比居世界首位长寿村村民的长寿与当地的气候环境地理饮水饮食人文关系等都有关系,其中长寿村村民的饮用水更是极具特点巴马地区的乒超落幕,陈梦领奖台上全程黑脸,何时才能迎来属于自己的时代乒超联赛已经落下帷幕,细心的球迷会发现,世界排名第二的陈梦在领奖台上全程黑脸,一点也高兴不起来。女团决赛,陈梦丢掉关键的2分,可以说成为深圳大学输球的重要原因。陈梦也确实高兴不起来英雄铁血真汉子!葡萄牙老将佩佩手臂骨折带伤踢完比赛11日早些时候,葡萄牙足协官方宣布,球队的后防老将佩佩在对阵摩洛哥的世界杯14决赛中遭遇手臂骨折。不过在比赛中,这位素来以硬汉形象示人的后防球员并没有因此而接受治疗或者离场,而是咬合则天下无敌,分则各自为王杜兰特,810分,523次出手,每次出手1。55分东契奇,789分,543次出手,每次出手1。45分塔特姆,763分,523次出手,每次出手1。46分亚历山大,715分,478次出野球少年王牌投手棒球联盟身为一名投手,原田巧是位拥有着拔群棒球才能的少年。在初中入学时移居的山间城镇新田市,巧与接住自己全力投球的捕手永仓豪相遇了。进入新田东中学棒球部的两人,被卷入部员间的摩擦以及教师们世界杯的大变化以及带来的大不同世界杯四强已新鲜出炉,本届世界杯就剩下4场比赛了,大家支持的球队在夺冠的路上呢,还是已经打道回府了呢?这次世界杯与之前相比,有很多的变化。下面小编简要介绍一下。淘汰赛赛程1。换人名
夏天又到三伏天!入伏3汤别忘喝,清凉解暑,平安度过40天老话说热在三伏,一到夏天最关心的莫过于,今年什么时候入伏?伏天多长时间?毕竟是一年中最闷热的时候,对身体的考验极大,还是要提前做好准备的。接下来,就是2022年三伏时间表,早知道早跟着泰剧吃美食,泰版流星花园要价4千泰铢的点心你吃过没?追泰剧,除了俊男美女和引人入胜的剧情,诱人的泰国美食也是一大亮点。对于泰剧出现的美食,不仅有以你的心诠释我的爱的华人美食福建面,还有出现在待到重逢时的传统小吃忘吞糕,还有一款在泰版台媒曝夏克立黄嘉千婚变,两人即将对簿公堂,疑似争夺夏天抚养权大家还记得爸爸去哪儿第三季中的夏天吗?如今夏天的爸爸夏克立与妈妈黄嘉千传出要离婚,双方并不是和平分开,而是要对簿公堂,该消息一出,迅速引发网友热议。当年夏克立带夏天参加爸爸去哪儿时8。7万亿外资巨头来了中国基金报记者吴君又有一家外资巨头进军中国市场,基金业协会网站信息显示,威灵顿寰宇私募基金管理(上海)有限公司在今年7月1日完成备案登记,成为合格境内有限合伙人(QDLP)私募基金美国的策略流尽乌克兰最后一滴血榨干欧罗巴最后一分钱7月5日俄罗斯和欧盟一度双双大捷,俄罗斯是在军事上获得了胜利攻占了利西昌斯克市,而欧盟则是在经济上久旱逢甘霖,获得了中国的372亿美元的客机大订单。然而这份喜悦之情还没有温存太久,赵丽颖再次霸气护妹张可盈!何幸运态度反转,将万传家告上法庭最近由郑晓龙刘雪松姚远联合执导的当代农村剧幸福到万家一经开播迅速占领各大热搜榜单,即刻被观众贴上了敢拍敢演够真实的标签,而议论度最高的情节无疑是张可盈饰演的何幸运一出场便被婚闹。在餐饮业逐步复苏纽约华人餐厅长周末生意兴旺中国侨网7月6日电据美国世界日报报道,在美国纽约,今年除夕夜,中餐厅的客流还受到疫情和极寒天气影响,上座率不到往年的三分之一,全州口罩令解除后,中餐厅也仅小幅回暖,多数华人民众仍担俄罗斯一女子猝死家中,遗体被巨型猫吃掉!吃她的猫是什么来头?俄罗斯一位独居女子被其养的20只缅因猫咬死?这位俄罗斯女子是一家公司的女老板,公司的员工发现他们的老板已经很久没来上班了,而且消息全无。于是公司的员工们在商量过后决定去当地警局报警一棵绿萝七个鬼,老祖宗传下来的顺口溜,真的有道理吗绿萝萦数匝,本在草堂间。秋色寄高树,昼阴笼近山。就是在形容绿萝,它属于麒麟叶属植物,叶片一般都是心型的,叶柄非常纤细,连着大小不一的主茎,密密麻麻遍布整个空间,生机无限。绿萝的养护唐山打人事件4个被打的女子现在到底怎么了?后续来了唐山被打的4个女生,到底怎样了?你们还好吗?昨天,唐山打人事件再次,冲上了热搜后来又快速消失了。这事影响这么恶劣怎么还不尽快公开?让群众消除心中的疑虑呢?这唐山打人事件,不单只是给低层次家庭,喜欢不停讲道理,而高层次家庭,爸爸会做这5件事父爱缺席的危害,从小学就开始显现了。曾经有个纪录片揭开了问题孩子背后的隐痛。男孩从小就缺少父亲陪伴,哪怕父亲在家也只会大呼小叫。他从小就跟父亲对着干,气得父亲再也不管他。所以没有人