Как я могу передать функцию Multi Argument с массивом? - C ++ - PullRequest
0 голосов
/ 12 февраля 2012

Я пытаюсь передать массив, содержащий координаты X, Y и Z (тип float), функции glTranslatef (), но я не могу найти способ сделать это.

Как пример того, чего я пытаюсь достичь;

float xyz[3] = {3,2,1};
glTranslatef(xyz);

Я получаю следующую ошибку всякий раз, когда пытаюсь сделать что-то подобное

не может преобразовать "float *" в "GLfloat {aka float}" для аргумента "1" в "void glTranslatef (GLfloat, GLfloat, GLfloat)"

Я пробовал искать в Google, но не смог найти то, что искал.

Ответы [ 4 ]

4 голосов
/ 12 февраля 2012

glTranslatef принимает три float аргумента, а не один аргумент массива. Это конец.

float XYZ[3] = {3,2,1};
glTranslatef(XYZ[0], XYZ[1], XYZ[2]);

Если вы действительно в отчаянии, вы можете распаковать его с помощью макроса:

#define UNPACK_TRI_ARRAY(ar) ar[0], ar[1], ar[2]

float XYZ[3] = {3,2,1};
glTranslatef(UNPACK_TRI_ARRAY(XYZ));

Но как только вы дойдете до этой точки, вы должны спросить себя почему .

2 голосов
/ 12 февраля 2012

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

glTranslatef(XYZ[0], XYZ[1], XYZ[2]);

http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml

Прототип:

void glTranslatef(GLfloat   x,
                  GLfloat   y,
                  GLfloat   z);
0 голосов
/ 12 февраля 2012

AFAIK, я бы просто определил перегрузку для функции, принимающей const float *, а затем передал бы элементы массива в исходную функцию с тремя аргументами (X, Y, Z).

0 голосов
/ 12 февраля 2012
glTranslatef(XYZ[0], XYZ[1], XYZ[2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...