Проблема с поворотом трехмерного изображения DICOM с помощью jogl
Я новичок в Jogl. Я кодирую для 3D-рендеринга изображений DICOM. Во время 3D-рендеринга изображений с помощью jogl я создал грубый 3D-вид. Далее следуют следующие шаги:
- Импортированный стек файлов DICOM.
- Создал BufferedImages из файлов.
Текстура создается для каждого изображения.
// 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(); }
Создан куб этих изображений, размещая их одно за другим.
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(); }
Предоставленные возможности для трехмерного изображения, такие как вращение, масштабирование и т. Д.
При вращении трехмерного изображения интенсивность света на изображениях уменьшается, и под определенным углом появляется черная полоса. Когда я увеличиваю эту часть, она показывает разрыв в 2 изображениях. Я что-то не так делаю? Пожалуйста, ведите меня. Заранее спасибо.
1 ответ
Если вы рисуете срезы в фиксированном направлении относительно набора данных, это будет работать достаточно хорошо, если направление просмотра более или менее ортогонально срезами. С другой стороны, результаты будут ухудшаться.
В крайнем случае, когда ваше направление просмотра находится в той же плоскости, что и срезы, вы в основном ничего не увидите, потому что смотрите на край полигонов.
Что касается правильного и эффективного выполнения объемного рендеринга, это очень широкая область. Есть целые книги на эту тему. И отчасти очень дорогие коммерческие решения, где многие из них на самом деле работают не так хорошо.
Просто чтобы дать вам отправную точку: один из основных подходов заключается в том, что вы сохраняете данные в 3D текстуре, а затем рисуете плоскости срезов, которые всегда ортогональны направлению просмотра.