Почему объемная визуализация на основе 3D-текстуры не имеет 3D-эффектов - PullRequest
0 голосов
/ 05 марта 2019

Я реализовал объемную визуализацию на основе 3D-текстуры, используя OpenTK .Код основан на этом проекте .Но результат не показал 3D-эффектов, только плоское 2D-изображение.

Конвейер достаточно прост: (1) загрузка 3D-текстуры;(2) Нарисуйте серию четырехугольников (прямоугольников) и укажите соответствующие координаты текстуры.

Вершины каждого четырехугольника были сгенерированы с помощью

private void generateVertices(int n)
    {
        vertices = new float[n * 3 * 4];
        int cur;
        for (int i = 0; i < n; i++)
        {
            cur = 3 * 4 * i;

            vertices[cur] = -.5f;
            vertices[cur + 1] = -.5f;
            vertices[cur + 2] = -0.5f + i / n;

            vertices[cur+3] = -.5f;
            vertices[cur + 4] = .5f;
            vertices[cur + 5] = -0.5f +  i / n;

            vertices[cur+6] = .5f;
            vertices[cur + 7] = .5f;
            vertices[cur + 8] = -0.5f +  i / n;

            vertices[cur+9] = .5f;
            vertices[cur + 10] = -.5f;
            vertices[cur + 11] = -0.5f + i / n;
        }
    }

Чтобы нарисовать 256 квадов, просто вызовите generateVertices (256) и подпрограмма opengl

GLDrawElements (GL_QUADS, ...)

TexCoordinates вычислялись с использованием положения вершин в вершинном шейдере следующим образом:

texCoord = aPosition+vec3(0.5f,0.5f,0.5f);

Любые идеи приветствуются.

1 Ответ

0 голосов
/ 05 марта 2019

Целое число i в диапазоне [0, n-1], i / n будет 0 навсегда.Таким образом, вы действительно указываете n перекрывающихся четырехугольников.

Решение простое, просто приведите i к float (float)i/n.

...