none
Erreur dans la déclaration de variable RRS feed

  • Question

  • Bonjour,

    Je suis débutant et j'essais d'utiliser Directx avec VC++ 2008 mais lorque je compile le code suivant, une erreur m'indique que vBuffer n'est pas déclaré dans la fonction Render(). Que dois je faire pour corriger ce problème?

    #pragma once
    
    namespace Archi_3D {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	using namespace Microsoft::DirectX;
    	using namespace Microsoft::DirectX::Direct3D;
    	using namespace Microsoft::DirectX::Diagnostics;
    
    
    	public ref class Composant_3D : public System::Windows::Forms::Form
    	{
    	
    	private: String ^Component_Name;
    
    	//Direct 3D device
    	private: Microsoft::DirectX::Direct3D::Device^ device;
    		
    	//Direct 3D Vertrices
    	private: array<CustomVertex::TransformedColored, 1>^ Vertices;
    
    
    	private: System::Windows::Forms::Panel^  pnl_Visu_3D;
    	private: System::ComponentModel::IContainer^  components;
    
    			 
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Required method for Designer support - do not modify
    		/// the contents of this method with the code editor.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->pnl_Visu_3D = (gcnew System::Windows::Forms::Panel());
    			this->SuspendLayout();
    			// 
    			// pnl_Visu_3D
    			// 
    			this->pnl_Visu_3D->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D;
    			this->pnl_Visu_3D->Location = System::Drawing::Point(28, 41);
    			this->pnl_Visu_3D->Name = L"pnl_Visu_3D";
    			this->pnl_Visu_3D->Size = System::Drawing::Size(618, 437);
    			this->pnl_Visu_3D->TabIndex = 0;
    			// 
    			// Composant_3D
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(677, 522);
    			this->Controls->Add(this->pnl_Visu_3D);
    			this->Name = L"Composant_3D";
    			this->Text = L"Composant_3D";
    			this->ResumeLayout(false);
    
    		}
    
    #pragma endregion
    
    	public:
    		Composant_3D(String ^Nom_du_composant)
    		{
    			Component_Name = Nom_du_composant;
    
    			// Initialisation de la Windows Form
    			InitializeComponent();
    			this->Text = Component_Name;	//Renomme le titre dela fenêtre avec le nom du fichier
    			
    			InitializeGraphics();		//Initialisation de Direct 3D
    			CreateTriangle();
    
    			// Evènement pour la boucle de rendu
    			this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Composant_3D::Composant_3D_Paint);
    		}
    
    //Procédure d'initialisation du Device
    private : Void InitializeGraphics()
    		{
    			PresentParameters^ presentParams = gcnew PresentParameters();
    			presentParams->Windowed = true;
    			presentParams->SwapEffect = SwapEffect::Discard;
    			presentParams->EnableAutoDepthStencil = true;
    			presentParams->AutoDepthStencilFormat = DepthFormat::D16;
    			device = gcnew Device(0, DeviceType::Hardware, pnl_Visu_3D,	CreateFlags::SoftwareVertexProcessing, presentParams);
    		}
    
    // Procédure de création de notre triangle
    private :  Void CreateTriangle()
    		{
    			// On défini les vertices de notre triangle
    			Vertices = gcnew array<CustomVertex::TransformedColored, 1>(3);
    			Vertices[0] = CustomVertex::TransformedColored(200.0f, 125.0f, 0.5f, 1.0f, System::Drawing::Color::Beige.ToArgb());
    			Vertices[1] = CustomVertex::TransformedColored(275.0f, 275.0f, 0.5f, 1.0f, System::Drawing::Color::Orange.ToArgb());
    			Vertices[2] = CustomVertex::TransformedColored(125.0f, 275.0f, 0.5f, 1.0f, System::Drawing::Color::Red.ToArgb());
    	
    			// On crée le vertex buffer
    			VertexBuffer ^vBuffer = gcnew VertexBuffer(CustomVertex::TransformedColored::typeid, Vertices->Length, device, Usage::None, CustomVertex::TransformedColored::Format, Pool::Default);
    	
    			// On stocke les vertices dans le vertex buffer
    			vBuffer->SetData(Vertices, 0, LockFlags::None);
    		}
    
    // La boucle de rendu
    private : Void Render()
    		{
    			// Effacement de la scène
    			device->Clear(ClearFlags::Target, 0, 1.0f, 0);
    			// Début de la scène
    			device->BeginScene();
    			// On défini le vertex buffer à lire
    			device->SetStreamSource(0, vBuffer, 0);
    			// On défini le type des vertices stockées dans notre vertex buffer
    			device->VertexFormat = CustomVertex::TransformedColored::Format;
    			// On dessine le vertex buffer
    			device->DrawPrimitives(PrimitiveType::TriangleList, 0, Vertices->Length / 3);
    	
    			// Fin de la scène
    			device->EndScene();
    			// Présentation de la scène à l'écran
    			device->Present();
    		}
    
    /// Clean up any resources being used.
    protected: ~Composant_3D()
    		{
    			if (components)delete components;
    			if(device) delete device;
    		}
    
    private: System::Void Composant_3D_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
    		 {
    			 Render();
    		 }
    	};
    }

    mardi 21 février 2012 23:06

Réponses

  • J'utilise la version Windows XP pro 32 bits SP3 et DirectX  9.0C (4.09.000.0904).

    Je pense avoir trouvé mon erreur, j'avais oublié de déclarer :

    private: VertexBuffer ^vBuffer;

    Merci beaucoup.

    • Marqué comme réponse CAO_JIM53 mercredi 22 février 2012 20:23
    mercredi 22 février 2012 20:23

Toutes les réponses