2015-01-30 5 views
1

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

  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. Указанные объекты в 3D изображений, такие как вращение, масштабирование и т.д.

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

First View On Rotation enter image description here

+0

Это очень широкая тема. Есть целые книги об объемном рендеринге. Получить что-то отображение легко. Делать это правильно и эффективно требует гораздо большего. –

+1

@ Рето Коради: Я прошел учебники NEHE. Исходя из этого, я закодировал выше. Будете ли вы руководствоваться, чтобы сделать его правильным и эффективным? Мне не хватает правильного руководства. Можете ли вы предложить мне ссылку, сайты? – Deepti

+0

Результаты моей работы в этой области описаны здесь: http://retokoradi.com/volume-rendering/. На самом деле, я не объясняю детали реализации, поэтому, вероятно, это будет не очень полезно для тиражирования результатов. Это довольно значительная часть программного обеспечения, с некоторыми оригинальными деталями, которые я нигде не разделял. –

ответ

1

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

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

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

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