Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#pragma once #include "stdafx.h" #include "CDirectX.h" #define MAX_VERTEX_PER_MESH 100 /* * Class CMesh * ----------- * * This is a mesh. It contains a vertex and a index buffer. * */ class CMesh { private: // Attribute CDirectX* m_directx; std::vector<VERTEX>* m_vertezies; std::vector<DWORD>* m_indezies; ID3D11Buffer* m_vbuffer; ID3D11Buffer* m_ibuffer; D3D10_PRIMITIVE_TOPOLOGY m_topology; UINT m_count; // Private methods void CreateVBuffer(UINT); void CreateIBuffer(UINT); public: // Constructor and destructor CMesh(CDirectX*); ~CMesh(); // Public methods void Create(std::vector<VERTEX>*, std::vector<DWORD>*, D3D10_PRIMITIVE_TOPOLOGY); // Getter ID3D11Buffer** GetVBuffer() {return &m_vbuffer;}; ID3D11Buffer** GetIBuffer() {return &m_ibuffer;}; D3D10_PRIMITIVE_TOPOLOGY GetTopology() {return m_topology;}; UINT GetCount() {return m_count;}; }; // |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
#include "stdafx.h" #include "CMesh.h" /* * Constructor of CMesh * -------------------- * * Inits some nullptr * */ CMesh::CMesh(CDirectX* p_directx) : m_directx(p_directx) { m_vbuffer = nullptr; m_ibuffer = nullptr; }; /* * Destructor of CMesh * ------------------- * * Releases the com objects * */ CMesh::~CMesh() { SafeRelease(&m_vbuffer); SafeRelease(&m_ibuffer); }; /* * Function CMesg::CreateVBuffer * ----------------------------- * * Creates a vertex buffer * */ void CMesh::CreateVBuffer(UINT p_size) { D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DYNAMIC; bd.ByteWidth = sizeof(VERTEX) * p_size; bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; m_directx->dev->CreateBuffer(&bd, NULL, &m_vbuffer); }; /* * Function CMesg::CreateIBuffer * ----------------------------- * * Creates a index buffer * */ void CMesh::CreateIBuffer(UINT p_size) { D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DYNAMIC; bd.ByteWidth = sizeof(DWORD) * p_size; bd.BindFlags = D3D11_BIND_INDEX_BUFFER; bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; m_directx->dev->CreateBuffer(&bd, NULL, &m_ibuffer); }; /* * Function CMesh::Create * ---------------------- * * Fills the the buffers * */ void CMesh::Create(std::vector<VERTEX>* p_vbuffer, std::vector<DWORD>* p_ibuffer, D3D10_PRIMITIVE_TOPOLOGY p_topology) { // Save some informations m_topology = p_topology; m_count = p_vbuffer->size(); m_vertezies = p_vbuffer; m_indezies = p_ibuffer; // Fillin IBuffer CreateIBuffer(p_ibuffer->size()); DWORD ind[MAX_VERTEX_PER_MESH*3]; int ii = 0; for(std::vector<DWORD>::iterator it = p_ibuffer->begin(); it != p_ibuffer->end(); it++) { ind[ii] = *it; ii++; } D3D11_MAPPED_SUBRESOURCE msi; m_directx->devcon->Map(m_ibuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &msi); memcpy(msi.pData, ind, sizeof(ind)); m_directx->devcon->Unmap(m_ibuffer, NULL); // Fillin VBuffer CreateVBuffer(p_vbuffer->size()); VERTEX ver[MAX_VERTEX_PER_MESH]; int iv = 0; for(std::vector<VERTEX>::iterator it = p_vbuffer->begin(); it != p_vbuffer->end(); it++) { ver[iv] = *it; iv++; } D3D11_MAPPED_SUBRESOURCE msv; m_directx->devcon->Map(m_vbuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &msv); memcpy(msv.pData, ver, sizeof(ver)); m_directx->devcon->Unmap(m_vbuffer, NULL); }; // |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * Function CRenderer::Render * -------------------------- * * Renders the vertexes in the buffer * */ void CRenderer::Render(CMesh* p_mesh) { UINT stride = sizeof(VERTEX); UINT offset = 0; m_directx->devcon->IASetVertexBuffers(0, 1, p_mesh->GetVBuffer(), &stride, &offset); m_directx->devcon->IASetIndexBuffer(*p_mesh->GetIBuffer(), DXGI_FORMAT_R16_UINT, 0); m_directx->devcon->IASetPrimitiveTopology(p_mesh->GetTopology()); m_directx->devcon->DrawIndexed(p_mesh->GetCount(), 0, 0); }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Create Triangle std::vector<VERTEX> ver; ver.push_back(VERTEX(-1.0f, 1.0f, -1.0f, D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f))); ver.push_back(VERTEX(1.0f, 1.0f, -1.0f, D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f))); ver.push_back(VERTEX(1.0f, 1.0f, 1.0f, D3DXCOLOR(0.0f, 1.0f, 1.0f, 1.0f))); ver.push_back(VERTEX(-1.0f, 1.0f, 1.0f, D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f))); ver.push_back(VERTEX(-1.0f, -1.0f, -1.0f, D3DXCOLOR(1.0f, 0.0f, 1.0f, 1.0f))); ver.push_back(VERTEX(1.0f, -1.0f, -1.0f, D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f))); ver.push_back(VERTEX(1.0f, -1.0f, 1.0f, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f))); ver.push_back(VERTEX(-1.0f, -1.0f, 1.0f, D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f))); WORD indices[] = { 3,1,0, 2,1,3, 0,5,4, 1,5,0, 3,4,7, 0,4,3, 1,6,5, 2,6,1, 2,7,6, 3,7,2, 6,4,5, 7,4,6, }; std::vector<DWORD> ind; ind.insert(ind.end(), &indices[0], &indices[36]); // Create Mesh CMesh mesh(&directx); mesh.Create(&ver, &ind, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); |
Alter Hase
C-/C++-Quelltext |
|
1 |
(...)->DrawIndexed(pMesh->getCount(), 0, 0); |
C-/C++-Quelltext |
|
1 2 3 |
int CMesh::getCount(){ return m_count; } |
C-/C++-Quelltext |
|
1 2 3 |
//... m_count = p_vbuffer->size(); //... |
C-/C++-Quelltext |
|
1 |
(...)->DrawIndexed(pMesh->getCount(), 0, 0); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Julién« (09.12.2014, 17:37) aus folgendem Grund: Ich nix Deutsch, Ich nix Rechtschreibung.
Alter Hase
C-/C++-Quelltext |
|
1 |
ind.insert(ind.end(), &indices[0], &indices[36]); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Was? Also gerade der letzte Beitrag zeigt doch ein paar deutliche Probleme auf.Ok. Entweder wisst ihr selber nicht, was da passiert oder ihr habt keine Lust oder Zeit mir zu helfen.
Quellcode |
|
1 |
CMesh::CMesh(CDirectX* p_directx) : m_directx(p_directx) |
Werbeanzeige