如何在Qualcomm样本的Frame Markers上使用glDrawArrays()而不是glDrawElements()

时间:2012-02-24 18:37:01

标签: ios opengl-es augmented-reality

我正在尝试使用与使用ImageTargets Sample成功显示的相同图像,事情是我的.h没有“indices”或NUM_C_OBJECT_INDEX类型的常量。

现在,这通常不会成为问题,因为我会像代码一样改变它:

glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, indices);

这个:

glDrawArrays(GL_TRIANGLES, 0, vertex);

其中vertex = myObjectVertices。问题是,当我尝试这样做时,我得到了这个错误:

  

没有匹配函数来调用'glDrawArrays'

除非我使用:

glDrawArrays(GL_TRIANGLES, 0, myObjectVertices); //so not the variable but the object itself.

这里的问题是,因为在FrameMarkers上我能够使用多个渲染,我需要能够分配变量,因此它分界到相应的图像,但我无法想象如何修复该错误除了使用对象本身没用。有什么想法吗?

我的变数:

const GLvoid* vertices = 0;
            const GLvoid* vertex = 0;
            const GLvoid* normals = 0;
            const GLvoid* indices = 0;
            const GLvoid* texCoords = 0;
            int numIndices = 0;

示例:

case 1:
                    vertices = &CobjectVertices[0];
                    normals = &CobjectNormals[0];
                    indices = &CobjectIndices[0];
                    texCoords = &CobjectTexCoords[0];
                    numIndices = NUM_C_OBJECT_INDEX;
                    break;
                case 2:
                    vertices = &myObjectVerts[0];
                    vertex = &myObjectVerts;
                    normals = &myObjectNormals[0];
                    texCoords = &myObjectTexCoords[0];
                    break;

3 个答案:

答案 0 :(得分:1)

您需要做的是使用

传递顶点
glVertexPointer( 3, GL_FLOAT, 0, vertex ); // vertex is pointer to vertices array

然后致电

glDrawArrays(GL_TRIANGLES, 0, vertexCount); // vertexCount is the number of vertices you have in your array

答案 1 :(得分:1)

试试这个:

switch (marker->getMarkerId()) {
    case 0:
        //vertices = &QobjectVertices[0];
        vertices = &1Verts[0];
        normals = 0;
        // indices = &QobjectIndices[0];
        texCoords = &1TexCoords[0];
        numIndices = NUM_1_INDEX;
        quantVertices= 1NumVerts; //Vertices do Número 1
        break;
    case 1:
        //vertices = &CobjectVertices[0];
        vertices = &2Verts[0];
        normals = 0;
        //indices = &CobjectIndices[0];
        texCoords = &2TexCoords[0];
        numIndices = NUM_2_INDEX;
        quantVertices= 2NumVerts;  //Vertices do Número 2
     break;
}

glDrawArrays(GL_TRIANGLES, 0,quantVertices);

答案 2 :(得分:0)

glDrawArrays第三个参数必须有GLsizei类型,所以基本上它是一个整数。在你的代码中,顶点变量是一个指针。不起作用。传递整数。