網上有很多關于pos機業務對象,chai 3D 之網格對象的知識,也有很多人為大家解答關于pos機業務對象的問題,今天pos機之家(www.www690aa.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機業務對象
pos機業務對象
推薦:將 NSDT 編輯器 加入你的3D開發工具鏈
介紹網格對象是由三角形和頂點組成的形狀
\u2003\u2003在 CHAI3D 中,多邊形網格是定義多面體對象形狀的頂點和三角形的集合。
\u2003\u2003頂點是一個位置以及其他信息,例如顏色、法線矢量和紋理坐標。由直線連接的兩個頂點成為一條邊。三個頂點通過三條邊相互連接,定義一個三角形,這是歐幾里得空間中最簡單的多邊形。
\u2003\u2003網格對象可以平移、旋轉或調整大小,并具有分配給它們的材質和紋理屬性。 以下代碼演示如何創建由 4 個頂點和 2 個三角形組成的帶紋理的正方形。
using namespace chai3d;// create a meshobject = new cMesh();// create a texture mapobject->m_texture = cTexture2d::create();// load a texture Fileobject->m_texture->loadFromFile("myTexture.jpg");// enable texture mappingobject1->setUseTexture(true);// set material to whiteobject1->m_material->setWhite();// create verticesint vertex0 = object0->newVertex();int vertex1 = object0->newVertex();int vertex2 = object0->newVertex();int vertex3 = object0->newVertex();// set position, surface normal, and texture coordinate for vertex 0object0->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 1object0->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 2object0->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 3object0->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 IDsobject0->m_triangles->newTriangle(vertex0, vertex1, vertex2);object0->m_triangles->newTriangle(vertex0, vertex2, vertex3);
渲染選項材質\u2003\u2003材料屬性定義表面如何反射光線。他們通過定義顏色值來實現這一點,其方式與燈光大致相同。材質具有漫射(直射)光、環境(散射)光和鏡面反射(反射)光的顏色值,但這些值定義了光的分量如何從材質表面反射。更多信息可以在有關材料的部分找到。
\u2003\u2003材質屬性可以啟用或禁用,并且需要在世界中至少使用一個光源才能使對象可見。
using namespace chai3d;// create a meshcMesh* mesh = new cMesh();// add mesh to worldworld->addChild(mesh);// build mesh using a cylinder primitivecCreatePipe(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 propertycylinder->setUseMaterial(true);// (1) set material by simply assigning a color namemesh->m_material->setBlueCornflower();// (2) or set material by assigning a color values for each componentmesh->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);
頂點顏色\u2003\u2003可以為網格的每個頂點指定不同的顏色值。如果三角形的三個頂點共享不同的顏色,則三角形上任何點的顏色都是通過三種頂點顏色的插值來計算的。
三角形和頂點顏色
\u2003\u2003如果啟用了材料屬性,頂點顏色將與材料顏色組合在一起。通常將材質設置為白色并為不同的頂點分配顏色以產生所需的光暈。如果禁用材質屬性,則忽略所有光源,并使用純頂點顏色來渲染對象。
using namespace chai3d;// create a meshcMesh* mesh = new cMesh();// add mesh to worldworld->addChild(mesh);// create three new verticesint vertex0 = mesh->newVertex();int vertex1 = mesh->newVertex();int vertex2 = mesh->newVertex();// set position of each vertexmesh->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 vertexcColorf 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 verticesmesh->newTriangle(vertex0, vertex1, vertex2);// enable vertex colorsmesh->setUseVertexColors(true);// compute surface normalsmesh->computeAllNormals();
紋理映射紋理映射
\u2003\u2003紋理貼圖將應用(映射)到形狀或多邊形的表面。此過程類似于將圖案紙應用于純白框。多邊形中的每個頂點都通過顯式分配或過程定義分配一個紋理坐標(在 2d 情況下也稱為 UV 坐標)。然后,在多邊形的表面插值圖像采樣位置,以生成視覺結果,該結果似乎比使用有限數量的多邊形可以實現的更豐富。
\u2003\u2003要了解如何在 CHAI3D 中創建紋理,請參閱本頁頂部的第一個示例。
線框圖\u2003\u2003三角形可以在實心或線模式下渲染。
(左)固體模式。(右)線框模式。
using namespace chai3d;// enable wireframe rendering modemesh->setWireMode(true);// enable solid rendering modemesh->setWireMode(false);
邊緣\u2003\u2003要同時渲染邊和三角形,CHAI3D 提供了顯示三角形的選項,并覆蓋根據相鄰三角形之間所需的最小角度選擇的邊子集。
(左)實心和邊緣。(右)僅邊緣。
using namespace chai3d;// compute all edges for which adjacent triangles have more than 40 degrees anglemesh->computeAllEdges(40);// set line width="360px",height="auto" />
cColorf color;color.setBlack();mesh->setEdgeProperties(1, color);// (1) enable surfaces and edgesmesh->setShowTriangles(true);mesh->setShowEdges(true);// (2) enable edges onlymesh->setShowTriangles(false);mesh->setShowEdges(true);面部剔除\u2003\u2003背面剔除確定網格對象的三角形是否可見。這是圖形管道中的一個步驟,用于測試三角形中的頂點在投影到屏幕上時是否按順時針順序顯示。
using namespace chai3d;
// enable cullingobject->setUseCulling(true);
\u2003\u2003如果啟用了面部剔除,但投影在屏幕上的多邊形具有逆時針纏繞,則它已旋轉為背離相機,不會被繪制。
\u2003\u2003該過程通過減少程序繪制的多邊形數量,使渲染對象更快、更高效。例如,在城市街道場景中,通常不需要在建筑物背對攝影機的側面繪制多邊形;它們被面向相機的側面完全遮擋。
\u2003\u2003通常,如果背面剔除僅包含封閉和不透明的幾何體,則可以假定在渲染場景中不會產生可見的偽影。在包含透明多邊形的場景中,通過 Alpha 合成過程,后向多邊形可能會變得可見。
透明度、半透明性和混合渲染相機的半透明鏡頭
\u2003\u2003透明的物理材質顯示其后面的對象未被遮擋,并且不會從其表面反射光線。透明玻璃是一種近乎透明的材料。雖然玻璃允許大多數光線不受遮擋地通過,但實際上它也反射了一些光。完全透明的材料是完全看不見的。
\u2003\u2003半透明物理材質顯示其后面的對象,但這些對象被半透明材質遮擋。此外,半透明材質會反射照射到它的一些光線,使材料可見。半透明材料的物理示例包括透明布料、薄塑料和煙熏玻璃。
\u2003\u2003透明和半透明通常是同義詞。既不透明也不半透明的材料是不透明的。
\u2003\u2003混合是OpenGL的機制,用于將幀緩沖中已有的顏色與傳入基元的顏色組合在一起。然后,這種組合的結果將存儲回幀緩沖器中。混合經常用于模擬半透明的物理材質。一個例子是渲染汽車的煙熏玻璃擋風玻璃。駕駛員和內飾仍然可見,但它們被煙熏玻璃的深色所掩蓋。
表面法線渲染網格的頂點法線
\u2003\u2003在 CHAI3D 中啟用照明時,法線矢量用于確定在指定頂點或表面上接收的光量。如果尚未定義曲面法線,則可以通過取該三角形兩條邊的向量叉積來計算每個三角形的法線。 出于調試目的,可以使用以下調用顯示曲面法線:
using namespace chai3d;// compute all surface normalsmesh->computeAllNormals();// set normal properties for displaycColorf color;color.setOrangeTomato();mesh->setNormalsProperties(0.01, color);// display surface normalsmesh->setShowNormals(true);
多網格對象介紹\u2003\u2003由于網格對象每個對象僅包含一個材質和紋理屬性,因此創建使用材質和紋理集合的網格需要使用稱為 cMultiMesh 的不同類,該類將網格列表連接在一起。通過在單獨的網格對象中根據三角形的材質和紋理屬性來組織三角形,可以有效地構建和渲染具有豐富屬性集的復雜對象。
using namespace chai3d;// create a multi mesh objectcMultiMesh* multiMesh = new cMultiMesh();// add multi mesh object to worldworld->addChild(multiMesh);// create a first meshcMesh* mesh1 = multiMesh->newMesh();// create a second meshcMesh* mesh2 = multiMesh->newMesh();
文件支持\u2003\u2003CHAI3D 支持 3DS、OBJ 和 SLT 文件格式來導入或導出模型。如果您希望導入不同格式的文件,可以使用Blender或Visual Enterprise Author(以前稱為Deep Exploration)等應用程序來編輯文件并將其轉換為所需的格式。
using namespace chai3d;
// load 3DS model filemultiMesh->loadFromFile("myModel.3ds");// load OBJ model filemultiMesh->loadFromFile("myModel.obj");// load STL model filemultiMesh->loadFromFile("myModel.stl");
// save model to 3DS filemultiMesh->saveToFile("myModel.3ds");// save model to OBJ filemultiMesh->saveToFile("myModel.obj");// save model to STL filemultiMesh->saveToFile("myModel.stl");
碰撞檢測\u2003\u2003碰撞檢測器用于計算射線與組成網格(或多網格)的任何三角形之間的交點。為了使此操作快速進行,CHAI3D 使用邊界體積層次結構或 BVH。BVH 是一組幾何對象上的樹結構。所有幾何對象都包裹在構成樹的葉節點的邊界體積中。然后將這些節點分組為小集合,并包含在較大的邊界體積中。反過來,這些也以遞歸方式分組并封閉在其他較大的邊界體積中,最終導致樹結構在樹的頂部具有單個邊界體積。邊界體積層次結構用于有效地支持對幾何對象集的多項操作,例如在觸覺交互計算、光線追蹤或鼠標選擇的碰撞檢測中。
軸對齊邊界體積層次結構
\u2003\u2003在 CHAI3D 中,必須在定義三角形后生成邊界體積層次結構。如果修改了三角形或移動了頂點,則必須再次計算層次結構。更新碰撞樹時,正確包含世界上使用的最大觸覺點的半徑非常重要。此信息用于創建足夠大的包絡,以檢測與半徑小于或等于定義閾值的接觸點的任何交互。
using namespace chai3d;// create axis aligned bounding volume hierarchymultiMesh->createAABBCollisionDetector(toolRadius);
觸覺效果網格對象的觸覺渲染
\u2003\u2003為了觸覺渲染網格對象,CHAI3D使用由Ruspini和Khatib開發的虛擬“手指代理”算法,類似于Zilles和Salisbury提出的“上帝對象”。虛擬代理是替代虛擬環境中物理手指或探測器的代表性對象。
Ruspini和Khatib的手指代理算法
\u2003\u2003上圖說明了虛擬代理的運動,因為觸覺設備的位置發生了變化。代理的運動試圖始終朝著目標移動。當暢通無阻時,代理直接向目標移動。當代理遇到障礙物時,無法直接移動,但代理仍可以通過沿一個或多個約束曲面移動來縮短到目標的距離。選擇運動以局部最小化到目標的距離。當代理無法減少其與目標的距離時,它將停止在本地最小配置處。力是通過對觸覺設備和代理位置之間的虛擬彈簧進行建模來計算的。彈簧的剛度在材料屬性中定義。
using namespace chai3d;// create collision detectormesh->createAABBCollisionDetector(toolRadius);// set haptic propertiesmesh->m_material->setStiffness(1000);mesh->m_material->setStaticFriction(0.3);mesh->m_material->setDynamicFriction(0.4);
\u2003\u2003還可以通過材料屬性等級激活和調整其他觸覺效果。觸覺效果使用勢場算法,任何通用形狀對象也支持這些算法。請注意,網格對象目前不支持磁性效果。
using namespace chai3d;// create a haptic stick-slip effectmesh->createEffectStickSlip();// set haptic propertiesmesh->m_material->setStickSlipForceMax(5.0);mesh->m_material->setStickSlipStiffness(1000);
3D建模學習工作室 翻譯整理,轉載請標明出處!
以上就是關于pos機業務對象,chai 3D 之網格對象的知識,后面我們會繼續為大家整理關于pos機業務對象的知識,希望能夠幫助到大家!
