2013-07-11 33 views
2

得到了制服在e.g腳本着色器轉換爲JS着色

uniforms: { 

    "time": { type: "f", value: 0.0 } 

}, 

其中例如不

屬性float customFrequency; 屬性vec3 customColor;走? TIA(剛纔添加的代碼,我想轉換)

<script type="x-shader/x-vertex" id="vertexshader"> 
uniform float time; 
attribute float customFrequency; 
attribute vec3 customColor; 
varying vec3 vColor; 
void main() 
{ 
    vColor = customColor; 
    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); 
    gl_PointSize = size; 
    gl_Position = projectionMatrix * mvPosition; 
} 
</script> 
<script type="x-shader/x-fragment" id="fragmentshader"> 
varying vec3 vColor; 
void main() 
{ 
    gl_FragColor = vec4(vColor, 1.0); 
    gl_FragColor = gl_FragColor * texture2D(texture, gl_PointCoord); 
} 
</script> 

道歉不制定這個問題非常好 - 想在

THREE.BasicShader = { 
    uniforms: {}, 
vertexShader: [ 
     "void main() {", 
     "gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", 
    "}" 
    ].join("\n"), 
    fragmentShader: [ 
     "void main() {", 
     "gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);", 
    "}" 
    ].join("\n") 
}; 

的形式來從上面的腳本threejs着色器,並不能找到一個使用頂點屬性的例子。 tia

+0

這裏沒有問題。 – gaitat

回答

0

李Stemkoski好心提供這個問題的答案:

THREE.BasicShader = { 

uniforms: {}, 

vertexShader: [ 
"uniform float time;", 
"attribute float customFrequency;", 
"attribute vec3 customColor;", 
"varying vec3 vColor;", 
"void main()", 
"{", 
"vColor = customColor;", 
"vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);", 
"gl_PointSize = (1.0 + sin(customFrequency * time)) * 8.0 * (300.0/length( mvPosition.xyz));", 
"gl_Position = projectionMatrix * mvPosition;", 
"}" 
].join("\n"), 

fragmentShader: 
[ 

    ((similar to above)) 

]。加入( 「\ n」)

}; 
0

這個問題不是很清楚,但我相信你對基本概念有點困惑。

着色器不應該轉換爲javascript。它們是用GLSL語言編寫的,瀏覽器也能理解並傳遞給顯示驅動程序。

制服是您在JavaScript代碼和GLSL着色器之間傳遞變量的方式。所以你只需要關心Javascript方面的制服。着色器腳本中的其他代碼是着色器GLSL代碼的一部分,不能與JavaScript共享或轉換爲JavaScript,如果要對其進行更改,則需要修改着色器本身。

+0

啊道歉沒有花時間來正確地制定問題:-(需要將上述着色器腳本轉換爲格式: –

+0

oops - 返回鍵!=新行:-( –