2D Grafiken mit Direkt X für Anfänger
							 2D Grafiken mit Direkt X für Anfänger
						2D Grafiken mit Direkt X für Anfänger
		
													
							
						
			
			
			
			Hi,
Ich möchte mich mit Grafiken und Direkt X beschäftigen.
Da ich aber in dem Themengebiet noch überhaupt keine Erfahrung habe, suche ich nach einfachen Tutorials,
die die Grundlagen behandeln und mich in die 2D-Direct X Welt leiten.
Kenn ihr dazu ein paar Tutorials?
Viele Grüße
			
			
									
						
										
						Ich möchte mich mit Grafiken und Direkt X beschäftigen.
Da ich aber in dem Themengebiet noch überhaupt keine Erfahrung habe, suche ich nach einfachen Tutorials,
die die Grundlagen behandeln und mich in die 2D-Direct X Welt leiten.
Kenn ihr dazu ein paar Tutorials?
Viele Grüße
- dot
- Establishment
- Beiträge: 1748
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: 2D Grafiken mit Direkt X für Anfänger
Mein Tipp: Schnapp dir SFML und leg los.
			
			
									
						
										
						Re: 2D Grafiken mit Direkt X für Anfänger
Wenn du mal ganz schnell 2D Grafiken rendern willst empfehle ich dir die ID3DXSprite Klasse von DirectX. Damit kannst du mit ein paar Zeilen Code 2D Sprites rendern. 
Falls du DirectX 9 benutzt kannst ja mal eine Klasse benutzen die ich testweise für meine Engine geschrieben habe (muss noch optimiert und erweitert werden, funktioniert aber für die Basics).
Das DirectX SDK kann beim optimieren helfen (die Methoden sind relativ selbsterklärend).
Sprite.h
Sprite.cpp
			
			
									
						
							Falls du DirectX 9 benutzt kannst ja mal eine Klasse benutzen die ich testweise für meine Engine geschrieben habe (muss noch optimiert und erweitert werden, funktioniert aber für die Basics).
