13-10-2012 06:09:25
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 90.51.200.139
- Courriel
Magun Ecris:
crée un scene node par hexagone n'est pas une bonne méthode et tu auras de gros problèmes de performances sur des maps un petit peut conséquante
car cella induit a de nombreuse modifications de matrice et de matériaux
un hexagone ne reprèsente casiment rien en terme de performance, le faite que tu les rende séparément deviendras un problème
au lieux d'avoire 750fps sur une map tu peut te retrouver a 3fps ne seraice qu'avec 1M de node, a toi de voire
je n'ais pas encore essayé avec un grand nombre de node mais, je ne pense pas arriver à des compartiments de 1M Hexagone... à surveiller tout de même.
pour ce qui est des matrices dans le premier cas sa définie la matrice de l'object que tu renderas après la transformations, en gros sa bouge l'obj en fonctions de la camera (qui est virtuelle en ogl)
dans le second cas <<transposing a matrix is the act of turning it on its side- swapping the columns and rows.>> ça doit faire un flip du world je pensse (surment utiliser pour une refractions ??)
mais normalement pour le rendue tu n'utilise que << driver>setTransform(video::ETS_WORLD, AbsoluteTransformation); >>
Je pense que tu devrais t'appliquer d'avantage sur ton français, ça te rendrais plus lisible.
Hors ligne
13-10-2012 08:06:59
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 37.220.56.185
- Courriel Site web
je suis d'accord avec toi pour le français, j'ai malheureusement beaucoup de l’aucune, non pas que je ne puis écrire convenablement mais plutôt un manque de connaissance asse impressionnant dans ce domaine... de plus j'écris un petit peut en "franglais", ça n'arrange pas les choses, je suppose .... mais il n'y a pas trop le choix dans l'informatique. sans parler que j'oublie des mots, etc... certain facteur influe pas mal sur ma qualité d'écriture, pourtant mais connaissance ne sont pas meilleur pour au temps ... Bref navré ![]()
ps: pour merger t'est hexagone rien de compliquer le code que je t'est montré représente déjà 70% de la solution, mais c'est peut-être un peut compliquer si tu viens commencé irrlicht il est vrai.
Hors ligne
13-10-2012 09:45:44
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 90.51.200.139
- Courriel
Soit, mais je t'avouerai que je ne vais pas changer tout de suite mon principe. Je vais déjà me concentrer sur l'apprentissage des shaders et je reviendrai là-dessus lorsque le problème se posera. Merci en tout cas.
Hors ligne
13-10-2012 10:38:44
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 90.51.200.139
- Courriel
Bon, ça y'est, j'ai fini le tuto Irrlicht sur les Shaders. Je sais maintenant comment les intégrer et les utiliser comme matériaux. Oui mais... je ne sais toujours pas comment en écrire un qui combine deux textures. Ou plutôt, je ne sais pas comment en écrire un tout court...
Hors ligne
13-10-2012 13:00:37
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 37.220.56.185
- Courriel Site web
Vertex Program Source
Code c++ :
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}Fragment Program Source
Code c++ :
uniform sampler2D myTexture1;
uniform sampler2D myTexture2;
void main (void)
{
vec4 texval1 = texture2D(myTexture, vec2(gl_TexCoord[0]));
vec4 texval2 = texture2D(myTexture2, vec2(gl_TexCoord[1]));
gl_FragColor = 0.5*(texval1 + texval2);
}Hors ligne
13-10-2012 14:10:21
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 90.51.142.210
- Courriel
Bon, j'ai essayé les deux codes de shader que vous m'avez donné. Malheureusement, ils ne fonctionnent pas.
Pour celui-ci:
johnplayer Ecris:
fichier "shader.vert"uniform mat4 mWorldViewProj; void main(void) { gl_Position = mWorldViewProj * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; }
fichier "shader.frag"uniform sampler2D texture_sol; uniform sampler2D texture_herbe; uniform float alpha; // permet de modifier l'alpha de l'herbe pour chaque hexagone indépendamment void main (void) { vec4 col0 = texture2D(texture_sol, vec2(gl_TexCoord[0])); vec4 col1 = texture2D(texture_herbe, vec2(gl_TexCoord[0])); gl_FragColor = col0*(1-alpha) + col1*alpha; }
j'obtiens: Error X3000: Syntax error: unexpected token mWorldViewProj
Pour celui-la:
Magun Ecris:
Code c++ : void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_TexCoord[1] = gl_MultiTexCoord1; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } Fragment Program Source Code c++ : uniform sampler2D myTexture1; uniform sampler2D myTexture2; void main (void) { vec4 texval1 = texture2D(myTexture, vec2(gl_TexCoord[0])); vec4 texval2 = texture2D(myTexture2, vec2(gl_TexCoord[1])); gl_FragColor = 0.5*(texval1 + texval2); }
j'obtiens également une erreur:
X3004: syntax error: undeclared identifier gl_TexCoord
Et comme je ne comprend pas grand chose, impossible de corriger tout seul.
Mais j'ai quand même l'impression d'avancer petit à petit. Merci à vous
Hors ligne
13-10-2012 17:49:46
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.218.35
- Courriel
Montres-moi le callback que t'utilises pour le shader que je t'ai passé. Le problème vient peut-être de là.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
14-10-2012 07:10:43
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 90.51.142.210
- Courriel
Il s'agit d'une version simplifiée de celle du tuto. Je n'ai gardé que ce qui m'intéressait (HLSL). J'ai également changé quelques noms de constantes histoire de les rendre plus parlantes pour moi. Mais je les ai également bien renommées dans les fichiers du shaders.
Merci
video::IVideoDriver* pDriver = pServices->getVideoDriver();
core::matrix4 invertedWorldMatrix = pDriver->getTransform(video::ETS_WORLD);
//inverted world matrix
invertedWorldMatrix.makeInverse();
pServices->setVertexShaderConstant("mInvertedWorld", invertedWorldMatrix.pointer(), 16);
//clip matrix
core::matrix4 worldViewProjectionMatrix;
worldViewProjectionMatrix = pDriver->getTransform(video::ETS_PROJECTION);
worldViewProjectionMatrix *= pDriver->getTransform(video::ETS_VIEW);
worldViewProjectionMatrix *= pDriver->getTransform(video::ETS_WORLD);
pServices->setVertexShaderConstant("mWorldViewProjection", worldViewProjectionMatrix.pointer(), 16);
//Camera position
core::vector3df CamPos = m_pDevice->getSceneManager()->getActiveCamera()->getAbsolutePosition();
pServices->setVertexShaderConstant("mLightPosition", reinterpret_cast<f32*>(&CamPos), 3);
//set LightColor
video::SColorf LightColor(0.0f, 1.0f, 1.0f, 0.0f);
pServices->setVertexShaderConstant("mLightColor", reinterpret_cast<f32*>(&LightColor), 4);
//set transposed world matrix
core::matrix4 transposedWorldMatrix = pDriver->getTransform(video::ETS_WORLD);
transposedWorldMatrix.getTransposed();
pServices->setVertexShaderConstant("mTransposedWorld", transposedWorldMatrix.pointer(), 16);Hors ligne
14-10-2012 17:16:12
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.218.35
- Courriel
Au fait, je t'ai donné un shader opengl donc le "X3004: syntax error: undeclared identifier gl_TexCoord" est normal si tu utilise DIRECTX.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
14-10-2012 18:38:54
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
johnplayer Ecris:
Au fait, je t'ai donné un shader opengl donc le "X3004: syntax error: undeclared identifier gl_TexCoord" est normal si tu utilise DIRECTX.
D'où l'intérêt de comprendre ce que l'on fait :-/...
Hors ligne
14-10-2012 20:03:36
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.218.35
- Courriel
Tiens c'est un exemple sous DIRECTX que je viens de faire, il marche, je l'ai testé. Par contre, j'utilise code::block et irrlicht SVN.
(nouveau lien page3)
L'utilisation est simple tu modifie alpha_herbe (entre 0 et 1) dans main.cpp pour faire varier la présence d'herbe.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
15-10-2012 10:57:48
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Merci encore pour ton travail. N'y connaissant toujours rien en shader, j'ai lancer ton .exe et j'obtiens un hexagone tout noir avec comme message d'erreur:
"Could not load shader funtion D3DXAssemblerShader from dll, shader disabled: d3dx9_43.dll"
"Could not load shader funtion D3DXCompileShader from dll, shader disabled: d3dx9_43.dll"
J'ai ensuite essayé mon code avec ton shader directement et j'obtiens:
"<42> warning X4702: complement opportunity missed because input result WAS clamped from 0 to 1"
"<38> error X4515: cannot bind sampler to user specified stage. In ps_1_1, samplers must be bound to the same stage as their TEXCOORD"
J'imagine que le problème e doit pas être bien compliqué mais, n'y connaissant rien, je vais devoir encore te solliciter.
Voici mon code utilisant le shader (le IShaderCallBack étant celui posté plus haut):
video::IGPUProgrammingServices* pGPU = pDriver->getGPUProgrammingServices();
s32 newMaterialType1 = 0;
s32 newMaterialType2 = 0;
io::path psFileName = "./Textures/Shaders/dx.hlsl";
io::path vsFileName = "./Textures/Shaders/dx.hlsl";
CShaderCallBack* pShaderCallBack = new CShaderCallBack(pDevice);
newMaterialType1 = pGPU->addHighLevelShaderMaterialFromFiles(
vsFileName, "vertexMain", video::EVST_VS_1_1,
psFileName, "pixelMain", video::EPST_PS_1_1,
pShaderCallBack, video::EMT_SOLID);
newMaterialType2 = pGPU->addHighLevelShaderMaterialFromFiles(
vsFileName, "vertexMain", video::EVST_VS_1_1,
psFileName, "pixelMain", video::EPST_PS_1_1,
pShaderCallBack, video::EMT_TRANSPARENT_ADD_COLOR);
pShaderCallBack->drop();Voila, en te remerciant par avance une fois de plus
Hors ligne
15-10-2012 11:20:21
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
"Could not load shader funtion D3DXAssemblerShader from dll, shader disabled: d3dx9_43.dll"
"Could not load shader funtion D3DXCompileShader from dll, shader disabled: d3dx9_43.dll"
Mets à jour directX, il te manque un composant. Pour ma part, je suis sous seven.
version finale de directx9
newMaterialType2 = pGPU->addHighLevelShaderMaterialFromFiles(
vsFileName, "vertexMain", video::EVST_VS_1_1,
psFileName, "pixelMain", video::EPST_PS_1_1,
pShaderCallBack, video::EMT_TRANSPARENT_ADD_COLOR);
C'est pas "video::EMT_TRANSPARENT_ADD_COLOR", c'est "video::EMT_SOLID".
Tu utilises quoi comme IDE? Tu as quoi comme OS? Et quel est ta carte graphique?
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
15-10-2012 11:38:40
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Après vérification, je suis bien en directX 11.
Je développe avec Visual c++ 2010 sous windows 7. Ma carte graphique est une nVidia GForce G210M pour Asus Notebook (oui, un portable). Je sais qu'avec cette configuration, je ne peux pas mettre à jour les pilotes de la carte graphique qui doivent rester d'origine (problème connu). Peut-être que ça vient de là...
Concernant le deuxième matériau newMaterialType2 il s'agit d'un essai (voire plus haut dans cette discussion) mais le premier (newMaterialType1) est bien EMT_SOLID
Hors ligne
15-10-2012 11:54:39
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
Même si tu est sous dx11, il faut mettre à jour DX9 car ce sont deux composant distincts il me semble. Donc essaie de mettre à jour avec le lien que je t'es donné plus haut, ça devrait résoudre ton problème.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
15-10-2012 12:10:29
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Bien, nous progressons à grand pas...
J'ai réinstaller les composants DX9 manquants: il y a bien un problème de rétrocompatibilité entre DX11 et DX9. C'est réglé et ton exe fonctionne à merveille. En revanche, j'ai essayé rapidement dans mon code et ça ne fonctionne toujours pas. J'y replonge dès que j'ai un peu de temps.
Merci
Hors ligne
15-10-2012 12:11:48
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
Etudies le "main.cpp" que je t'ai passé, à mon avis tu n'as pas tout mis dans ton code.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
16-10-2012 06:59:39
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Bon, je n'ai pas vraiment eu le temps de chercher donc je n'ai pas trouvé...
Par contre, est-ce qu'un modérateur pourrait déplacer ce sujet dans la section "shaders" vu la tournure prise par les évènements
Merci
Hors ligne
16-10-2012 08:02:54
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
C'est à n'y rien comprendre!!!
Voici mon code de test:
//CREATION D'UN CUSTOM SCENE NODE: HEXAGONE
CIrrHexagoneSceneNode* myNode = new CIrrHexagoneSceneNode(pSceneMgr->getRootSceneNode(), pSceneMgr, pWorldManager, NEWCASE);
CIrrHexagoneSceneNode* myNode2 = new CIrrHexagoneSceneNode(pSceneMgr->getRootSceneNode(), pSceneMgr, pWorldManager, NEWCASE2);
CIrrHexagoneSceneNode* myNode3 = new CIrrHexagoneSceneNode(pSceneMgr->getRootSceneNode(), pSceneMgr, pWorldManager, NEWCASE3);
//SHADERS
video::IGPUProgrammingServices* pGPU = pDriver->getGPUProgrammingServices();
s32 newMaterialType1 = 0;
s32 newMaterialType2 = 0;
io::path psFileName = "./Textures/Shaders/dx.hlsl";
io::path vsFileName = "./Textures/Shaders/dx.hlsl";
CShaderCallBack* pShaderCallBack = new CShaderCallBack(pDevice);
newMaterialType1 = pGPU->addHighLevelShaderMaterialFromFiles(
vsFileName, "vertexMain", video::EVST_VS_1_1,
psFileName, "pixelMain", video::EPST_PS_1_1,
pShaderCallBack, video::EMT_SOLID);
pShaderCallBack->drop();
myNode->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
myNode2->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
myNode3->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
myNode3->drop();
myNode2->drop();
myNode->drop();En résumé, je crée 3 scenes nodes différents: myNode, myNode2 et myNode3 auxquels j'applique le shader en question (et qui ne fonctionne toujours pas).
Dans l'état actuel des choses, mes 3 nodes sont noirs. Normal, le shader ne fonctionne pas. Sauf, que, si je ne l'applique plus au myNode2:
myNode->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
//myNode2->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
myNode3->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);...mes 3 nodes affichent la texture de base (couleur terre).
Si, maintenant, je ne l'applique qu'à myNode2:
//myNode->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
myNode2->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);
//myNode3->setMaterialType((video::E_MATERIAL_TYPE)newMaterialType1);...mes trois nodes sont noirs comme si le shader défaillant leur était appliqué...
Tout se passe comme si ce que j'appliquais à myNode2 était valable pour tous les autres.
J'ai bien essayé de le supprimer mais alors, le comportement se reproduit pour le node arrivant en second (ici donc, myNode3).
Je donne pourtant bien 3 identifiants différents et aucun n'est (à ma connaissance) parent de l'autre.
Ceci m'amène d'ailleurs à une idée: afficher le sceneGraph dans une fenêtre histoire de pouvoir visualiser ma scène...
Hors ligne
16-10-2012 12:49:09
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
J'ai une question : "CIrrHexagoneSceneNode" est dérivée de "ISceneNode"?
Parce que si c'est le cas, retires ces lignes :
Code c++ :
myNode3->drop();
myNode2->drop();
myNode->drop();
Créés 1 Callback et 1 matérial par node. C'est peut-être de là que vient le problème.
Sinon, essaies de charger "hexagone.3ds" que je t'ai donné et appliques-lui le shader dans ton programme. Si ça marche, le problème vient de "CIrrHexagoneSceneNode".
Ah, et vérifies que tu créés IrrlichtDevice avec Direct3D9. Je ne te prends pas pour un idiot mais on ne sait jamais.
Au fait, j'espère que tu envoies bien la variable "alpha_herbe" au GPU (dans ton callback) car sinon ça ne marchera pas correctement.
Edit : Je crois avoir compris un de tes problème. Le material de ton node ne doit pas pouvoir recevoir la lumière!
Code c++ :
node->setMaterialFlag(EMF_LIGHTNING, false)
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
16-10-2012 14:22:08
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
johnplayer Ecris:
J'ai une question : "CIrrHexagoneSceneNode" est dérivée de "ISceneNode"?
Parce que si c'est le cas, retires ces lignes :Code c++ :
myNode3->drop(); myNode2->drop(); myNode->drop();
impeccable, à priori c'était ça
Ah, et vérifies que tu créés IrrlichtDevice avec Direct3D9. Je ne te prends pas pour un idiot mais on ne sait jamais.
J'ai quand même vérifié: c'est très souvent que ce genre de détail crée des problèmes qu'on met trois plombes à trouver. Résultat: je suis bien en Direct3D9.
Au fait, j'espère que tu envoies bien la variable "alpha_herbe" au GPU (dans ton callback) car sinon ça ne marchera pas correctement.
Le problème est probablement là: je n'ai pas modifié mon callback depuis que tu m'as fourni ton shader. N'y comprenant toujours rien à la rédaction des ces satanés shaders...
Edit : Je crois avoir compris un de tes problème. Le material de ton node ne doit pas pouvoir recevoir la lumière!Code c++ :
node->setMaterialFlag(EMF_LIGHTNING, false)
Nope, pour l'instant tous mes hexagones sont créés avec setMaterialFlag(EMF_LIGHTNING, false), justement pour éviter ce genre de soucis. D'ailleurs, est-ce que je dois m'attendre à des problèmes de shader lorsque je voudrais ajouter des lumières?
Merci à toi pour toutes ces réponses
EDIT: Au fait, j'ai créé mon sceneTreeView, une version allégée de celui du toturiel 21, que j'ai modifié pour pouvoir être inséré "à la va vite" dans un projet. Sauf que comme mes hexagones sont des customSceneNode, j'ai un type à "NULL".
D'où ma question, comment peut-on créer un type autre que ceux inclus dans Irrlicht: ESCENE_NODE_TYPE? Y'a pas de "setType()"...
EDIT 2: j'ai ajouté l'envoi de "alpha_herbe" dans mon callback et j'ai toujours mes erreurs de compilation sur le pixelshader:
<42> warning x4702: complement opportunity missed because input result WAS clamped from 0 to 1
<38> error X4515: cannot bind sampler to user specified stage. In ps_1_1, samplers must be bound to the same stage as their TEXCOORD
Hors ligne
16-10-2012 16:08:22
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
réponse à EDIT:
ESCENE_NODE_TYPE est une énumération donc modification des sources pour l'ajout d'une valeur.
réponse à EDIT2:
Pour ton callback, pourquoi t'embêter? Copies celui que je t'ai donné.
Pour les shaders rien de compliqué:
Le callback sert de lien entre ton programme C++ et le fichier de shader.
Dans le fichier shader, quand tu veux importer une valeur depuis ton programme C++, tu la déclares uniform.
ex: uniform float alpha; // Le GPU s'attendra alors à ce que tu lui envoie la valeur de cette variable depuis le callback
Pour envoyer la valeur depuis ton programme C++, tu mets dans ton callback:
1/ Si c'est une variable utilisé par le pixel shader:
services->setPixelShaderConstant("alpha", &alpha_herbe, 1);
2/ Si c'est une variable utilisé par le vertex shader:
services->setVertexShaderConstant("alpha", &alpha_herbe, 1);
Le premier paramètre, c'est le nom de la variable dans le fichier de shader dans ce cas c'est "alpha" car on a déclaré "uniform float alpha". le deuxième, un pointeur sur une variable float. Le troisième, c'est le nombre de float que tu envoies.
Par exemple, une matrice c'est au final un float[4][4], en mémoire ça équivaut à un float[16]. Donc tu mettras : services->setVertexShaderConstant("mWorldViewProj", mWorldViewProj.pointer(), 16);.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
16-10-2012 16:11:28
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Super, merci pour les précisions. Je copie de ce pas ton callback à la place du mien...
Toujours les mêmes erreurs...
Hors ligne
16-10-2012 17:10:27
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.86.248
- Courriel
Essaie un truc:
Remplaces la ligne 42 "Output.RGBColor = col0*(1-alphafinal) + col1*alphafinal;" (c'est sur cette ligne qu'il y a une valeur tronquée) par "Output.RGBColor = col0*(1.0f-alphafinal) + col1*alphafinal;".
Au final, j'ai juste changer le 1 par 1.0f. A mon avis, il n'aime pas le (int - float) et il le tronque en un int d'où une couleur erronée. Avec le 1.0f, il a (float - float) donc il devrait ne plus affiché le "warning x4702".
Pour l'autre erreur, on verra après.
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
16-10-2012 17:46:06
- Memorial76
- Membres
- Date d'inscription:
- Messages: 67
- IP: 92.152.137.13
- Courriel
Malheureusement, ce n'est toujours pas ça ![]()
Hors ligne



