La documentation concernant les nouvelles fonctions 3D n'étant pas terminée au moment de la traduction de la doc, elle contient des erreurs et lacunes
ci dessous une mis à jour de la doc concernant les shader + descriptif des shaderes prédéfinis
je donnerai par la suite quelques exemples d'utilisation
___________________________________________________________________________________________
- CreateShader
l'énumération des shaders prédéfinis n'a pas sa place ici mais dans CreateShaderMaterial
remarque:
Les shaders doivent généralement recevoir des paramètres pour fonctionner:
2 fonctions permettent de transmettre ces paramètres:
- MaterialShaderAutoParameter (parametre automatique)
- MaterialShaderParameter (parametre shader)
PureBasic permet également de fixer ces paramètres directement dans les programmes shader en ajoutant en fin de ligne de déclaration des 'uniform': "//" suivie soit:
- du numéro de paramètre automatique précédé d'un "+" (cf. constantes 'ParameterType' de la fonction MaterialShaderAutoParameter)
note: je fournirai plus tard un éditeur de shader pour simplifier l'affectation de ces numéros
- d'une ou plusieurs valeurs (séparée d'un espace) correpondant au paramètre shader (MaterialShaderParameter)
exemple:
uniform vec4 camera_pos;//+76 <- paramètre automatique #PB_Shader_CameraPosition
uniform vec4 fog_params;//+31 <- paramètre automatique #PB_Shader_FogParams
uniform vec3 speed;//0.5 1 0 <- paramètre shader 'speed'
uniform sampler2D diffuseMap;//1 <- paramètre shader numéro de texture
___________________________________________________________________________________________
- MaterialShaderAutoParameter
description :
les paramètres automatique correspondent aux paramètres du moteur 3D (positions de la camera, des lumières, couleur du matériel, brouillard...)
cette fonction permet de faire le lien entre les variable 'uniform' du shader et ces paramètres
exemple:
MaterialShaderAutoParameter(#Material, #PB_Shader_Fragment, #PB_Shader_CameraPosition, "camerapos", 0)
liste des paramètres automatiques:
https://www.ogre3d.org/docs/manual18/ma ... d_005fauto
____________________________________________________________________________________________
- MaterialShaderParameter
description :
cette fonction permet de fixer des paramètres spécifique au shader
exemple:
MaterialShaderParameter(#Material, #PB_Shader_Fragment, "bumpy", #PB_Shader_Float, 0.5,0,0,0)
____________________________________________________________________________________________
CreateShaderMaterial
le champ ShaderID doit contenir soit
- l'ID d'un shader préalablement créé avec CreateShader
- l'ID d'un shader prédéfini :
#PB_Material_ColorShader
#PB_Material_PerpixelShader
#PB_Material_BumpShader
#PB_Material_SkyShader
#PB_Material_WaterShader
#PB_Material_WaterShaderRTT
#PB_Material_OceanShader
#PB_Material_PointSpriteSphereShader
#PB_MaterialShader_CubicEnvShader <- nouveau
#PB_MaterialShader_CubicEnvBumpShader <- nouveau
___________________________________________________________________________________________
___________________________________________________________________________________________
descriptif des shaders prédéfinis:
___________________________________________________________________________________________
#PB_Material_ColorShader
Effet: couleur uniforme en 'perpixel'
texture(s) : aucune
MaterialShaderParameter : aucun
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
___________________________________________________________________________________________
#PB_Material_PerpixelShader
Effet: materiel en 'perpixel'
texture(s) :
- 0: sampler2D color
MaterialShaderParameter : aucun
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- LightAttenuation
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
___________________________________________________________________________________________
#PB_Material_BumpShader
Effet: materiel avec relief
texture(s) :
- 0: sampler2D color
- 1: sampler2D normal
MaterialShaderParameter :
#PB_Shader_Fragment
- float bumpy - valeur par défaut: 1 (ampliture du relief)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- LightAttenuation
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
remarque(s):
- les tangents doivent être définies (utiliser 'BuildMeshTangent')
___________________________________________________________________________________________
#PB_Material_SkyShader
Effet: permet d'afficher un ciel avec nuage et soleil
texture(s) :
- 0: uniform sampler2D color (nuage)
MaterialShaderParameter :
#PB_Shader_Fragment
- vec3 speed - valeur par défaut: 10 0 0 (vitesse des nuages X et Y)
- float height - valeur par défaut: 200 (hauteur de la 1ere couche de nuage)
- int layer - valeur par défaut: 2 (nombre de couche de nuage suplementaire)
- float scale - valeur par défaut: 4000 (echelle de la texture)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor, couleur): couleur du ciel soleil au zenith
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur du ciel soleil a l'horizon
- Fog
___________________________________________________________________________________________
#PB_Material_WaterShader
Effet : permet d'afficher une surface d'eau
texture(s) :
- 0: sampler2D normal
MaterialShaderParameter :
#PB_Shader_Fragment
- float scale - valeur par défaut: 0.1 (échelle de la texture)
- float height - valeur par défaut: 1 (hauteur des vagues)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur de l'eau (Alpha: opacité)
- SetMaterialColor(#Material, #PB_Material_SpecularColor, couleur): couleur du reflet du ciel
- Fog
___________________________________________________________________________________________
#PB_Material_WaterShaderRTT
Effet : permet d'afficher une surface d'eau avec reflet (via RTT)
texture(s) :
- sampler2D normal - texture n°0
- sampler2D RTT - texture n°1
MaterialShaderParameter : aucun
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur de l'eau (Alpha: opacité)
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
___________________________________________________________________________________________
#PB_Material_OceanShader
Effet : permet d'afficher une surface d'eau avec des vagues
texture(s) :
- 0: sampler2D normal
- 1: sampler2D color (écume)
MaterialShaderParameter :
#PB_Shader_Vertex
- float wavebig - valeur par défaut: 0.5 (amplitude des vagues)
- float swell - valeur par défaut: 0.5 (amplitude de la houle)
#PB_Shader_Fragment
- float wavelittle - valeur par défaut: 0.5 (amplitude des "petites" vagues)
- float foam - valeur par défaut: 0.5 (écume)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor, couleur): couleur de l'eau
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur du reflet du ciel
- Fog
remarque(s):
- la valeur alpha de la texture 'normal' contient la hauteur de la vague
___________________________________________________________________________________________
#PB_Material_PointSpriteSphereShader
Effet: affiche des sphere aux emplacement des sommets du mesh
texture(s) : aucune
MaterialShaderParameter : aucun
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, couleur)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog
remarque(s):
- la matière doit être de type PointSprite : SetMaterialAttribute(0,#PB_Material_PointSprite,1)
- les mesh doit être de type PointList : CreateMesh(#Mesh,#PB_Mesh_PointList)
- le rayon de la sphère est défini par la coordonnée de texture U
- la couleur de la sphère, est définie par la couleur du vertex
exemple: MeshVertex(posX, posY, posZ, 10, 0,RGB(255,0,0))
_______________________________________________________________________________________
#PB_MaterialShader_CubicEnv
Effet: reflection via texture cubique
texture(s) :
- 0: samplerCube cubemap
- 1: uniform sampler2D color
MaterialShaderParameter :
#PB_Shader_Fragment
- float glossy - valeur par défaut: 0.5 (intensité du reflet)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
remarque(s) :
- les textures cubiques doivent être 'clampées': SetMaterialAttribute(#texture, #PB_Material_TAM, #PB_Material_ClampTAM)
___________________________________________________________________________________________
#PB_MaterialShader_CubicEnvBump
Effet: réflexion via texture cubique avec relief
texture(s) :
- 0: samplerCube cubemap
- 1: sampler2D color
- 2: sampler2D normal
MaterialShaderParameter :
#PB_Shader_Fragment
- float glossy - valeur par défaut: 0.5 (intensité du reflet)
- float bumpy - valeur par défaut: 1 (amplitude du relief)
Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial
remarque(s) :
- les textures cubiques doivent être 'clampées': SetMaterialAttribute(#texture, #PB_Material_TAM, #PB_Material_ClampTAM)
- les tangents doivent être définies (utiliser 'BuildMeshTangent')