mehrere Objekte rendern
-
Hey
Ich steh derzeit ziemlich auf der Leitung:
Ich bin grad dabei ein einfaches PingPong mit directX 11 zu programmieren.
Bin mit der Spielelogik schon relativ weit und möchte nun meine Ergebnisse mal anzeigen lassen.
Mein Problem jetzt:
Wie kann ich mehrere Objekte rendern? In allen Tutorial die ich gelesen habe, werden immer nur EIN Objekt gerendert.
Ich habe derzeit insgesamt vier Objekte mit jeweils 6 vertices: Background, Schläger1, Schläger2, Ball
Ich habe für jedes Objekt einen eigenen Vertexbuffer erstellt.
Wie übergebe ich nun die Vertexbuffer richtig um die Objekte rendern zu können?
Bis jetzt hab ich EINEN Vertexbuffer immer mit
d3dContext_->IASetVertexBuffers( 0, 1, &vertexBuffer_, &stride, &offset );
übergeben.
Man kann der Funktion auch ein Array an Vertexbuffer übergeben - jedoch steht in einige Foren, dass man die Lösung mit dem Array nur in Spezialfällen braucht.
Somit hier meine Frage: Wie rendere ich meine 4 Objekte (diese ändern während der Laufzeit natürlich ihre Position) möglichst einfach?
lg breckal
-
Äh.
Vertexbuffer 1 setzen, Objekt 1 rendern,
Vertexbuffer 2 setzen, Objekt 2 rendern,
Vertexbuffer 3 setzen, Objekt 3 rendern,
...?
-
danke für die antwort...
naja - das wär ja das logische - hab das probiert und dann bekomm ich immer nur das letzte objekt gezeichnet
hier ein Ausschnitt aus nem code in dem ich zwei dreiecke rendern will:
bool TriangleDemo::LoadContent( ) { ... ... ... VertexPos vertices[] = { XMFLOAT3( 0.5f, 0.1f, 0.1f ), XMFLOAT3( 0.3f, -0.1f, 0.1f ), XMFLOAT3( 0.2f, -0.1f, 0.1f ) }; VertexPos vertices2[] = { XMFLOAT3( 0.1f, 0.1f, 0.1f ), XMFLOAT3( 0.1f, -0.1f, 0.1f ), XMFLOAT3( -0.1f, -0.1f, 0.1f ) }; D3D11_BUFFER_DESC vertexDesc; ZeroMemory( &vertexDesc, sizeof( vertexDesc ) ); vertexDesc.Usage = D3D11_USAGE_DEFAULT; vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexDesc.ByteWidth = sizeof( VertexPos ) * 3; //Create VertexBuffer1 D3D11_SUBRESOURCE_DATA resourceData; ZeroMemory( &resourceData, sizeof( resourceData ) ); resourceData.pSysMem = vertices; d3dResult = d3dDevice_->CreateBuffer( &vertexDesc, &resourceData, &vertexBuffer1_ ); if( FAILED( d3dResult ) ) { return false; } //Create VertexBuffer2 D3D11_SUBRESOURCE_DATA resourceData2; ZeroMemory( &resourceData2, sizeof( resourceData2 ) ); resourceData2.pSysMem = vertices2; d3dResult = false; d3dResult = d3dDevice_->CreateBuffer( &vertexDesc, &resourceData2, &vertexBuffer2_ ); if( FAILED( d3dResult ) ) { return false; } return true; }
void TriangleDemo::Render( ) { if( d3dContext_ == 0 ) return; float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f }; d3dContext_->ClearRenderTargetView( backBufferTarget_, clearColor ); unsigned int stride = sizeof( VertexPos ); unsigned int offset = 0; d3dContext_->IASetInputLayout( inputLayout_ ); d3dContext_->IASetVertexBuffers( 0, 1, &vertexBuffer1_, &stride, &offset ); d3dContext_->IASetVertexBuffers( 0, 1, &vertexBuffer2_, &stride, &offset ); d3dContext_->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); d3dContext_->VSSetShader( solidColorVS_, 0, 0 ); d3dContext_->PSSetShader( solidColorPS_, 0, 0 ); d3dContext_->Draw( 6, 0 ); swapChain_->Present( 0, 0 ); }
Wo liegt hier der Fehler / mach ich hier überhaupt was richtig?
-
Vertexbuffer 1 setzen, Objekt 1 rendern,
Vertexbuffer 2 setzen, Objekt 2 rendern,
Vertexbuffer 3 setzen, Objekt 3 rendern,
...
-
lesen müsste man können ....
super - jetzt funktionierts aber
danke für die rasche Hilfe
lg