有没有更快的方法将下面的数据转换成c风格的指针数组?
GLfloat verticalLines [] = {
0.59, 0.66, 0.0,
0.59, -0.14, 0.0
}
我目前的方法是使用以下方法手动迭代数据:
-(GLfloat *)updateLineVertices{
int totalVertices = 6;
GLfloat *lineVertices = (GLfloat *)malloc(sizeof(GLfloat) * (totalVertices));
for (int i = 0; i<totalVertices; i++) {
lineVertices[i] = verticalLines[i];
}
return lineVertices;
}
一些额外的信息。最终,我需要一种易于操作的格式的数据,例如:
-(void)scaleLineAnimation{
GLfloat *lineVertices = [self updateLineVertices];
for (int i = 0; i<totalVertices; i+=3) {
lineVertices[i+1] += 0.5; //scale y axis
}
}
最佳答案
这取决于 verticalLines 是否会保留下来。如果它像上面那样定义并且它不会改变,你可以放弃整个 malloc 并只将 lineVertices 指向它。
linesVertices = &verticalLines[0]
如果 verticalLines 要改变,你可能想要你自己的副本,所以你别无选择,只能在你这样做的时候将实际数据从内存的一部分复制到另一部分,也就是说,这可能是优雅一点
for (int i = 0; i<totalVertices; i++){
lineVertices[i] = verticalLines[i];
}
或者首选方法可能是使用 memcopy(),这里是一些工作代码
//MemcopyTest.c
#include <cstdlib>
#include <stdio.h>
#include <string.h>
int main(){
float a[] = {1.0,2.0,3.0}; //Original Array
int size = sizeof(float)*3;
float *b = (float*)malloc(size); //Allocate New Array
memcpy(b, a, size); //Copy Data
for(int i = 0; i<3; i++){
printf("%f\n", b[i]);
}
free(b);
}
关于objective-c - 将 GLfloat [] 数组转换为 GLfloat * 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865892/
有没有更快的方法将下面的数据转换成c风格的指针数组? GLfloat verticalLines [] = { 0.59, 0.66, 0.0, 0.59, -0.14, 0.0 } 我目前的方
我正在 OpenGL ES 2.0 中创建一个应用程序,想要设置一个 2D 投影矩阵来解决由屏幕纵横比引起的拉伸(stretch)和扭曲。我使用一个函数创建了一个具有所需值的矩阵。该函数的结果是一个
我在 Objective-C 中动态声明 GLfloat 数组时遇到了一些问题。这是c我正在使用的颂歌: GLfloat *m_bindPositions; @implementation int n
为什么我不能这样做? #include GLfloat posX; posX=0.0f; Visual Studio 说: error C4430: missing type specifier
我想在我创建的项目中添加一些光照,但出现以下编译器错误: error C2440: 'initializing' : cannot convert from 'float' to 'GLfloat [
当声明为局部变量时,不会发生旋转 GLfloat 对象。当它被声明为全局时,它会相应地轮换,它背后要求全局的原因是什么? OpenGL 程序的 display() 函数是否调用其他东西? 最佳答案 我
在使用此类声明时遇到一些问题,我正在尝试为 Dijktra 最短路径算法的 openGL 实现创建节点。 getX()、getY()、getZ() 方法导致错误: 错误:ISO C++ 禁止声明没有类
这个问题在这里已经有了答案: Do I have to use the OpenGL data types (GLint, CLchar, ...) for a cross platform game
我知道 CGFloat 应该在 Cocoa 应用程序中使用,以使它们成为 64 位干净的。但是,在一个简单的 OpenGL 游戏中,除了渲染(到 NSOpenGLView)之外,其他所有事情都使用 C
在使用 OpenGL 分配 VBO 之后,我使用 clCreateFromGLBuffer 从中创建了一个 OpenCL 缓冲区. 我将 VBO 用作 GLfloat 数组,将 OpenCL 缓冲区用
我尝试使用 创建 GLfloat 缓冲区数组 GLfloat mat_diffuse[] = { .2f, .2f, .6f, 1f }; 但是java找不到类GLfloat,当我尝试使用普通的 fl
我目前正在 iOS 中使用 OpenGL,我想听听是否有任何方法可以将向量转换为 GLfloat? 由于 glBufferData: void glBufferData(GLenum target,
我试图在这里做点什么,但出现了错误我真的不知道如何正确完成它我试图将 Figure.h 中的所有变量作为 GLfloat 而不是 float 并且相同的错误不断出现主意?这是我的图.h Class F
在 C++ 中,最好默认使用 double,只有当我们确实需要它们时才使用 float 或 long double。不过对于 OpenGL,我看到 GLfloat 似乎是默认值。考虑到 double
如何将 float 数组转换为 Glofloat 数组?我需要制作图表,并且需要发送 float 数组来显示函数。我的 float 组是全局变量/ 最佳答案 GLfloat 是 float 的类型定义
我有一个 GLKMatrix4 变量,并且想将它的 GLfloat *array 值用于 glUniformMatrix4fv 函数。我用谷歌搜索但没有找到任何有用的信息。 cocos3d SDK中有
最后Mr.Chris 帮我用GLKview 和drawInRect: 方法画了一条线。它工作正常。但是,我需要一些说明, 我们如何为 GLFloat 赋值? const GLfloat line[]
我正在使用 GLKit 绘制一个像素。我可以在 (10, 10) 坐标处成功绘制像素,如果我有: glClearColor(0.65f, 0.65f, 0.65f, 1.0f); glClear(GL
关于如何正确初始化 GLFloats 数组逐行,目前我的脑子里有个结。据我所知,数组可以这样写: int a[2][2] = {{1,2},{3,4}} 在我的例子中,我有数组 GLfloat tar
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to find the sizeof(a pointer pointing to an array)
我是一名优秀的程序员,十分优秀!