2017-09-09 3 views
0

est-il pas possible d'utiliser les fonctions dans mon fichier surface.shader.fragment comme ceci:Shader Modificateurs Extend SceneKit

float time = u_time; 

float multiply(float n) { 
    return n*2.0; 
}; 
vec3 color = vec3(1.0,0.0,0.0); 
_surface.diffuse = vec4(color, 1.0); 

Si je supprime la fonction de multiplier le travail de tout comme prévu. Il existe une fonction globale personnalisée dans l'extrait de code dans SCNShadable doc.

Répondre

1

Ce qui suit devrait fonctionner:

float multiply(float n) { 
    return n*2.0; 
} 

#pragma body 
float time = u_time; 
vec3 color = vec3(1.0,0.0,0.0); 
_surface.diffuse = vec4(color, 1.0); 

La directive #pragma body est important ici et illustré dans le documentation for SCNShadable ainsi que le fichier d'en-tête SCNShadable.h.

Vous devez également utiliser le point d'entrée .surface si vous souhaitez modifier la couleur diffuse.

+0

Enfer ouais, merci! Je l'ai essayé avec le corps de #pragma, mais ma faute était, que j'ai laissé le flotteur temps = u_time; déclaration toujours en haut et pas en dessous du corps #pragma. – Franhu