directX langgezogene meshes



  • hallo ihr lieben :),

    ich habe ein kleines problem mit einem mit den meshs die ich lade. undzwar lsde ich eine mesh in mein programm und lasse sie zeichnen , allerdings erscheinen alle in sehr in die höhe gezogen, sodass man die ursprüngliche form kaum noch erahnen kann.
    habt ihr ideen woran das liegen könnte?

    mit freundlichen grüßen ,
    WhileTrueDo



  • Vermutlich hast du wo was falsch gemacht, tu mal debuggen...

    Schau dir mal an, ob die Daten die reinkommen stimmen oder ob dort schon was kaputt ist. Falls die stimmen, muss es wohl am Rendern liegen; möglicherweise eine Matrix im Eimer!?



  • also beim debuggen ist nichts. wie finde ich denn raus was an der matrix nicht stimmt? 😕



  • bzw. ob was nicht stimmt



  • ich zeichne momentan auch gleichzeitig primative triangles , und die werden ohne probleme gezeichnet



  • WhileTrueDo schrieb:

    also beim debuggen ist nichts.

    Was heißt "ist nichts"!? Wie hast du es denn versucht?



  • das ist nichts was auf einen fehler oder ähnliches hinweist



  • Ich dachte, es kommt nicht raus, was rauskommen soll?



  • tut es ja auch nicht. dass ist ja auch mein problem , ein fehler ohne fehler



  • Nur um das klarzustellen: Der Debugger dient nicht einzig und allein dazu, dich darauf aufmerksam zu machen, wenn irgendwo was knallt; dafür allein würde der "Windows hat ein Problem festgestellt" Dialog ja auch schon fast ausreichen. Der Debugger hat Features wie Breakpoints und erlaubt es dir, dein Programm an einem beliebigen Punkt anzuhalten, schrittweise durchzusteppen, dir die Werte aller Variablen anzuschauen etc. Nutz diese Möglichkeiten, um deinem Problem auf die Spur zu kommen. Wenn dir das bis gerade eben tatsçhlich nicht klar war, dann lass bitte erstmal alles liegen und stehen und lern, mit deinem Debugger umzugehen. Der Debugger ist für den Programmierer ein Werkzeug mindestens so wichtig, wie Sprache und Compiler selbst...



  • dot schrieb:

    Nur um das klarzustellen: Der Debugger dient nicht einzig und allein dazu, dich darauf aufmerksam zu machen, wenn irgendwo was knallt; dafür allein würde der "Windows hat ein Problem festgestellt" Dialog ja auch schon fast ausreichen. Der Debugger hat Features wie Breakpoints und erlaubt es dir, dein Programm an einem beliebigen Punkt anzuhalten, schrittweise durchzusteppen, dir die Werte aller Variablen anzuschauen etc. Nutz diese Möglichkeiten, um deinem Problem auf die Spur zu kommen. Wenn dir das bis gerade eben tatsçhlich nicht klar war, dann lass bitte erstmal alles liegen und stehen und lern, mit deinem Debugger umzugehen. Der Debugger ist für den Programmierer ein Werkzeug mindestens so wichtig, wie Sprache und Compiler selbst...

    👍



  • Aber Grafikfehler sind eher schwer mit einem Debugger zu finden. Sowas liegt doch vielleicht an irgendwelchen Flags die man bei DirectX setzt oder so.



  • eigentlivh gibt es nur zwei möglichkeiten , wo der "fehler" sein kann. erstens die initialisierung von directX :

    bool D3DApp::InitDirect3D()
    {
    	//Get interface to Direct3D
    	m_pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);
    	if(!m_pDirect3D)
    	{
    		MessageBox(NULL, "Failed to create direct3D com object", NULL, NULL);
    		return false;
    	}
    
    	//Check device capabilities
    	D3DCAPS9		m_d3dDevCaps;
    	m_pDirect3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &m_d3dDevCaps);
    
    	int vp;
    	if(m_d3dDevCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
    	{
    		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    	}
    	else
    	{
    	vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    	}
    
    	//Fill out the present paramters
    	ZeroMemory(&m_d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    	m_d3dpp.BackBufferWidth = m_uiClientWidth;
    	m_d3dpp.BackBufferHeight = m_uiClientHeight;
    	m_d3dpp.Windowed = false;
    	m_d3dpp.BackBufferCount = 1;
    	m_d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    	m_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
    	m_d3dpp.MultiSampleQuality = 0;
    	m_d3dpp.hDeviceWindow = m_hAppWindow;
    	m_d3dpp.Flags = 0;
    	m_d3dpp.EnableAutoDepthStencil = true;
    	m_d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
    	m_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    	m_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    	m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    
    	//Create the device
    	m_pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, 
    						D3DDEVTYPE_HAL, m_hAppWindow, vp, &m_d3dpp, &m_pDevice3D);
    
    	if(!m_pDevice3D)
    	{
    		MessageBox(NULL, "Failed device creation", NULL, NULL);
    		return false;
    	}
    
    	D3DVIEWPORT9 viewport;
    	ZeroMemory(&viewport, sizeof(D3DVIEWPORT9));
    	viewport.X = 0;
    	viewport.Y = 0;
    	viewport.Width = m_uiClientWidth;
    	viewport.Height = m_uiClientHeight;
    	viewport.MinZ = 0;
    	viewport.MaxZ =1;
    
    	m_pDevice3D->SetViewport(&viewport);
    
    	return true;
    }
    

    oder beim initialisieren der objecte un co. :

    void TestApp::RestoreDeviceObjects()
    {
    	for (int x = 0; x < MAPHEIGHT; x++)
    		for (int y = 0; y < MAPWIDHT; y++)
    			block[x][y]->Initialize(m_pDevice3D);
    	bar1->Initialize(m_pDevice3D);
    	bar2->Initialize(m_pDevice3D);
    	bar3->Initialize(m_pDevice3D);
    	bar4->Initialize(m_pDevice3D);
    	bar5->Initialize(m_pDevice3D);
    	bar6->Initialize(m_pDevice3D);
    	lantern1->Initialize(m_pDevice3D);
    	lantern2->Initialize(m_pDevice3D);
    	lantern3->Initialize(m_pDevice3D);
    	mygrass->Init(D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 0.0f), m_pDevice3D, NumLights);
    	SystemCls->Init(m_pDevice3D);
    
    	D3DXMATRIX view;
    	D3DXMATRIX proj;
    
    	//SET VIEW
    	D3DXVECTOR3 position = D3DXVECTOR3(0.0f, 12.0f, -10.0f);
    	D3DXVECTOR3 target = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
    	D3DXVECTOR3 up = D3DXVECTOR3(0.0f, 10.0f, 0.0f);
    	D3DXMatrixLookAtLH(&view, &position, &target, &up);
    	m_pDevice3D->SetTransform(D3DTS_VIEW, &view);
    
    	////SET PROJECTION
    	D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI/4, static_cast<float>(m_uiClientWidth)/m_uiClientHeight, 1.0f, 1000.0f);
    	m_pDevice3D->SetTransform(D3DTS_PROJECTION, &proj);
    	m_pDevice3D->SetRenderState(D3DRS_LIGHTING, true);
    
    	D3DLIGHT9 lamp;
    	lamp.Type		= D3DLIGHT_DIRECTIONAL;
    	lamp.Position	= D3DXVECTOR3(0.0f, 6.0f, 0.0f);
    	lamp.Direction	= D3DXVECTOR3(1.0f, -1.0f, 0.0f);
    	D3DXCOLOR c = d3dColors::NightBlue;
    	lamp.Ambient	= c * 0.4f;
    	lamp.Diffuse	= c;
    	lamp.Specular	= c * 0.6f;
    	m_pDevice3D->SetLight(0, &lamp);
    	m_pDevice3D->LightEnable(0, true);
    	lantern1->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
    	lantern2->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
    	lantern3->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
    }
    

    sry iss ne menge code 😕
    nochmals vielen dank für eure hilfe


Anmelden zum Antworten