Вероятно, вы ищете outer()
или бинарный оператор alias %o%
:
> c(2,3,4) %o% c(1,2)
[,1] [,2]
[1,] 2 4
[2,] 3 6
[3,] 4 8
> outer(c(2,3,4), c(1,2))
[,1] [,2]
[1,] 2 4
[2,] 3 6
[3,] 4 8
В вашем случае outer()
предлагает гибкость для указания функции, применяемой к комбинациям ; %o%
применяется только функция умножения *
. Для вашего примера и данных
mph <- function(d, rpm) {
cir <- pi * d
cir * rpm / 63360 * 60
}
> outer(c(20,26,29), c(150,350), FUN = mph)
[,1] [,2]
[1,] 8.924979 20.82495
[2,] 11.602473 27.07244
[3,] 12.941220 30.19618
Параметр glEnable
должен быть одной константой перечислителя. Параметр не является битовым полем.
Следующее недопустимо и приведет к ошибке GL_INVALID_ENUM
, которая может быть обнаружена с помощью glGetError
или Отладочный вывод :
blockquote>glEnable(GL_DEPTH | GL_DEPTH_TEST);
Это должно быть
glEnable(GL_DEPTH_TEST);
В любом случае
GL_DEPTH
не является допустимым параметром дляglEnable
, но, возможно, это параметр дляglCopyPixels
.
Обратите внимание, что значение константы перечислителяGL_DEPTH_TEST
равно0x0B71
, а значениеGL_DEPTH
равно0x1801
. Бинарная или (|
) операция обеих констант не имеет никакого смысла.Из-за этого тест глубины никогда не включался и ничего не записывалось в буфер глубины.
Далее отметим, что значения, которые принимаются для диапазона глубины
glDepthRange
, должны находиться в диапазоне [0, 1]. Значения, которые передаются вglDepthRange
, фиксируются в этом диапазоне, прежде чем они будут приняты.Это означает, что
blockquote>glDepthRange(200, 2000);
равно
glDepthRange(1, 1);
, поэтому диапазон глубины равен [1, 1] и все значения возвращаются
glReadPixels
тоже равны 1.Пропустите
glDepthRange(200, 2000);
s>, чтобы решить проблему.
glGetDoublev(GL_MODELVIEW_MATRIX, matModelView)
получает текущую матрицу представления модели из стека матрицGL_MODELVIEW
.glGetDoublev(GL_PROJECTION_MATRIX, matProjection)
получает текущую проекционную матрицу из стека матрицGL_PROJECTION
.Таким образом, вы должны поместить матрицу проекции в стек матрицы
GL_PROJECTION
и матрицу просмотра в стек матрицыGL_MODELVIEW
(см.glMatrixMode
):glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-150, 150, -150, 150, 200, 2000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(200,400,200,0,0.0,0.0,0.0,0.0,1.0);
Вы пытались передать GLUT_DEPTH в glutInitDisplayMode?
Согласно документации GLUT, этот флаг необходим для создания буфера глубины.