glReadPixels deep_buffer_component всегда возвращает 1

Вероятно, вы ищете 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
2
задан halfer 24 February 2019 в 12:56
поделиться

2 ответа

Параметр glEnable должен быть одной константой перечислителя. Параметр не является битовым полем.

Следующее недопустимо и приведет к ошибке GL_INVALID_ENUM, которая может быть обнаружена с помощью glGetError или Отладочный вывод :

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, фиксируются в этом диапазоне, прежде чем они будут приняты.

Это означает, что

glDepthRange(200, 2000);

равно

glDepthRange(1, 1);

, поэтому диапазон глубины равен [1, 1] и все значения возвращаются glReadPixels тоже равны 1.

Пропустите glDepthRange(200, 2000); , чтобы решить проблему.


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);
0
ответ дан Rabbid76 24 February 2019 в 12:56
поделиться

Вы пытались передать GLUT_DEPTH в glutInitDisplayMode?

Согласно документации GLUT, этот флаг необходим для создания буфера глубины.

0
ответ дан Ville Krumlinde 24 February 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: