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: 1745
- 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;
};
#endif
Code: 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: 1745
- 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.
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.
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. :( :(
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..... :(
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: 1745
- 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: 1745
- 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.