使用 lookAt()时注意记录原始状态originalM=Mtrix3D.clone(3d.transform)

本文介绍在PV3D中使用lookAt()函数时需要注意保存原始Matrix3D状态的方法,避免在3D对象间转换时出现旋转偏差的问题。
使用 lookAt()时注意记录原始状态originalM=Mtrix3D.clone(3d.transform)
2010年07月26日
  pv3d 注意点:
  在做不同对象3d对象间的切换时(比如Sphere 到 Cube) 注意要保存没有lookAt()时的 DisplayObject3D.transform :Matrix3D 状态!!
  因为当你使用 lookAt以后 所有的rotationXYZ都发生变化 你在这种情况下转化为其他3D对象 必须要用到rotationXYZ 然而这时的rotationXYZ发生偏转,也就是说这时候用rotationXYZ并不会达到预期的效果!
  为了使用rotationXYZ来达到预期的效果! 则需要还原原来lookAt之前的状态 这也是为什么要 originalM=Mtrix3D.clone(3d.transform) 的原因!
  在进行转化其他3d对象时 我们先要进行还原 3d.transform= originalM
  这样以后就可以正确偏转 rotationXYZ
### C语言中以数组作为函数参数并返回数组 #### 使用一维数组作为函数参数 在C语言中,当希望传递一个数组给函数,实际上传递的是指向该数组第一个元素的指针。因此,在定义接受数组参数的函数,通常会指定形参为指针类型。 ```c void processArray(int* array, int size) { for (int i = 0; i < size; ++i) { printf("%d ", array[i]); } } ``` 上述代码展示了如何接收一个整数类型的数组作为输入,并遍历打印其内容[^1]。 #### 动态创建并返回数组 对于需要动态创建数组的情况,可以利用`malloc()`来分配内存空间。需要注意的是,由于C语言不允许直接返回局部变量声明的数组,而应该返回指向新分配内存区域的指针。 ```c #include <stdlib.h> // 定义获取动态数组大小的功能 int* createDynamicIntArray(int length) { // 分配足够的连续存储单元用于保存length个整数值 int* dynamicArray = (int*)malloc(length * sizeof(int)); if (!dynamicArray) { // 如果分配失败则处理错误情况 fprintf(stderr, "Memory allocation failed\n"); exit(EXIT_FAILURE); } // 初始化数组中的每一个位置都设置为特定值比如这里设为了0 for (int index = 0; index < length; ++index){ dynamicArray[index] = 0; } return dynamicArray; } ``` 这段代码实现了创建一个指定长度的一维整型数组,并将其初始化为零的操作[^2]。 #### 处理多维数组 如果涉及到更复杂的场景如二维或多维数组,则可以通过指针到固定列宽的数组的方式来实现: ```c #define ROWS 3 #define COLS 4 typedef struct MatrixStruct{ int rows; int cols; int data[ROWS][COLS]; }Matrix; // 创建一个新的矩阵实例 Matrix* newMatrix() { Matrix* matPtr = (Matrix *)malloc(sizeof(Matrix)); if(!matPtr){ perror("Failed to allocate memory."); exit(-1); } matPtr->rows = ROWS; matPtr->cols = COLS; // 填充数据... for(int r=0;r<ROWS;++r) for(int c=0;c<COLS;++c) matPtr->data[r][c]=rand()%100; return matPtr; } // 访问矩阵元素的方法 void accessElement(const Matrix* mtrix,int rowIdx,int colIdx){ if(rowIdx>=mtrix->rows || colIdx >= mtrix->cols){ puts("Index out of bounds!"); return ; }else{ printf("Value at (%d,%d): %d",rowIdx,colIdx,mtrix->data[rowIdx][colIdx]); } } ``` 以上例子说明了怎样构建以及操作由结构体封装好的二维整形数组对象[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值