2012-02-24 1 views
0

Я пытаюсь использовать то же изображение, которое я успешно показываю, используя образец ImageTargets, вещь моя .h не имеет «индексов», или константу типа NUM_C_OBJECT_INDEX.Как я могу использовать glDrawArrays() insted из glDrawElements() в FrameMarkers из образцов Qualcomm

Теперь, это не будет проблемой, как правило, я бы просто изменить это, как кода:

glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, indices); 

для этого:

glDrawArrays(GL_TRIANGLES, 0, vertex); 

где это вершинные = myObjectVertices. Дело в том, когда я пытаюсь сделать это, я получаю эту ошибку:

No matching function for call to '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; 

ответ

0

glDrawArrays третий аргумент должен иметь тип GLsizei, поэтому в основном это целое число. В вашей переменной вершин кода указан указатель. Это не будет работать. Передайте целое число.

+0

Я попытался чтобы использовать его как 'glDrawArrays (GL_TRIANGLES, 0, (const int) vertex); но это не сработало, может быть, я делаю это неправильно? Я довольно новичок в ios =/ – Tsundoku

+0

Кастинг - это не решение. Вы понимаете, что означает третий аргумент для glDrawArrays? Это число вершин для рендеринга. Вы указываете указатель, который обычно содержит огромное значение, поэтому он будет передавать значение, которое совершенно не имеет смысла. Это не имеет ничего общего с iOS, это основа OpenGL. –

+0

, тогда это еще хуже, так как это мой первый проект с OpenGL, но теперь я точно знаю, что искать. – Tsundoku

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

Попробуйте это:

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);