#25 

13-10-2012 08:09:25

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

Magun :

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


#26 

13-10-2012 10:06:59

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
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é wink

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


#27 

13-10-2012 11:45:44

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


#28 

13-10-2012 12:38:44

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


#29 

13-10-2012 15:00:37

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
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


#30 

13-10-2012 16:10:21

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

Bon, j'ai essayé les deux codes de shader que vous m'avez donné. Malheureusement, ils ne fonctionnent pas.

Pour celui-ci:

johnplayer :

fichier "shader.vert"

Code:

uniform mat4 mWorldViewProj;

void main(void)
{
    gl_Position = mWorldViewProj * gl_Vertex;    
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

fichier "shader.frag"

Code:

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 :

Code:

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

Dernière modification par Memorial76 (13-10-2012 16:12:03)

Hors ligne


#31 

13-10-2012 19:49:46

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#32 

14-10-2012 09:10:43

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


Code:

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


#33 

14-10-2012 19:16:12

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#34 

14-10-2012 20:38:54

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

johnplayer :

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


#35 

14-10-2012 22:03:36

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.

Dernière modification par johnplayer (17-10-2012 08:57:22)


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


#36 

15-10-2012 12:57:48

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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):

Code:

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


#37 

15-10-2012 13:20:21

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

"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


#38 

15-10-2012 13:38:40

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


#39 

15-10-2012 13:54:39

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#40 

15-10-2012 14:10:29

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


#41 

15-10-2012 14:11:48

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#42 

16-10-2012 08:59:39

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

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


#43 

16-10-2012 10:02:54

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

C'est à n'y rien comprendre!!!
Voici mon code de test:

Code:

//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:

Code:

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:

Code:

//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


#44 

16-10-2012 14:49:09

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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)

Dernière modification par johnplayer (16-10-2012 14:55:57)


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


#45 

16-10-2012 16:22:08

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

johnplayer :

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 smile

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

Dernière modification par Memorial76 (16-10-2012 16:49:29)

Hors ligne


#46 

16-10-2012 18:08:22

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#47 

16-10-2012 18:11:28

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

Super, merci pour les précisions. Je copie de ce pas ton callback à la place du mien...

Toujours les mêmes erreurs...

Dernière modification par Memorial76 (16-10-2012 18:23:16)

Hors ligne


#48 

16-10-2012 19:10:27

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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


#49 

16-10-2012 19:46:06

Memorial76
Membre
Date d'inscription: 19-02-2010
Messages: 67

Malheureusement, ce n'est toujours pas ça sad

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
22 invités en ligne
Aucun membre connecté
RSS Feed