IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Shader DirectX11 [DirectX 11]


Sujet :

DirectX

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2013
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Shader DirectX11
    Bonjour,

    je suis en train de suivre les tutoriels de programmation directX du site: http://www.rastertek.com/

    Ils sont vraiment très bien fait mais ils ne sont pas prévu pour les dernières montures de Windows, Visual et DirectX.

    Dans la partie qui introduit les shaders et le HLSL, l'auteur du tuto utilise des bibliothèques qui ne sont plus présentes et je doit, j'essaye d'adapter le code.
    En l’occurrence, d3d10math.h n'est plus; Vive DirectXMath.h.

    La transposition du code n'est pas très compliqué vu que MS fournit une table de conversion sur msdn. Cependant malgré que mon code compile nickel, que le programme s’exécute sans erreur, qu'il se termine proprement, je n'arrive pas à afficher ce p***** de triangle vert. Je bloque .

    Voici les parties modifiées par mes soins:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    void CameraClass::Render()
    {
    	XMFLOAT3 up, position, lookAt;
    	float yaw, pitch, roll;
    	XMMATRIX rotationMatrix;
     
     
    	// Setup the vector that points upwards.
    	up.x = 0.0f;
    	up.y = 1.0f;
    	up.z = 0.0f;
     
    	// Setup the position of the camera in the world.
    	position.x = m_positionX;
    	position.y = m_positionY;
    	position.z = m_positionZ;
     
    	// Setup where the camera is looking by default.
    	lookAt.x = 0.0f;
    	lookAt.y = 0.0f;
    	lookAt.z = 1.0f;
     
    	// Set the yaw (Y axis), pitch (X axis), and roll (Z axis) rotations in radians.
    	pitch = m_rotationX * 0.0174532925f;
    	yaw   = m_rotationY * 0.0174532925f;
    	roll  = m_rotationZ * 0.0174532925f;
     
    	// Create the rotation matrix from the yaw, pitch, and roll values.
    	rotationMatrix = XMMatrixRotationRollPitchYaw(pitch, yaw, roll);
     
    	// Transform the lookAt and up vector by the rotation matrix so the view is correctly rotated at the origin.
    	XMVector3TransformCoord(XMLoadFloat3(&lookAt), rotationMatrix);
    	XMVector3TransformCoord(XMLoadFloat3(&up), rotationMatrix);
     
    	// Translate the rotated camera position to the location of the viewer.
    	XMStoreFloat3(&lookAt,(XMLoadFloat3(&position) + XMLoadFloat3(&lookAt)));
     
    	// Finally create the view matrix from the three updated vectors.
    	m_viewMatrix = XMMatrixLookAtLH(XMLoadFloat3(&position), XMLoadFloat3(&lookAt), XMLoadFloat3(&up));
    .
    .
    .
    return;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    bool ColorShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
    {
    	HRESULT result;
    	ID3DBlob* errorMessage;
    	ID3DBlob* vertexShaderBuffer;
    	ID3DBlob* pixelShaderBuffer;
    	D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
    	unsigned int numElements;
    	D3D11_BUFFER_DESC matrixBufferDesc;
     
    	// Initialize the pointers this function will use to null.
    	errorMessage = 0;
    	vertexShaderBuffer = 0;
    	pixelShaderBuffer = 0;
     
    	UINT flags = D3DCOMPILE_ENABLE_STRICTNESS;
    #if defined( DEBUG ) || defined( _DEBUG )
        flags |= D3DCOMPILE_DEBUG;
    #endif
     
    	const D3D_SHADER_MACRO defines[] = 
        {
            "EXAMPLE_DEFINE", "1",
            NULL, NULL
        };
     
    	// Compile the vertex shader code.
    	result = D3DCompileFromFile(vsFilename, defines, D3D_COMPILE_STANDARD_FILE_INCLUDE, "main", "vs_5_0", flags
    		, 0, &vertexShaderBuffer, &errorMessage);
     
    	if(FAILED(result))
    	{
    		// If the shader failed to compile it should have writen something to the error message.
    		if(errorMessage)
    		{
    			OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
    		}
    		// If there was nothing in the error message then it simply could not find the shader file itself.
    		else
    		{
    			MessageBox(hwnd, (LPCSTR)vsFilename, "Missing Shader File", MB_OK);
    		}
     
    		return false;
    	}
     
    	// Compile the pixel shader code.
    	result = D3DCompileFromFile(psFilename, defines, D3D_COMPILE_STANDARD_FILE_INCLUDE, "main", "ps_5_0", flags, 0,
    				       &pixelShaderBuffer, &errorMessage);
    	if(FAILED(result))
    	{
    		// If the shader failed to compile it should have writen something to the error message.
    		if(errorMessage)
    		{
    			OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
    		}
    		// If there was  nothing in the error message then it simply could not find the file itself.
    		else
    		{
    			MessageBox(hwnd, (LPCSTR)psFilename, "Missing Shader File", MB_OK);
    		}
     
    		return false;
    	}
    .
    .
    .
    return true;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    bool ColorShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX& worldMatrix, 
    					   XMMATRIX& viewMatrix, XMMATRIX& projectionMatrix)
    {
    	HRESULT result;
    	D3D11_MAPPED_SUBRESOURCE mappedResource;
    	MatrixBufferType* dataPtr;
    	unsigned int bufferNumber;
     
    	// Transpose the matrices to prepare them for the shader.
    	worldMatrix = XMMatrixTranspose(worldMatrix);
    	viewMatrix = XMMatrixTranspose(viewMatrix);
    	projectionMatrix = XMMatrixTranspose(projectionMatrix);
    .
    .
    .
    return true;
    }
    Si quelqu'un a déjà ou est en train de faire la même migration que moi ou que vous avez une idée sur ce qui plante je suis preneur.

    D'avance merci.

    Erreur trouvée: Je réinitialisé le buffer après l'avoir paramétré . Shame on me!!

    Par contre pour ceux qui veulent migrer leur code Dx10 vers Dx11 version VS2012, mon code fonctionne.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut DirectX11 - Chapitre 4 (Tampons et Shader) VS2013 / W8.1
    Bonjour à tous.

    Tout d'abords, Excelent tutoriel. un peu ancien pour la version de Directx actuel, mais cela on s'y retrouve facilement avec les nouvelles fonctions, types de données, ainsi que les nouvelle Lib et Dll à référencer.

    Cela dit, Apres avoir patauger pendant deux jour sur l'erreur qui empechait l'execution et l'affichage de mon triangle dans ma premiere scene 3D, je me retrouve confronter à un nouveau probleme.
    Je n'arrive pas à afficher un Carré pour terminer les exercice de fin de chapitre.

    Modification du code pour un carré à la place d'un triangle: Fichier ModelClass.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //Fixer la taille du tableau de sommets
    	m_vertexCount = 4;
     
    	//Fixer la taille du tableau des indices
    	m_indexCount = 4;
     
    	//Créer le tableau de sommets.
    	vertices = new VertexType[m_vertexCount];
    	if (!vertices) return false;
     
    	//Créer le tableau d'indices
    	indices = new unsigned long[m_indexCount];
    	if (!indices) return false;
     
    	//Charger les données dans le tableau de sommets
    	vertices[0].position = DirectX::XMFLOAT3(-1.f, -1.f, 0.f);//Bas gauche
    	vertices[0].color = DirectX::XMFLOAT4(1.f, 0.f, 0.f, 1.f);
     
    	vertices[1].position = DirectX::XMFLOAT3(-1.f, 1.f, 0.f);//Haut gauche
    	vertices[1].color = DirectX::XMFLOAT4(0.f, 1.f, 0.f, 1.f);
     
    	vertices[2].position = DirectX::XMFLOAT3(1.f, 1.f, 0.f);//Haut droit
    	vertices[2].color = DirectX::XMFLOAT4(0.f, 0.f, 1.f, 1.f);
     
    	vertices[3].position = DirectX::XMFLOAT3(1.f, -1.f, 0.f);//Bas droit
    	vertices[3].color = DirectX::XMFLOAT4(1.f, 1.f, 1.f, 1.f);
     
    	//Charger les données dans le tableau d'indices
    	indices[0] = 0; //Bas gauche
    	indices[1] = 1; //haut gauche
    	indices[2] = 2; //haut droit
    	indices[3] = 3; //bas droit
    Resultat de la modification:
    Nom : TriangleRectangle.png
Affichages : 240
Taille : 68,2 Ko

    Pourrez-vous m'aider à y voir plus clair?
    Je ne souhaite plus perdre du temps à chercher comme un fou, une erreur qui ne me semble pas evident.
    Merci d'avance.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Mayhem50 Voir le message
    Bonjour,

    je suis en train de suivre les tutoriels de programmation directX du site: http://www.rastertek.com/

    Ils sont vraiment très bien fait mais ils ne sont pas prévu pour les dernières montures de Windows, Visual et DirectX.

    Dans la partie qui introduit les shaders et le HLSL, l'auteur du tuto utilise des bibliothèques qui ne sont plus présentes et je doit, j'essaye d'adapter le code.
    En l’occurrence, d3d10math.h n'est plus; Vive DirectXMath.h.

    La transposition du code n'est pas très compliqué vu que MS fournit une table de conversion sur msdn. Cependant malgré que mon code compile nickel, que le programme s’exécute sans erreur, qu'il se termine proprement, je n'arrive pas à afficher ce p***** de triangle vert. Je bloque .

    Voici les parties modifiées par mes soins:
    ....
    As-tu pu afficher un triangle?
    Qu'as tu modifier pour y arriver??

  4. #4
    Membre actif Avatar de ShadowTzu
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    juin 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : juin 2005
    Messages : 243
    Points : 296
    Points
    296
    Par défaut
    il faut former 2 triangles pour avoir un carré:
    indices[0] = 0; //Bas gauche
    indices[1] = 1; //haut gauche
    indices[2] = 2; //haut droit

    indices[3] = 0; //Bas gauche
    indices[4] = 2; //haut droit
    indices[5] = 3; //bas droit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Shader distortion texture
    Par Dranor dans le forum DirectX
    Réponses: 13
    Dernier message: 28/07/2004, 22h58
  2. effets de pixel shaders 1.1
    Par cemoi dans le forum DirectX
    Réponses: 11
    Dernier message: 12/12/2003, 16h13
  3. pixel shader 2.0
    Par trois_1 dans le forum DirectX
    Réponses: 3
    Dernier message: 20/10/2003, 16h39
  4. Vertex et Pixel Shader
    Par Riko dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/06/2003, 17h45
  5. carte graphique et pixels shader
    Par yeeep dans le forum DirectX
    Réponses: 2
    Dernier message: 26/04/2003, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo