【问题标题】:Visualizing an isosurface generated with marching cubes可视化使用行进立方体生成的等值面
【发布时间】:2016-11-07 19:15:33
【问题描述】:

我目前正在使用 OpenGL(更具体地说是通过 VisPy 绑定)来进行一些科学数据可视化。我有一个体积数据集,我想可视化其中存在的一些等值面。我使用 Python 的 skimage.measure 库中的内置行进立方体算法生成等值面。

所以,我有一组顶点,我有一组索引,它们将网格的三角剖分定义为skimage.measure.marching_cubes 的输出。这些可以直接转换为VertexBufferIndexBuffer对象进行渲染。但是将纹理应用于等值面的正确方法是什么?我不需要做任何花哨的事情,基本上只是一些颜色,这样可以更清楚地看到它。

基本上,这是我的困惑点。顶点坐标在框[0,2] x [0,2] x [0, 1] 上定义,因为我的体积在xy 中是z 中的两倍。如果我的理解是正确的,纹理坐标总是在[0,1] x [0,1] x [0, 1] 立方体上定义。我一直在尝试生成一个简单的体积纹理,通过将xy 分量除以二来将顶点坐标转换为纹理坐标,然后将体积纹理中的这些坐标用作texcoord。但这不起作用(请参阅附图)。这是一些代码:

顶点着色器:

uniform mat4 u_model;
uniform mat4 u_view;
uniform mat4 u_projection;
attribute vec3 a_position;
attribute vec3 a_texcoord;
varying vec3 v_texcoord;
void main() {
    gl_Position = u_projection * u_view * u_model * vec4(a_position, 1.0);
    v_texcoord  = a_texcoord;
}

片段着色器:

uniform sampler3D u_texture;
varying vec3 v_texcoord;
void main() {
    float r = texture3D(u_texture, v_texcoord).r;
    float g = texture3D(u_texture, v_texcoord).g;
    float b = texture3D(u_texture, v_texcoord).b;
    gl_FragColor = vec4(r, g, b, 1);
}

3D 纹理当前设置如下。请注意,这种纹理不应该意味着那么多;我只是想在各个方向上放置一个渐变并使用设置,以便我可以看到输出的差异。更改此纹理对我看到的内容没有影响。

D, H, W = 64, 128, 128
texture_arr = np.ones((W, H, D, 4)).astype(np.float32)
texture_arr[...] *= np.linspace(0, 1, W)[:, np.newaxis, np.newaxis, np.newaxis]
texture_arr[...] *= np.linspace(0, 1, H)[np.newaxis, :, np.newaxis, np.newaxis]
texture_arr[...] *= np.linspace(0, 1, D)[np.newaxis, np.newaxis, :, np.newaxis]

VertexBufferIndexBuffer 与行进立方体算法的输出完全相同。如上所述,texcoord 只是将xy 坐标除以二的顶点坐标。

这是我看到的屏幕截图,它具有正确的等值面形状,但纹理非常错误。

【问题讨论】:

    标签: opengl marching-cubes vispy


    【解决方案1】:

    gl_FragColor 自 OpenGL 3.0 以来已被弃用,您使用的是旧版本还是新版本的 OpenGL?也许你可以试试这个片段着色器。

    uniform sampler3D u_texture;
    varying vec3 v_texcoord;
    out vec4 FragColor;    
    void main() 
    {
        FragColor = vec4(texture(u_texture, v_texcoord), 1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多