[11] 楔形体(Wedge)图形的生成算法

2023-11-21 04:20

本文主要是介绍[11] 楔形体(Wedge)图形的生成算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


顶点数据的生成

 

 1 bool                        YfBuildWedgeVertices
 2 (
 3     Yreal                   width, 
 4     Yreal                   length, 
 5     Yreal                   height, 
 6     YeOriginPose            originPose,  
 7     Yuint                   vertexStriding, 
 8     Yuint                   vertexPos,
 9     void*                   pVerticesBuffer
10 )
11 {
12     if (!pVerticesBuffer)
13     {
14         return false;
15     }
16 
17     Yuint numVertices  = 6;
18 
19     // 顶点赋值
20     char* vertexPtr = (char*)pVerticesBuffer + vertexPos;
21     YsVector3* curVertexPtr   = NULL;
22     Yuint nOffset = 0;
23 
24     YsVector3 vOriginOffset(-width / 2, -height / 2, -length / 2);
25     if (originPose == YE_ORIGIN_POSE_TOP)
26     {
27         vOriginOffset.y = -height;
28     }
29     else if (originPose == YE_ORIGIN_POSE_BOTTOM)
30     {
31         vOriginOffset.y = 0.0f;
32     }
33 
34     // 底四个顶点
35     for (Yuint j = 0; j < 2; j++)
36     {
37         for (Yuint i = 0; i < 2; i++)
38         {
39             nOffset = (j*2 + i) * vertexStriding;
40             curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
41             curVertexPtr->x = width*i + vOriginOffset.x;
42             curVertexPtr->y = vOriginOffset.y;
43             curVertexPtr->z = length*j + vOriginOffset.z;
44         }
45     }
46 
47     // 上顶点
48     nOffset = 4 * vertexStriding;
49     if (vertexPtr)
50     {
51         curVertexPtr = (YsVector3*)(vertexPtr + nOffset);
52         curVertexPtr->x = vOriginOffset.x + width / 2;
53         curVertexPtr->y = height + vOriginOffset.y;
54         curVertexPtr->z = vOriginOffset.z;
55 
56         curVertexPtr = (YsVector3*)(vertexPtr + nOffset + vertexStriding);
57         curVertexPtr->x = vOriginOffset.x + width / 2;
58         curVertexPtr->y = height + vOriginOffset.y;
59         curVertexPtr->z = length + vOriginOffset.z;
60     }
61 
62     return true;
63 }

 

三角形索引数据的生成

 

 1 bool                        YfBuildWedgeTriIndices
 2 (
 3     YeIndexType             indexType,
 4     Yuint                   indexStriding,  
 5     Yuint                   indexPos,
 6     void*                   pTriIndicesBuffer
 7 )
 8 {
 9     if (!pTriIndicesBuffer)
10     {
11         return false;
12     }
13 
14     char* indexPtr = (char*)pTriIndicesBuffer + indexPos;
15     if (indexType == YE_INDEX_16_BIT)
16     {
17         YsTriIndex16* triIndexPtr = NULL;
18 
19         // bottom
20         triIndexPtr = (YsTriIndex16*)(indexPtr + 0*indexStriding);
21         triIndexPtr->index0 = 0; triIndexPtr->index1 = 1; triIndexPtr->index2 = 3;
22         triIndexPtr = (YsTriIndex16*)(indexPtr + 1*indexStriding);
23         triIndexPtr->index0 = 0; triIndexPtr->index1 = 3; triIndexPtr->index2 = 2;
24 
25         // 4 face
26         triIndexPtr = (YsTriIndex16*)(indexPtr + 2*indexStriding);
27         triIndexPtr->index0 = 0; triIndexPtr->index1 = 2; triIndexPtr->index2 = 5;
28         triIndexPtr = (YsTriIndex16*)(indexPtr + 3*indexStriding);
29         triIndexPtr->index0 = 0; triIndexPtr->index1 = 5; triIndexPtr->index2 = 4;
30         triIndexPtr = (YsTriIndex16*)(indexPtr + 4*indexStriding);
31         triIndexPtr->index0 = 4; triIndexPtr->index1 = 5; triIndexPtr->index2 = 3;
32         triIndexPtr = (YsTriIndex16*)(indexPtr + 5*indexStriding);                                                
33         triIndexPtr->index0 = 4; triIndexPtr->index1 = 3; triIndexPtr->index2 = 1;
34 
35         // 2 face
36         triIndexPtr = (YsTriIndex16*)(indexPtr + 6*indexStriding);
37         triIndexPtr->index0 = 0; triIndexPtr->index1 = 4; triIndexPtr->index2 = 1;
38         triIndexPtr = (YsTriIndex16*)(indexPtr + 7*indexStriding);
39         triIndexPtr->index0 = 2; triIndexPtr->index1 = 3; triIndexPtr->index2 = 5;
40     }
41     else
42     {
43         YsTriIndex32* triIndexPtr = NULL;
44 
45         // bottom
46         triIndexPtr = (YsTriIndex32*)(indexPtr + 0*indexStriding);
47         triIndexPtr->index0 = 0; triIndexPtr->index1 = 1; triIndexPtr->index2 = 3;
48         triIndexPtr = (YsTriIndex32*)(indexPtr + 1*indexStriding);
49         triIndexPtr->index0 = 0; triIndexPtr->index1 = 3; triIndexPtr->index2 = 2;
50 
51         // 4 face
52         triIndexPtr = (YsTriIndex32*)(indexPtr + 2*indexStriding);
53         triIndexPtr->index0 = 0; triIndexPtr->index1 = 2; triIndexPtr->index2 = 5;
54         triIndexPtr = (YsTriIndex32*)(indexPtr + 3*indexStriding);
55         triIndexPtr->index0 = 0; triIndexPtr->index1 = 5; triIndexPtr->index2 = 4;
56         triIndexPtr = (YsTriIndex32*)(indexPtr + 4*indexStriding);
57         triIndexPtr->index0 = 4; triIndexPtr->index1 = 5; triIndexPtr->index2 = 3;
58         triIndexPtr = (YsTriIndex32*)(indexPtr + 5*indexStriding);                                                
59         triIndexPtr->index0 = 4; triIndexPtr->index1 = 3; triIndexPtr->index2 = 1;
60 
61         // 2 face
62         triIndexPtr = (YsTriIndex32*)(indexPtr + 6*indexStriding);
63         triIndexPtr->index0 = 0; triIndexPtr->index1 = 4; triIndexPtr->index2 = 1;
64         triIndexPtr = (YsTriIndex32*)(indexPtr + 7*indexStriding);
65         triIndexPtr->index0 = 2; triIndexPtr->index1 = 3; triIndexPtr->index2 = 5;
66     }
67 
68     return true;
69 }

 