Das DirectX SDK kann beim optimieren helfen (die Methoden sind relativ selbsterklärend).
Sprite.h
Code: Alles auswählen
#ifndef _SPRITE_H_
#define _SPRITE_H_
#include "d3dx9.h"
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
class D3D9Sprite
{
public:
	D3D9Sprite(LPDIRECT3DDEVICE9 &pD3DDevice);
	virtual ~D3D9Sprite();
	void setPosition(D3DXVECTOR2 pos);
	inline D3DXVECTOR2 getPosition(void) { return D3DXVECTOR2(this->m_vPosition.x,this->m_vPosition.y);};
	void Render(void);
	void setTexture(char *filename);
protected:
	LPDIRECT3DDEVICE9	m_pD3D9Device;
	LPDIRECT3DTEXTURE9	m_pTexture;
	LPD3DXSPRITE		m_pSprite;
	D3DXVECTOR3			m_vPosition;
	D3DXVECTOR3			m_vCenter;
	RECT				m_Dimensions;
	DWORD				m_RenderFlags;
	DWORD				m_Usage;
	unsigned int		m_Width;
	unsigned int		m_Height;
	unsigned int		m_MipLevels;
	D3DFORMAT			m_Format;
	D3DPOOL				m_RenderPool;
	DWORD				m_Filter;
	DWORD				m_MipFilter;
	D3DCOLOR			m_ColorKey;
	D3DXIMAGE_INFO		m_ImgInfo;
	PALETTEENTRY		*m_pPaletteEntry;
};
#endifCode: Alles auswählen
#include "Sprite.h"
D3D9Sprite::~D3D9Sprite()
{
	// unload directX pointer
	if(this->m_pTexture != NULL)
	{
		this->m_pTexture->Release();
		this->m_pTexture = NULL;
	}
	if(this->m_pSprite != NULL)
	{
		this->m_pSprite->Release();
		this->m_pSprite = NULL;
	}
	if(this->m_pD3D9Device != NULL)
	{
		this->m_pD3D9Device->Release();
	}
}
D3D9Sprite::D3D9Sprite(LPDIRECT3DDEVICE9 &pD3DDevice)
{
	this->m_pD3D9Device = NULL;
	this->m_pTexture	= NULL;
	if(pD3DDevice == NULL)
		return;
	// initialize standard values
	this->m_Usage			= 0;
	this->m_Width			= 0;
	this->m_Height			= 0;
	this->m_MipLevels		= D3DX_DEFAULT;
	this->m_Format			= D3DFMT_FROM_FILE;
	this->m_Filter			= D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER; // D3DX_DEFAULT
	this->m_MipFilter		= D3DX_FILTER_BOX; // D3DX_DEFAULT
	this->m_ColorKey		= 0xFF000000;
	this->m_pPaletteEntry	= NULL;
	this->m_vCenter			= D3DXVECTOR3(0.0f,0.0f,0.0f);
	this->m_vPosition		= D3DXVECTOR3(0.0f,0.0f,0.0f);
	this->m_RenderFlags		= D3DXSPRITE_ALPHABLEND;
	this->m_RenderPool		= D3DPOOL_DEFAULT;
	this->m_pD3D9Device = pD3DDevice;
	HRESULT hr = D3DXCreateSprite(this->m_pD3D9Device,&this->m_pSprite);
	if(hr != S_OK)	// error handling
	{
		switch(hr)
		{
		case D3DERR_INVALIDCALL:
			break;
		case E_OUTOFMEMORY:
			break;
		}
	}
}
void D3D9Sprite::setPosition(D3DXVECTOR2 pos)
{
	this->m_vPosition.x = pos.x;
	this->m_vPosition.y = pos.y;
}
void D3D9Sprite::setTexture(char *filename)
{
	if(filename == NULL)	// error handling
		return;
	if(this->m_pTexture != NULL)
		this->m_pTexture->Release();
	
	D3DXGetImageInfoFromFile(filename, &this->m_ImgInfo);
	this->m_Width = this->m_ImgInfo.Width;
	this->m_Height = this->m_ImgInfo.Height;
	this->m_MipLevels = this->m_ImgInfo.MipLevels;
	HRESULT hr = D3DXCreateTextureFromFileEx(this->m_pD3D9Device, filename, this->m_Width, this->m_Height, this->m_MipLevels, this->m_Usage, this->m_Format, this->m_RenderPool, this->m_Filter, this->m_MipFilter, this->m_ColorKey, &this->m_ImgInfo, this->m_pPaletteEntry, &this->m_pTexture );
	if(hr != D3D_OK)
	{
		// error handling
		switch(hr)
		{
		case D3DERR_INVALIDCALL:
			break;
		case D3DERR_NOTAVAILABLE:
			break;
		case D3DERR_OUTOFVIDEOMEMORY:
			break;
		case D3DXERR_INVALIDDATA:
			break;
		case E_OUTOFMEMORY:
			break;
		}
	}
	
	this->m_Dimensions.top = 0;
	this->m_Dimensions.left = 0;
	this->m_Dimensions.bottom = this->m_ImgInfo.Height;
	this->m_Dimensions.right = this->m_ImgInfo.Width;
	this->m_vCenter.x = this->m_ImgInfo.Width/2;
	this->m_vCenter.y = this->m_ImgInfo.Height/2;
	this->m_vCenter.z = 1.0f;
	
}
void D3D9Sprite::Render(void)
{
	if(this->m_pD3D9Device != NULL)
	{
		if(this->m_pSprite != NULL)
		{
			
			HRESULT hr = this->m_pSprite->Begin(this->m_RenderFlags);
			if( hr == S_OK)
			{
			//	this->m_pSprite->Draw(this->m_pTexture, &this->m_Dimensions, &this->m_vCenter, &this->m_vPosition, 0xff000000);
				this->m_pSprite->Draw(this->m_pTexture, NULL, NULL, &this->m_vPosition, 0xffffffff);
				this->m_pSprite->End();
				
			}
			else // error handling
			{
				switch(hr)
				{
				case D3DERR_INVALIDCALL:
					break;
				case D3DERR_OUTOFVIDEOMEMORY:
					break;
				case D3DXERR_INVALIDDATA:
					break;
				case E_OUTOFMEMORY:
					break;
				}
			}
			
		}
	}
}DevBlog: http://dreamzdev-blog.azurewebsites.net
Android Apps: https://play.google.com/store/apps/deve ... ware&hl=en
			
						Android Apps: https://play.google.com/store/apps/deve ... ware&hl=en
