小编Usm*_*.3D的帖子

翘曲图像出现在圆柱投影中

我想以一种似乎是来自圆柱体的投影的方式扭曲平面图像.

我有一个像这样的平面图像:

我有这个平面图像

我想在2D图像中将它显示为这样的东西:

输出图像应该是这样的

我有点逐步退出几何投影.我参观了像其他一些问题,可是我不明白我怎么会代表这些圆柱坐标(theta和RHO)为X,Y在笛卡尔(X,Y)平面坐标.你们能帮我一个详细的例子吗?我正在为iPhone编码,我没有使用像OpenCV等任何第三方库.

谢谢一堆.

3d geometry image computer-vision cylindrical

28
推荐指数
1
解决办法
2万
查看次数

将纹理复制到PixelBuffer(CVPixelBufferRef)

我使用的API只给出了纹理对象的整数id,我需要将该纹理的数据传递给AVAssetWriter来创建视频.

我知道如何从像素缓冲区(CVPixelBufferRef)创建CVOpenGLESTexture对象,但在我的情况下,我必须以某种方式复制只有id可用的纹理数据.

换句话说,我需要将opengl纹理复制到基于pixelbuffer的纹理对象.可能吗?如果是,那怎么样?

在我的示例代码中,我有类似的东西:

   void encodeFrame(Gluint textureOb)
    {

    CVPixelBufferPoolCreatePixelBuffer (NULL, [assetWriterPixelBufferAdaptor pixelBufferPool], &pixelBuffer[0]);

    CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault, coreVideoTextureCache, pixelBuffer[0],
                                                          NULL, // texture attributes
                                                          GL_TEXTURE_2D,
                                                          GL_RGBA, // opengl format
                                                          (int)FRAME_WIDTH,
                                                          (int)FRAME_HEIGHT,
                                                          GL_BGRA, // native iOS format
                                                          GL_UNSIGNED_BYTE,
                                                          0,
                                                          &renderTexture[0]);


    CVPixelBufferLockBaseAddress(pixelBuffer[pixelBuffernum], 0);

//Creation of textureOb is not under my control. 
//All I have is the id of texture. 
//Here I need the data of textureOb somehow be appended as a video frame. 
//Either by copying the data to pixelBuffer or somehow pass the textureOb …
Run Code Online (Sandbox Code Playgroud)

iphone textures opengl-es ios avassetwriter

3
推荐指数
1
解决办法
4327
查看次数

挂钩并替换已导出的ELF中的导出功能(.so共享库)

我正在编写一些C代码,以挂接加载到内存中的.so ELF(共享库)的某些功能。

我的C代码应该能够重定向另一个已加载到应用程序/程序的内存中的.so库的导出函数。

这里有一些阐述:

在此处输入图片说明

Android应用将加载多个.so文件。我的C代码必须浏览属于另一个共享.so库(在本例中称为target.so)的导出功能

这不是常规的dlsym方法,因为我不仅想要函数的地址,而且想用自己的功能替换它;这样做的方式是:当另一个库调用其自己的函数时,将改为调用我的hook_func,然后从我的hook_func中调用原始函数。

对于导入功能,这可以工作。但是对于导出功能,我不确定该怎么做。导入函数的符号表中的条目在重定位表中具有相应的条目,这些条目最终给出了全局偏移表(GOT)中的条目地址。但是对于导出函数,符号的st_value元素本身具有过程的地址,而不具有GOT地址(如果我错了,请纠正我)。

如何执行导出功能的挂钩?

从理论上讲,我应该获取导出功能st_value的动态符号表项(Elf32_Sym)元素的存储位置。如果得到该位置,则应该可以用我的hook_func的地址替换该位置中的值。但是,到目前为止,我无法写入该位置。我必须假设动态符号表的内存是只读的。如果是这样,那该怎么办?

非常感谢您的阅读和帮助。

更新: LD_PRELOAD只能用我自己的函数替换原始函数,但是然后我不确定是否有任何方法可以调用原始函数。以我为例:

应用程序通过调用来初始化音频引擎Audio_System_Create,并将AUDIO_SYSTEM对象的引用传递给Audio_System_Create(AUDIO_SYSTEM **); AUDIO API,以分配此struct / object和函数返回。现在,只要我可以访问该AUDIO_SYSTEM对象,就可以轻松地向该对象附加一个回调并开始接收音频数据。因此,我的最终目标是获得对AUIOD_SYSTEM对象的引用。根据我的理解,只有在我第一次通过分配该对象的地方拦截该调用时,我才能得到该信息Audio_System_Create(AUIOD_SYSTEM **)。当前没有直接的方法来在android上获取输出音频。(所有示例都谈到仅录制来自麦克风的音频)

Update2: 正如Basile在他的回答中所建议的那样,我使用了dladdr(),但奇怪的是它给了我与传递给它相同的地址。

void *pFunc=procedure_addr;  //procedure address calculated from the st_value of symbol from symbol table in ELF file (not from loaded file)

        int  nRet;

            // Lookup the name of the function given the function pointer
            if ((nRet = dladdr(pFunc, &DlInfo)) != 0)
            {
                LOGE("Symbol …
Run Code Online (Sandbox Code Playgroud)

c linux shared-libraries elf symbol-table

3
推荐指数
1
解决办法
2264
查看次数

无法通过OpenGL ES 2.0中的glDrawElements绘制三角形

我正在尝试绘制这里引用的程序范围.

我修改了一下,以便我可以使用OpenGL ES 2.0的glDrawElements方法

这是我的createSphere版本:

GLfloat sphereVerticies[10000]={0.0};
GLubyte triangleIndices[15000]={0};

int createSphere (GLfloat spherePoints[], GLubyte triangleIndices[], GLfloat fRadius, GLfloat step)
{
    int points = 0;

    GLfloat uStep = DEGREES_TO_RADIANS (step);
    GLfloat vStep = uStep;

    unsigned long index=0;

    for (GLfloat u = 0.0f; u <= (2 * M_PI); u += uStep) 
    {
        for (GLfloat v = -M_PI_2; v <= M_PI_2; v += vStep) 
        {               
            triangleIndices[index++]=points;
            triangleIndices[index++]=points+1;
            triangleIndices[index++]=points+2;
            triangleIndices[index++]=points+2;
            triangleIndices[index++]=points+3;
            triangleIndices[index++]=points;

            points++;
            spherePoints[(points - 1) * 3] = fRadius * cosf(v) …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es ios opengl-es-2.0 ios5

0
推荐指数
1
解决办法
4268
查看次数