Heroku 在我的WebGL代码中使用沙箱中内置的GLSL着色器

Heroku 在我的WebGL代码中使用沙箱中内置的GLSL着色器,heroku,opengl-es,glsl,webgl,shader,Heroku,Opengl Es,Glsl,Webgl,Shader,我对着色器非常陌生,已在glsl.heroku.com上修改了一个着色器以满足我的需要,请参见此处-这就是我希望我的3D对象的外观:。现在我的问题是如何使用原生webgl()将其导入到项目中。着色器代码如下所示: precision mediump float; varying vec2 surfacePosition; void main( void ) { float intensity = 3.0; // Lower number = more 'glow' vec3 light_c

我对着色器非常陌生,已在glsl.heroku.com上修改了一个着色器以满足我的需要,请参见此处-这就是我希望我的3D对象的外观:。现在我的问题是如何使用原生webgl()将其导入到项目中。着色器代码如下所示:

precision mediump float;

varying vec2 surfacePosition;

void main( void ) {

float intensity = 3.0; // Lower number = more 'glow'
vec3 light_color = vec3(0.4, 0.3, 0.1); // RGB, proportional values, higher increases intensity
float master_scale = 0.01; // Change the size of the effect

float c = master_scale/(length(surfacePosition) * length(surfacePosition));
gl_FragColor = vec4(vec3(pow(c, intensity))*light_color, 1.0);

}

这就是片段着色器,那么我如何构建正确的顶点着色器来配合它并通过surfacePosition变量(什么是surface position变量??)在上面的链接中使用我的断开的代码。

不看源代码,我猜
surfacePosition
只是顶点位置*某个矩阵

顶点着色器

attribute vec4 a_position;
varying vec2 surfacePosition;
uniform mat4 mat;

void main() {
  gl_Position = a_position;
  surfacePosition = (a_position * mat).xy;
}    
设置

该矩阵允许您根据画布的大小调整渲染效果,并实现平移和缩放

这里有一个片段

var countElem=document.getElementById(“t”);
var canvas=document.getElementById(“c”);
var gl=canvas.getContext(“webgl”);
var program=twgl.createProgramFromScripts(
gl、[“vshader”、“fshader”]、[“a_position”];
gl.useProgram(程序);
变量垂直=[
1,  1,  
-1,  1,  
-1, -1,  
1,  1,  
-1, -1,  
1, -1,  
];
var vertBuffer=gl.createBuffer();
gl.bindBuffer(gl.ARRAY\u BUFFER,vertBuffer);
gl.bufferData(gl.ARRAY\u BUFFER、新Float32Array(verts)、gl.STATIC\u DRAW);
gl.EnableVertexAttributeArray(0);
gl.VertexAttribute指针(0,2,gl.FLOAT,false,0,0);
var loc=gl.getUniformLocation(程序,“mat”);
var mat=[
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
];
//索引0=x比例(即,纵横比和缩放)
//索引5=y比例(即,纵横比和缩放)
//索引12=x偏移(平移x)
//索引13=y偏移(平移y)
mat[5]=canvas.height/canvas.width;
gl.uniformMatrix4fv(位置、错误、材料);
gl.绘图阵列(gl.三角形,0,6)

属性向量4 a_位置;
可变vec2表面沉积;
均匀mat4毡;
void main(){
gl_位置=a_位置;
表面位置=(a_位置*垫).xy;
}    
精密中泵浮子;
可变vec2表面沉积;
void main(){
浮动强度=3.0;//数值越低=发光越多
vec3 light_color=vec3(0.4,0.3,0.1);//RGB,比例值,越高,强度越高
float master_scale=0.01;//更改效果的大小
浮点数c=主刻度/(长度(表面位置)*长度(表面位置));
gl_FragColor=vec4(vec3(功率(c,强度))*浅色,1.0);
}

不看源代码,我猜
surfacePosition
只是顶点位置*某个矩阵

顶点着色器

attribute vec4 a_position;
varying vec2 surfacePosition;
uniform mat4 mat;

void main() {
  gl_Position = a_position;
  surfacePosition = (a_position * mat).xy;
}    
设置

该矩阵允许您根据画布的大小调整渲染效果,并实现平移和缩放

这里有一个片段

var countElem=document.getElementById(“t”);
var canvas=document.getElementById(“c”);
var gl=canvas.getContext(“webgl”);
var program=twgl.createProgramFromScripts(
gl、[“vshader”、“fshader”]、[“a_position”];
gl.useProgram(程序);
变量垂直=[
1,  1,  
-1,  1,  
-1, -1,  
1,  1,  
-1, -1,  
1, -1,  
];
var vertBuffer=gl.createBuffer();
gl.bindBuffer(gl.ARRAY\u BUFFER,vertBuffer);
gl.bufferData(gl.ARRAY\u BUFFER、新Float32Array(verts)、gl.STATIC\u DRAW);
gl.EnableVertexAttributeArray(0);
gl.VertexAttribute指针(0,2,gl.FLOAT,false,0,0);
var loc=gl.getUniformLocation(程序,“mat”);
var mat=[
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
];
//索引0=x比例(即,纵横比和缩放)
//索引5=y比例(即,纵横比和缩放)
//索引12=x偏移(平移x)
//索引13=y偏移(平移y)
mat[5]=canvas.height/canvas.width;
gl.uniformMatrix4fv(位置、错误、材料);
gl.绘图阵列(gl.三角形,0,6)

属性向量4 a_位置;
可变vec2表面沉积;
均匀mat4毡;
void main(){
gl_位置=a_位置;
表面位置=(a_位置*垫).xy;
}    
精密中泵浮子;
可变vec2表面沉积;
void main(){
浮动强度=3.0;//数值越低=发光越多
vec3 light_color=vec3(0.4,0.3,0.1);//RGB,比例值,越高,强度越高
float master_scale=0.01;//更改效果的大小
浮点数c=主刻度/(长度(表面位置)*长度(表面位置));
gl_FragColor=vec4(vec3(功率(c,强度))*浅色,1.0);
}

不看源代码,我猜
surfacePosition
只是顶点位置*某个矩阵

顶点着色器

attribute vec4 a_position;
varying vec2 surfacePosition;
uniform mat4 mat;

void main() {
  gl_Position = a_position;
  surfacePosition = (a_position * mat).xy;
}    
设置

该矩阵允许您根据画布的大小调整渲染效果,并实现平移和缩放

这里有一个片段

var countElem=document.getElementById(“t”);
var canvas=document.getElementById(“c”);
var gl=canvas.getContext(“webgl”);
var program=twgl.createProgramFromScripts(
gl、[“vshader”、“fshader”]、[“a_position”];
gl.useProgram(程序);
变量垂直=[
1,  1,  
-1,  1,  
-1, -1,  
1,  1,  
-1, -1,  
1, -1,  
];
var vertBuffer=gl.createBuffer();
gl.bindBuffer(gl.ARRAY\u BUFFER,vertBuffer);
gl.bufferData(gl.ARRAY\u BUFFER、新Float32Array(verts)、gl.STATIC\u DRAW);
gl.EnableVertexAttributeArray(0);
gl.VertexAttribute指针(0,2,gl.FLOAT,false,0,0);
var loc=gl.getUniformLocation(程序,“mat”);
var mat=[
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
];
//索引0=x比例(即,纵横比和缩放)
//索引5=y比例(即,纵横比和缩放)
//索引12=x偏移(平移x)
//索引13=y偏移(平移y)
mat[5]=canvas.height/canvas.width;
gl.uniformMatrix4fv(位置、错误、材料);
gl.绘图阵列(gl.三角形,0,6)

属性向量4 a_位置;
可变vec2表面沉积;
均匀mat4毡;
void main(){
gl_位置=a_位置;
表面位置=(a_位置*垫).xy;
}    
精密中泵浮子;
可变vec2表面沉积