1

我想在我的 OpenGL 对象上使用着色,但似乎无法访问我的 opengl 包中的 GLSL 函数。Eclipse 中是否有可用于 OpenGL ES 的 GLSL 包?

编辑:正如蒂姆指出的那样。着色器被编写为文本文件,然后使用 glShaderSoure 加载,我有一个 C++ 着色器文件,我曾经为光线追踪应用程序编写过该文件。但是,我真的很困惑如何在 java 中实现。假设我在我的Renderer类中使用 gl object绘制了一个 2D 正方形,我MySquare将如何实现下面着色器文件的 java 等价物。

着色器.vert

     varying vec3 N;
     varying vec3 v;

void main()
{

// Need to transform the normal into eye space.
N = normalize(gl_NormalMatrix * gl_Normal);


// Always have to transform vertex positions so they end
// up in the right place on the screen.
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

  // Fragment shader for per-pixel Phong interpolation and shading.

着色器片段

// The "varying" keyword means that the parameter's value is interpolated
// between the nearby vertices.
varying vec3 N;
varying vec3 v;

//Used for Environmental mapping shader calculations
const vec3 xUnitVec=vec3(1.0, 0.0, 0.0), yUnitVec=vec3(1.0, 1.0, 0.0);
uniform vec3 BaseColor, MixRatio;
uniform sampler2D EnvMap;


 void main()
{
    // The scene's ambient light.
    vec4 ambient = gl_LightModel.ambient * gl_FrontMaterial.ambient;

// The normal vectors is generally not normalized after being
// interpolated across a triangle.  Here we normalize it.
vec3 Normal = normalize(N);

// Since the vertex is in eye space, the direction to the
// viewer is simply the normalized vector from v to the
// origin.
vec3 Viewer = -normalize(v);

// Get the lighting direction and normalize it.
vec3 Light  = normalize(gl_LightSource[0].position.xyz);

// Compute halfway vector
vec3 Half = normalize(Viewer+Light);

// Compute factor to prevent light leakage from below the
// surface
float B = 1.0;
if(dot(Normal, Light)<0.0) B = 0.0;

// Compute geometric terms of diffuse and specular
float diffuseShade = max(dot(Normal, Light), 0.0);
float specularShade = 
  B * pow(max(dot(Half, Normal), 0.0), gl_FrontMaterial.shininess);

// Compute product of geometric terms with material and
// lighting values
vec4 diffuse = diffuseShade * gl_FrontLightProduct[0].diffuse;
vec4 specular = specularShade * gl_FrontLightProduct[0].specular;
ambient += gl_FrontLightProduct[0].ambient;

// Assign final color
gl_FragColor= ambient + diffuse + specular + gl_FrontMaterial.emission;
}
4

3 回答 3

3

learnopengles.com上查看教程。他们会回答你的所有问题。

于 2012-06-22T19:39:10.877 回答
0

没有着色器文件的“java 等价物”。着色器是用 GLSL 编写的。无论您的 opengl 是用 java、c++、python 还是其他任何方式包装的,着色器都是相同的。除了 OpenGL 和 OpenGLES 之间的小的 API 差异之外,您可以在 Java 中上传与在 C++ 中使用的完全相同的着色器,逐个字符。

于 2012-06-22T18:52:04.223 回答
0

您可以使用此来源: https ://github.com/markusfisch/ShaderEditor

ShaderView 类是关键!GLSL 文件位于 raw 文件夹中。

于 2020-03-10T04:25:25.943 回答