Проблема с поворотом трехмерного изображения DICOM с помощью jogl

Я новичок в Jogl. Я кодирую для 3D-рендеринга изображений DICOM. Во время 3D-рендеринга изображений с помощью jogl я создал грубый 3D-вид. Далее следуют следующие шаги:

  1. Импортированный стек файлов DICOM.
  2. Создал BufferedImages из файлов.
  3. Текстура создается для каждого изображения.

        // Create a OpenGL Texture object
        for(int i=0;i<image.length;i++)
        {     
            textures[i] = AWTTextureIO.newTexture(GLProfile.getDefault(), image[i], false); 
    
            textureCoords = textures[i].getImageTexCoords();
            textureTop[i] = textureCoords.top();
            textureBottom[i] = textureCoords.bottom();
            textureLeft[i] = textureCoords.left();
            textureRight[i] = textureCoords.right();
        }
    
  4. Создан куб этих изображений, размещая их одно за другим.

    int x=numberOfImages;
    gl.glBegin(GL_QUADS); 
    
    // To place stack back to front
    for(float i=-numberOfImages*0.0050f;x>0;i=i+0.01f){ 
    
        // Enables this texture's target in the current GL context's state.
        textures[currTextureFilter].enable(gl);
        // Bind the texture with the currently chosen filter to the current OpenGL graphics context.
        textures[currTextureFilter].bind(gl);
        gl.glBegin(GL_QUADS); // of the color cube
    
        gl.glNormal3f(0.0f, 0.0f, (0.1f+i));
        gl.glTexCoord2f(textureLeft[x], textureBottom[x]);
        gl.glVertex3f(-1.0f, -1.0f, (0.1f+i)); // bottom-left of the texture and quad
        gl.glTexCoord2f(textureRight[x], textureBottom[x]);
        gl.glVertex3f(1.0f, -1.0f, (0.1f+i));  // bottom-right of the texture and quad
        gl.glTexCoord2f(textureRight[x], textureTop[x]);
        gl.glVertex3f(1.0f, 1.0f, (0.1f+i));   // top-right of the texture and quad
        gl.glTexCoord2f(textureLeft[x], textureTop[x]);
        gl.glVertex3f(-1.0f, 1.0f, (0.1f+i));  // top-left of the texture and quad
    
        currTextureFilter =x;
    
    
        textures[currTextureFilter].disable(gl);
    
        x--;
        gl.glFlush();
    
        gl.glEnd();
    }
    
  5. Предоставленные возможности для трехмерного изображения, такие как вращение, масштабирование и т. Д.

При вращении трехмерного изображения интенсивность света на изображениях уменьшается, и под определенным углом появляется черная полоса. Когда я увеличиваю эту часть, она показывает разрыв в 2 изображениях. Я что-то не так делаю? Пожалуйста, ведите меня. Заранее спасибо.

Первый видНа вращении

1 ответ

Если вы рисуете срезы в фиксированном направлении относительно набора данных, это будет работать достаточно хорошо, если направление просмотра более или менее ортогонально срезами. С другой стороны, результаты будут ухудшаться.

В крайнем случае, когда ваше направление просмотра находится в той же плоскости, что и срезы, вы в основном ничего не увидите, потому что смотрите на край полигонов.

Что касается правильного и эффективного выполнения объемного рендеринга, это очень широкая область. Есть целые книги на эту тему. И отчасти очень дорогие коммерческие решения, где многие из них на самом деле работают не так хорошо.

Просто чтобы дать вам отправную точку: один из основных подходов заключается в том, что вы сохраняете данные в 3D текстуре, а затем рисуете плоскости срезов, которые всегда ортогональны направлению просмотра.

Другие вопросы по тегам