Re: 2D Grafiken mit Direkt X für Anfänger
Danke für die Tipps, aber ich hab von dem Thema keine Ahnung, d.h. ich weis gar nicht was ein Sprite ist.
Und da wollte ich eben fragen, ob ihr Seiten kennt, die die Grundlagen behandeln. Was ist ein Sprite, wie funktioniert Rendern, wie erzeuge ich Dreiecke, Quadrate etc. in Bezug auf Direkt X 11.
			
			
									
						
										
						Und da wollte ich eben fragen, ob ihr Seiten kennt, die die Grundlagen behandeln. Was ist ein Sprite, wie funktioniert Rendern, wie erzeuge ich Dreiecke, Quadrate etc. in Bezug auf Direkt X 11.
- dot
- Establishment
- Beiträge: 1748
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: 2D Grafiken mit Direkt X für Anfänger
blauaffe hat geschrieben:Danke für die Tipps, aber ich hab von dem Thema keine Ahnung, d.h. ich weis gar nicht was ein Sprite ist.
Und da wollte ich eben fragen, ob ihr Seiten kennt, die die Grundlagen behandeln. Was ist ein Sprite, wie funktioniert Rendern, wie erzeuge ich Dreiecke, Quadrate etc. in Bezug auf Direkt X 11.
;)dot hat geschrieben:Mein Tipp: Schnapp dir SFML und leg los.
- 
				joggel
Re: 2D Grafiken mit Direkt X für Anfänger
:!:dot hat geschrieben:blauaffe hat geschrieben:Danke für die Tipps, aber ich hab von dem Thema keine Ahnung, d.h. ich weis gar nicht was ein Sprite ist.
Und da wollte ich eben fragen, ob ihr Seiten kennt, die die Grundlagen behandeln. Was ist ein Sprite, wie funktioniert Rendern, wie erzeuge ich Dreiecke, Quadrate etc. in Bezug auf Direkt X 11.;)dot hat geschrieben:Mein Tipp: Schnapp dir SFML und leg los.
Re: 2D Grafiken mit Direkt X für Anfänger
Als ich mich durch die Seiten der SFML geklickt habe, war ich glaube ich nicht ganz bei der Sache....ich schau es mir noch mal an.
			
			
									
						
										
						- 
				joggel
Re: 2D Grafiken mit Direkt X für Anfänger
Schau dir mal die tutorials an... da wird schon sehr viel erklärt.
			
			
									
						
										
						Re: 2D Grafiken mit Direkt X für Anfänger
Wenn ich den ersten Testlauf kompiliere, also der Test ob man die Headerdateien richtig eingebunden hat, kommt bei mir immer die Fehlermeldung "LNK2019: verweis auf nicht aufgelöstes Symbol [...]" es wird aber nichts rot unterringelt.
Wo liegt der Fehler?
			
			
									
						
										
						Wo liegt der Fehler?
