J'essaie actuellement d'apprendre DirectX 11 à l'aide de C ++ dans Visual Studio 2017 et rencontrez un problème.
#include <Windows.h> #include <windowsx.h> #include <d3d11.h> #include <d3d12.h> #include <d3dcompiler.h> // include D3D Librararies #pragma comment (lib, "d3d11.lib") #pragma comment (lib, "d3d12.lib") #pragma comment (lib, "D3DCompiler.lib") // Definitions #define SCREEN_WIDTH 800 #define SCREEN_HEIGHT 600 // Global Declarations IDXGISwapChain *swapchain; // Pointer to Swap Chain Buffer ID3D11DeviceContext *devcon; // Pointer to managing Device for GPU ID3D11Device *dev; // Pointer to GPU ID3D11RenderTargetView *backBuffer; // A pointer to an object that holds info about the render target ID3D11VertexShader *pVS; // The Vertex shader ID3D11PixelShader *pPS; // The Pixel Shader struct VERTEX { FLOAT X, Y, Z; // Position D3DCOLORVALUE Color; // Color }; // float color2[4] = { 1.0f, 0.0f, 0.0f, 1.0f }; VERTEX OurVertex = { 0.0f, 0.5f, 0.0f, D3DCOLORVALUE(1.0f, 0.0f, 0.0f, 1.0f)}; // No suitable constructor exists to convert from "float" to "_D3DCOLORVALUE"
3 Réponses :
d3dcolorvalue code> n'a pas de constructeur prise 4
float code> s. Vous devriez utiliser Initialisation de la liste :
VERTEX OurVertex = {0.0f, 0.5f, 0.0f, {1.0f, 0.0f, 0.0f, 1.0f}};
@tedlyngmo Ted a essentiellement dit tout ce que vous devriez faire cela. P>
Cependant, en fonction de votre commentaire plus tôt, P>
Les bretelles bouclées sont utilisées pour D3DColorValue. Je garderai cela à l'esprit p> blockQuote>
Vous semblez y penser comme un cas particulier. Au lieu de cela, la manière de comprendre cela devrait être de savoir si vous appelez une fonction ou que vous créez un objet. P>
avec moderne C ++ S, l'initialisation de la liste est préférée dans la plupart des cas. Consultez cette question: Pourquoi l'initialisation de la liste est-elle bretelles bouclées) mieux que les alternatives? p>
Fondamentalement, le temps que vous puissiez utiliser
MyClass ObjectName {myvalues}; code> pour déclarer un objet, ou
myClass {myvalues}; code> si vous souhaitez créer une temporaire. De sorte que les parenthèses pouvaient être réservées aux appels de fonction ou aux objets avec
std :: initialisizer_list code> ctors. P>
Gardez à l'esprit que Pour Direct3D 11 Fonctions qui prennent une matrice de quatre flotteurs pour la couleur (telle que Comme vous êtes nouveau à DirectX 11, consultez Kit d'outil DirectX . p>
blockQuote> d3dcolorvalue code> est spécifiquement une construction Direct3D 9. Beaucoup de gens utiliseront quatre flotteurs pour la couleur par sommet (au moins lors de la démarrage), mais si vous vouliez utiliser un format de couleur emballé, le DirectXMath Type XMColor dans le
DirectX :: EmbackEdVector code> Espace de noms correspond à l'ancien
D3DColorValue code>. P>
ClearRenderTregeview code>, DirectXMath définit également un certain nombre de constantes de couleur dans le
DirectXColors.h code> en-tête . p>
Qu'en est-il de
sommet Ourvertex = {0.0F, 0.5F, 0.0F, D3DColorvalue {1.0F, 0.0F, 0.0F, 1.0F}}; code>?
Merci, ça a fonctionné. Ainsi, les accolades bouclées sont utilisées pour D3DColorValue. Je garderai cela à l'esprit.
Vérifiez la documentation,
_d3dcolorvalue code> est un
struct code>, vous devez donc probablement le faire comme
d3dcolorvalue {1.0f, 0.0f, 0.0f, 1.0f} Code>