线框索引数据的生成

  1 bool                        YfBuildWedgeWireIndices
  2 (
  3     YeIndexType             indexType,
  4     Yuint                   indexStriding,  
  5     Yuint                   indexPos,
  6     void*                   pWireIndicesBuffer
  7 )
  8 {
  9     if (!pWireIndicesBuffer)
 10     {
 11         return false;
 12     }
 13 
 14     Yuint numVertices = 6;
 15     Yuint numLines    = 9;
 16 
 17     // 索引赋值
 18     char* indexPtr = (char*)pWireIndicesBuffer + indexPos;
 19     Yuint nOffset = 0;
 20     if (indexType == YE_INDEX_16_BIT)
 21     {
 22         YsLineIndex16* lineIndexPtr = NULL;
 23 
 24         nOffset = 0 * indexStriding;
 25         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 26         lineIndexPtr->index0 = 0;
 27         lineIndexPtr->index1 = 1;
 28 
 29         nOffset = 1 * indexStriding;
 30         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 31         lineIndexPtr->index0 = 0;
 32         lineIndexPtr->index1 = 4;
 33 
 34         nOffset = 2 * indexStriding;
 35         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 36         lineIndexPtr->index0 = 4;
 37         lineIndexPtr->index1 = 1;
 38 
 39         nOffset = 3 * indexStriding;
 40         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 41         lineIndexPtr->index0 = 2;
 42         lineIndexPtr->index1 = 3;
 43 
 44         nOffset = 4 * indexStriding;
 45         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 46         lineIndexPtr->index0 = 2;
 47         lineIndexPtr->index1 = 5;
 48 
 49         nOffset = 5 * indexStriding;
 50         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 51         lineIndexPtr->index0 = 5;
 52         lineIndexPtr->index1 = 3;
 53 
 54         nOffset = 6 * indexStriding;
 55         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 56         lineIndexPtr->index0 = 0;
 57         lineIndexPtr->index1 = 2;
 58 
 59         nOffset = 7 * indexStriding;
 60         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 61         lineIndexPtr->index0 = 4;
 62         lineIndexPtr->index1 = 5;
 63 
 64         nOffset = 8 * indexStriding;
 65         lineIndexPtr = (YsLineIndex16*)(indexPtr + nOffset);
 66         lineIndexPtr->index0 = 1;
 67         lineIndexPtr->index1 = 3;
 68     }
 69     else
 70     {
 71         YsLineIndex32* lineIndexPtr = NULL;
 72 
 73         nOffset = 0 * indexStriding;
 74         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
 75         lineIndexPtr->index0 = 0;
 76         lineIndexPtr->index1 = 1;
 77 
 78         nOffset = 1 * indexStriding;
 79         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
 80         lineIndexPtr->index0 = 0;
 81         lineIndexPtr->index1 = 4;
 82 
 83         nOffset = 2 * indexStriding;
 84         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
 85         lineIndexPtr->index0 = 4;
 86         lineIndexPtr->index1 = 1;
 87 
 88         nOffset = 3 * indexStriding;
 89         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
 90         lineIndexPtr->index0 = 2;
 91         lineIndexPtr->index1 = 3;
 92 
 93         nOffset = 4 * indexStriding;
 94         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
 95         lineIndexPtr->index0 = 2;
 96         lineIndexPtr->index1 = 5;
 97 
 98         nOffset = 5 * indexStriding;
 99         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
100         lineIndexPtr->index0 = 5;
101         lineIndexPtr->index1 = 3;
102 
103         nOffset = 6 * indexStriding;
104         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
105         lineIndexPtr->index0 = 0;
106         lineIndexPtr->index1 = 2;
107 
108         nOffset = 7 * indexStriding;
109         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
110         lineIndexPtr->index0 = 4;
111         lineIndexPtr->index1 = 5;
112 
113         nOffset = 8 * indexStriding;
114         lineIndexPtr = (YsLineIndex32*)(indexPtr + nOffset);
115         lineIndexPtr->index0 = 1;
116         lineIndexPtr->index1 = 3;
117     }
118 
119     return true;
120 }

 


 

转载于:https://my.oschina.net/abcijkxyz/blog/722682

这篇关于[11] 楔形体(Wedge)图形的生成算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399792

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre