C++ 使用openGL es 3.0进行体绘制

C++ 使用openGL es 3.0进行体绘制,c++,opengl-es-3.0,volume-rendering,C++,Opengl Es 3.0,Volume Rendering,我正在尝试渲染3D卷,原始数据已成功从主内存上载到图形内存,但屏幕上仍然没有任何内容。这是我的着色器代码,有人可以帮助我定位问题 const char vShaderStr[] = "#version 300 es \n" "in vec3 av4position; \n" "uniform mat4 u_mvpMatrix;

我正在尝试渲染3D卷,原始数据已成功从主内存上载到图形内存,但屏幕上仍然没有任何内容。这是我的着色器代码,有人可以帮助我定位问题

const char vShaderStr[] =
      "#version 300 es                              \n"
      "in vec3 av4position;                         \n"
      "uniform mat4 u_mvpMatrix;                    \n"
      "smooth out vec3 uVU;                         \n"
      "void main()                                  \n"
      "{                                            \n"
      "gl_Position=u_mvpMatrix*vec4(av4position.xyz,1);\n"
      "uVU=av4position+vec3(0.5);                   \n"
      "}                                            \n";

   const char fShaderStr[] =
      "#version 300 es                              \n"
      "precision mediump float;                     \n"
      "layout(location=0) out vec4 vFragColor;      \n"
      "smooth in vec3 uVU;  

                    \n"

  "uniform sampler3D    volume;                 \n"
  "uniform vec3         camPos;                 \n"
  "uniform vec3         step_size;              \n"

  "const int MAX_SAMPLES=300;                   \n"
  "const vec3 texMin=vec3(0);                   \n"
  "const vec3 texMax=vec3(1);                   \n" 

    "void main()                                \n"

  "{                                           \n"
      "vec3 dataPos=uVU;                                    \n"
      "vec3 geomDir=normalize((uVU-vec3(0.5))-camPos);      \n"
      "vec3 dirStep=geomDir*step_size;                      \n"
      "bool stop=false;                                     \n"
      "for(int i=0;i<MAX_SAMPLES;i++)                       \n"
      "{                                                    \n"
          "dataPos=dataPos+dirStep;                                     \n"
          "stop = dot(sign(dataPos-texMin),sign(texMax-dataPos)) < 3.0; \n"
          "if (stop)                                                    \n"
          "break;                                                       \n"
          "float sample = texture(volume, dataPos).r;                   \n"
          "float prev_alpha = sample - (sample * vFragColor.a);         \n"
          "vFragColor.rgb = prev_alpha * vec3(sample) + vFragColor.rgb;\n"
          "vFragColor.a += prev_alpha;                                  \n"
          "if( vFragColor.a>0.99)                                       \n"
          "break;                                                       \n"
      " }                                                               \n"
    //  "vFragColor = vec4(1, 0, 0, 1);                                 \n"
  "}                        

是什么让您认为着色器中存在问题?您是否在信息日志中收到任何编译器错误/警告?因为我成功地将文件从主存上载到图形硬件,并且在我的整个代码中未发现任何错误,所以我认为我的着色器代码中可能有错误。@user3492894:您知道着色器不会自动作用。你仍然必须在你的程序中有一些绘图代码,这样着色器才能真正开始工作。我是一个初学者,我坚持使用这些代码。代码中没有错误,但仍然不起作用。我该怎么办?