Re: 2D Grafiken mit Direkt X für Anfänger
Ja alles, bin es auch nochmal durchgegangen. Alles drin, aber es klappt nicht. :( :(
			
			
									
						
										
						- 
				joggel
Re: 2D Grafiken mit Direkt X für Anfänger
Also wenn Du alles befolgt hast was dort angegeben wurde, auch gegen die lib's gelinkt hast, dann wundert mich das sehr stark das das nicht funktioniert, bzw. das so eine Fehlermeldung kommt.
Wenn ich jetzt Zeit hätte, würde ich sagen: packe mal dein Projekt-Ordner als zip und schicke es mir... aber hab jetzt nicht mehr viel zeit..
			
			
									
						
										
						Wenn ich jetzt Zeit hätte, würde ich sagen: packe mal dein Projekt-Ordner als zip und schicke es mir... aber hab jetzt nicht mehr viel zeit..
Re: 2D Grafiken mit Direkt X für Anfänger
ich weis nicht ob es an meinem Kompiler liegt. Ich benutze den von Microsoft von 2013. Auf der SFML-Website kann ich aber nur die Libs, Includes...für den von 2012 runterladen...Brauch ich einen anderen Komiler?
			
			
									
						
										
						Re: 2D Grafiken mit Direkt X für Anfänger
Ich habs mit dem 64-Bit Pack probiert, allerdings für VS 2012 (ich hab VS 2013)
Ich habs mit dem 32-Bit Pack probiert,
ich bin alles doppelt durchgegangen, ich hab keine Includes oder Libs oder so ausgelassen.
Ich bin grade ein bischen Demotiviert..... :(
			
			
									
						
										
						Ich habs mit dem 32-Bit Pack probiert,
ich bin alles doppelt durchgegangen, ich hab keine Includes oder Libs oder so ausgelassen.
Ich bin grade ein bischen Demotiviert..... :(
- 
				joggel
Re: 2D Grafiken mit Direkt X für Anfänger
Uff... 
Ich habe VC2010... aber normaler weise sollte das doch funktionieren, also mit vc 2013 und libs für 2012.
Mh... bin ich gerade sehr ratlos.
Vorallem, dass Du so eine Fehlermeldung erhälst die bei einer fehlenden Lib kommt.
Vlt hat jemand anders eine Idee...
			
			
									
						
										
						Ich habe VC2010... aber normaler weise sollte das doch funktionieren, also mit vc 2013 und libs für 2012.
Mh... bin ich gerade sehr ratlos.
Vorallem, dass Du so eine Fehlermeldung erhälst die bei einer fehlenden Lib kommt.
Vlt hat jemand anders eine Idee...
Re: 2D Grafiken mit Direkt X für Anfänger
Ne, das sollte nicht funktionieren. Hinter VC2013 ist ne ganz andere Run-Time. Demnach ist es legitim, dass VC2012 Libs nicht mit VC2013 funktionieren.
			
			
									
						
										
						- dot
- Establishment
- Beiträge: 1748
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: 2D Grafiken mit Direkt X für Anfänger
Lösung: SFML mit VS 2013 selbst bauen...
			
			
									
						
										
						Re: 2D Grafiken mit Direkt X für Anfänger
Falls du noch Tutorials suchst, RasterTek hat eigentlich immer ganz brauchbare, dort werden u.a. die Basics für DirectX erklärt
http://www.rastertek.com/tutdx11.html
			
			
									
						
							http://www.rastertek.com/tutdx11.html
DevBlog: http://dreamzdev-blog.azurewebsites.net
Android Apps: https://play.google.com/store/apps/deve ... ware&hl=en
			
						Android Apps: https://play.google.com/store/apps/deve ... ware&hl=en
Re: 2D Grafiken mit Direkt X für Anfänger
Wie würde ich das denn machen?dot hat geschrieben:Lösung: SFML mit VS 2013 selbst bauen...
- dot
- Establishment
- Beiträge: 1748
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: 2D Grafiken mit Direkt X für Anfänger
So wie es hier erklärt ist: http://www.sfml-dev.org/tutorials/2.1/c ... -cmake.php
			
			
									
						
										
						Re: 2D Grafiken mit Direkt X für Anfänger
Danke für die ganzen Antworten, die haben mich schon ein gutes Stück weiter gebracht.
Ich hab mal in die Tutorials von Rastertek reingeschaut und die sind echt klasse. Ich bin vom Typ aber eher einer, der sich dazu ein Buch kauft.
Deswegen hab ich im Netz mal geschaut und das hier gefunden:
http://www.amazon.de/gp/product/1435458 ... 88SZF1XR8D
Bevor ich entscheide ob ich es mir kaufe, wollte ich euch fragen, wie ihr das Buch seht und ob es mir zum Kauf empfehlen würdet.
			
			
									
						
										
						Ich hab mal in die Tutorials von Rastertek reingeschaut und die sind echt klasse. Ich bin vom Typ aber eher einer, der sich dazu ein Buch kauft.
Deswegen hab ich im Netz mal geschaut und das hier gefunden:
http://www.amazon.de/gp/product/1435458 ... 88SZF1XR8D
Bevor ich entscheide ob ich es mir kaufe, wollte ich euch fragen, wie ihr das Buch seht und ob es mir zum Kauf empfehlen würdet.

