STL betöltő hozzáírva
This commit is contained in:
parent
c836535da6
commit
41eafc716e
@ -3,6 +3,6 @@ project(WinApi)
|
|||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
add_executable(WinApi WIN32 main.cpp d3dx12.h DXWindow.cpp DXWindow.h Logger.cpp Logger.h utils.cpp utils.h Window.cpp Window.h Timer.cpp Timer.h IDrawable.h Geometry.h EventHandler.cpp EventHandler.h)
|
add_executable(WinApi WIN32 main.cpp d3dx12.h DXWindow.cpp DXWindow.h Logger.cpp Logger.h utils.cpp utils.h Window.cpp Window.h Timer.cpp Timer.h IDrawable.h Geometry.h EventHandler.cpp EventHandler.h Vertex.cpp Vertex.h)
|
||||||
|
|
||||||
target_link_libraries(WinApi d3d12.lib dxgi.lib dxguid.lib d3dcompiler.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib)
|
target_link_libraries(WinApi d3d12.lib dxgi.lib dxguid.lib d3dcompiler.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib)
|
71
DXWindow.cpp
71
DXWindow.cpp
@ -9,6 +9,8 @@ namespace eg3d {
|
|||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
initDrawObjects();
|
initDrawObjects();
|
||||||
|
|
||||||
|
rotAngle = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +293,6 @@ namespace eg3d {
|
|||||||
mCommandList->SetGraphicsRootConstantBufferView(0, cbResource->GetGPUVirtualAddress());
|
mCommandList->SetGraphicsRootConstantBufferView(0, cbResource->GetGPUVirtualAddress());
|
||||||
|
|
||||||
////////// OBJEKTUMOK KIRAJZOLÁSA
|
////////// OBJEKTUMOK KIRAJZOLÁSA
|
||||||
//drawObject();
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < drawables.size(); i++)
|
for (unsigned i = 0; i < drawables.size(); i++)
|
||||||
{
|
{
|
||||||
@ -351,64 +352,22 @@ namespace eg3d {
|
|||||||
|
|
||||||
void DXWindow::initDrawObjects()
|
void DXWindow::initDrawObjects()
|
||||||
{
|
{
|
||||||
initVertices();
|
|
||||||
setupInputLayout();
|
setupInputLayout();
|
||||||
createBuffers();
|
|
||||||
uploadBuffers();
|
|
||||||
loadShaders();
|
loadShaders();
|
||||||
createConstantBuffers();
|
createConstantBuffers();
|
||||||
createRootSignature();
|
createRootSignature();
|
||||||
createPSO();
|
createPSO();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DXWindow::initVertices()
|
|
||||||
{
|
|
||||||
vertices = {
|
|
||||||
{ -0.5f, -0.5f, 0.1f, 1.0f, 0.0f, 0.0f },
|
|
||||||
{ 0.5f, -0.5f, 0.1f , 0.0f, 1.0f, 0.0f },
|
|
||||||
{ 0.0f, 0.98f, 0.1f, 0.0f, 0.0f, 1.0f },
|
|
||||||
};
|
|
||||||
|
|
||||||
indices = { 0, 2, 1 };
|
|
||||||
}
|
|
||||||
|
|
||||||
void DXWindow::setupInputLayout()
|
void DXWindow::setupInputLayout()
|
||||||
{
|
{
|
||||||
inputElements = {
|
inputElements = {
|
||||||
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0},
|
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0},
|
||||||
{"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0}
|
//{"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0}
|
||||||
// TODO további elemek létrehozása
|
// TODO további elemek létrehozása
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void DXWindow::createBuffers()
|
|
||||||
{
|
|
||||||
// --- vertex buffer létrehozása
|
|
||||||
vertexBuffer = createBuffer_UH(mDevice, vertices.size() * sizeof(Vertex));
|
|
||||||
|
|
||||||
vertexBufferView.BufferLocation = vertexBuffer->GetGPUVirtualAddress();
|
|
||||||
vertexBufferView.StrideInBytes = sizeof(Vertex);
|
|
||||||
vertexBufferView.SizeInBytes = vertices.size() * sizeof(Vertex);
|
|
||||||
|
|
||||||
// --- index buffer létrehozása TODO átírás createBuffer_UH() használatával
|
|
||||||
indexBuffer = createBuffer_UH(mDevice, indices.size() * sizeof(uint32_t));
|
|
||||||
|
|
||||||
indexBufferView.Format = DXGI_FORMAT_R32_UINT;
|
|
||||||
indexBufferView.BufferLocation = indexBuffer->GetGPUVirtualAddress();
|
|
||||||
indexBufferView.SizeInBytes = indices.size() * sizeof(uint32_t);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DXWindow::uploadBuffers()
|
|
||||||
{
|
|
||||||
// --- vertex buffer feltöltése
|
|
||||||
bufferMapCopy(vertexBuffer, vertices.data(), vertices.size() * sizeof(Vertex));
|
|
||||||
|
|
||||||
// --- index buffer feltöltése
|
|
||||||
bufferMapCopy(indexBuffer, indices.data(), indices.size() * sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
void DXWindow::createConstantBuffers()
|
void DXWindow::createConstantBuffers()
|
||||||
{
|
{
|
||||||
cbResource = createBuffer_UH(mDevice, calc256AlignedSize(sizeof(constantBuffer)));
|
cbResource = createBuffer_UH(mDevice, calc256AlignedSize(sizeof(constantBuffer)));
|
||||||
@ -418,7 +377,19 @@ namespace eg3d {
|
|||||||
{
|
{
|
||||||
// transzformáció frissítése
|
// transzformáció frissítése
|
||||||
//DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixScaling(2.0, 1.0, 1.0));
|
//DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixScaling(2.0, 1.0, 1.0));
|
||||||
DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixRotationZ(XM_PI));
|
|
||||||
|
rotAngle = rotAngle - 0.01;
|
||||||
|
if (rotAngle > XM_2PI)
|
||||||
|
{
|
||||||
|
rotAngle -= XM_2PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
float viewHeight = 1.5;
|
||||||
|
DirectX::XMStoreFloat4x4(&constantBuffer.projMatrix,
|
||||||
|
//XMMatrixScaling(0.00001, 0.00001, 0.00001) * XMMatrixTranslation(0.0f, 0.0f, -100000.0f) *
|
||||||
|
DirectX::XMMatrixPerspectiveLH(viewHeight * getAspectRatio(), viewHeight, 0.5, 10));
|
||||||
|
|
||||||
|
DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixRotationZ(rotAngle));
|
||||||
|
|
||||||
bufferMapCopy(cbResource, static_cast<void *>(&constantBuffer), sizeof(constantBuffer));
|
bufferMapCopy(cbResource, static_cast<void *>(&constantBuffer), sizeof(constantBuffer));
|
||||||
}
|
}
|
||||||
@ -454,6 +425,8 @@ namespace eg3d {
|
|||||||
D3D12_GRAPHICS_PIPELINE_STATE_DESC psoD = {};
|
D3D12_GRAPHICS_PIPELINE_STATE_DESC psoD = {};
|
||||||
|
|
||||||
psoD.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
|
psoD.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
|
||||||
|
//psoD.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
|
||||||
|
//psoD.RasterizerState.FillMode = D3D12_FILL_MODE_WIREFRAME;
|
||||||
psoD.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);
|
psoD.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);
|
||||||
psoD.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);
|
psoD.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);
|
||||||
psoD.SampleMask = UINT_MAX;
|
psoD.SampleMask = UINT_MAX;
|
||||||
@ -487,12 +460,4 @@ namespace eg3d {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DXWindow::drawObject()
|
|
||||||
{
|
|
||||||
mCommandList->IASetVertexBuffers(0, 1, &vertexBufferView);
|
|
||||||
mCommandList->IASetIndexBuffer(&indexBufferView);
|
|
||||||
mCommandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
|
||||||
|
|
||||||
mCommandList->DrawIndexedInstanced(indices.size(), 1, 0, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
13
DXWindow.h
13
DXWindow.h
@ -16,17 +16,13 @@
|
|||||||
|
|
||||||
#include <DirectXMath.h>
|
#include <DirectXMath.h>
|
||||||
|
|
||||||
// Vertex struktúrája
|
#include "Vertex.h"
|
||||||
struct Vertex
|
|
||||||
{
|
|
||||||
float x, y, z;
|
|
||||||
float r, g, b;
|
|
||||||
};
|
|
||||||
|
|
||||||
// konstansbuffer struktúrája
|
// konstansbuffer struktúrája
|
||||||
struct ConstantBuffer
|
struct ConstantBuffer
|
||||||
{
|
{
|
||||||
DirectX::XMFLOAT4X4 transformMatrix;
|
DirectX::XMFLOAT4X4 transformMatrix;
|
||||||
|
DirectX::XMFLOAT4X4 projMatrix; // vetítési mátrix
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace eg3d {
|
namespace eg3d {
|
||||||
@ -92,18 +88,15 @@ namespace eg3d {
|
|||||||
ComPtr<ID3D12Resource> cbResource; // konstansbuffer DX-objektuma
|
ComPtr<ID3D12Resource> cbResource; // konstansbuffer DX-objektuma
|
||||||
ConstantBuffer constantBuffer; // konstansbuffer
|
ConstantBuffer constantBuffer; // konstansbuffer
|
||||||
// TODO TRANSZFORMÁCIÓS TULAJDONSÁGOK
|
// TODO TRANSZFORMÁCIÓS TULAJDONSÁGOK
|
||||||
|
float rotAngle; // forgatás szöge
|
||||||
|
|
||||||
void initDrawObjects(); // kirajzolandó objektumok inicializálása
|
void initDrawObjects(); // kirajzolandó objektumok inicializálása
|
||||||
|
|
||||||
void initVertices(); // vertexek inicializálása
|
|
||||||
void setupInputLayout(); // input layout beállítása
|
void setupInputLayout(); // input layout beállítása
|
||||||
void createBuffers(); // bufferek elkészítése, tartalmuk betöltése
|
|
||||||
void uploadBuffers(); // bufferek feltöltése
|
|
||||||
void loadShaders(); // shaderek betöltése
|
void loadShaders(); // shaderek betöltése
|
||||||
void createConstantBuffers(); // konstansbufferek létrehozása
|
void createConstantBuffers(); // konstansbufferek létrehozása
|
||||||
void createRootSignature(); // root signature létrehozása
|
void createRootSignature(); // root signature létrehozása
|
||||||
void createPSO(); // PSO létrehozása
|
void createPSO(); // PSO létrehozása
|
||||||
void drawObject(); // objektum kirajzolása
|
|
||||||
|
|
||||||
void updateConstantBuffers(); // konstansbufferek frissítése
|
void updateConstantBuffers(); // konstansbufferek frissítése
|
||||||
|
|
||||||
|
89
Geometry.h
89
Geometry.h
@ -3,17 +3,25 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include "IDrawable.h"
|
#include "IDrawable.h"
|
||||||
|
#include "Vertex.h"
|
||||||
|
|
||||||
#include <DirectXMath.h>
|
#include <DirectXMath.h>
|
||||||
|
|
||||||
|
using namespace DirectX;
|
||||||
|
|
||||||
namespace eg3d {
|
namespace eg3d {
|
||||||
|
|
||||||
template<typename vertex_t>
|
struct STLTriangle {
|
||||||
|
XMFLOAT3 normal;
|
||||||
|
XMFLOAT3 v1, v2, v3;
|
||||||
|
uint16_t attributeByteCount;
|
||||||
|
};
|
||||||
|
|
||||||
class Geometry : public IDrawable {
|
class Geometry : public IDrawable {
|
||||||
private:
|
private:
|
||||||
ComPtr<ID3D12Device> mDevice; // device
|
ComPtr<ID3D12Device> mDevice; // device
|
||||||
|
|
||||||
std::vector<vertex_t> mVertices; // vertexek
|
std::vector<Vertex> mVertices; // vertexek
|
||||||
std::vector<uint32_t> mIndices; // indexek
|
std::vector<uint32_t> mIndices; // indexek
|
||||||
|
|
||||||
std::mutex mModifMtx; // ...
|
std::mutex mModifMtx; // ...
|
||||||
@ -42,10 +50,10 @@ namespace eg3d {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// vertexek beállítása
|
// vertexek beállítása
|
||||||
void setVertices(const std::vector<vertex_t> &vertices) {
|
void setVertices(const std::vector<Vertex> &vertices) {
|
||||||
mVertices = vertices;
|
mVertices = vertices;
|
||||||
|
|
||||||
size_t bufferSize = mVertices.size() * sizeof(vertex_t); // buffer mérete
|
size_t bufferSize = mVertices.size() * sizeof(Vertex); // buffer mérete
|
||||||
|
|
||||||
mVertexBuffer.Reset(); // buffer törlése
|
mVertexBuffer.Reset(); // buffer törlése
|
||||||
mVertexBuffer = createBuffer_UH(mDevice, bufferSize); // buffer létrehozása
|
mVertexBuffer = createBuffer_UH(mDevice, bufferSize); // buffer létrehozása
|
||||||
@ -53,12 +61,12 @@ namespace eg3d {
|
|||||||
|
|
||||||
// vertex buffer view beállítása
|
// vertex buffer view beállítása
|
||||||
mVertexBufferView.BufferLocation = mVertexBuffer->GetGPUVirtualAddress();
|
mVertexBufferView.BufferLocation = mVertexBuffer->GetGPUVirtualAddress();
|
||||||
mVertexBufferView.StrideInBytes = sizeof(vertex_t);
|
mVertexBufferView.StrideInBytes = sizeof(Vertex);
|
||||||
mVertexBufferView.SizeInBytes = bufferSize;
|
mVertexBufferView.SizeInBytes = bufferSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// vertexek lekérése
|
// vertexek lekérése
|
||||||
std::vector<vertex_t> getVertices() const {
|
std::vector<Vertex> getVertices() const {
|
||||||
return mVertices;
|
return mVertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,9 +117,74 @@ namespace eg3d {
|
|||||||
setupInputAssembler(commandList); // input assembler beállítása
|
setupInputAssembler(commandList); // input assembler beállítása
|
||||||
commandList->DrawIndexedInstanced(mIndices.size(), 1, 0, 0, 0); // rajzolás
|
commandList->DrawIndexedInstanced(mIndices.size(), 1, 0, 0, 0); // rajzolás
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// két geometria egyesítése
|
||||||
|
Geometry& operator+=(const Geometry& other)
|
||||||
|
{
|
||||||
|
std::vector<Vertex> vertices = mVertices;
|
||||||
|
vertices.insert(vertices.end(), other.mVertices.begin(), other.mVertices.end());
|
||||||
|
|
||||||
|
uint32_t offset = mIndices.size() - 1;
|
||||||
|
std::vector<uint32_t> indices = mIndices;
|
||||||
|
indices.insert(indices.end(), other.mIndices.begin(), other.mIndices.end());
|
||||||
|
|
||||||
|
// indexek megváltozatása offsettel
|
||||||
|
for (uint32_t i = offset + 1; i < indices.size(); i++)
|
||||||
|
{
|
||||||
|
indices[i] += offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bufferek újrafoglalása a videokártyán
|
||||||
|
setVertices(vertices);
|
||||||
|
setIndices(indices);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bináris STL fájl betöltése
|
||||||
|
void loadBinarySTL(const std::string& fileName) {
|
||||||
|
auto inFile = std::ifstream(fileName, std::ios::in | std::ios::binary); // bináris fájl megnyitása olvasásra
|
||||||
|
|
||||||
|
if (!inFile.is_open()) { // megnézzük, hogy sikerült-e megnyitni a fájlt
|
||||||
|
LOG("Failed to open file: '" + fileName + "'! STL geometry loading failed!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vertexek és indexek
|
||||||
|
std::vector<Vertex> vertices;
|
||||||
|
std::vector<uint32_t> indices;
|
||||||
|
|
||||||
|
uint32_t triN; // háromszögek száma
|
||||||
|
|
||||||
|
inFile.seekg(80, std::ios::beg); // fejléc átugrása
|
||||||
|
inFile.read((char *)&triN, sizeof(triN)); // háromszögek számának kiolvasása
|
||||||
|
|
||||||
|
// vertexek kiolvasása
|
||||||
|
for (uint32_t i = 0; i < triN; i++) {
|
||||||
|
STLTriangle triangle;
|
||||||
|
inFile.read((char *)&triangle, sizeof(triangle)); // egy háromszög betöltése
|
||||||
|
|
||||||
|
vertices.push_back(triangle.v1);
|
||||||
|
vertices.push_back(triangle.v2);
|
||||||
|
vertices.push_back(triangle.v3);
|
||||||
|
|
||||||
|
// indexek vektorának feltöltése
|
||||||
|
uint32_t firstIndex = 3 * i;
|
||||||
|
indices.push_back(firstIndex);
|
||||||
|
indices.push_back(firstIndex + 1);
|
||||||
|
indices.push_back(firstIndex + 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
inFile.close();
|
||||||
|
|
||||||
|
setVertices(vertices);
|
||||||
|
setIndices(indices);
|
||||||
|
|
||||||
|
LOG("Successful geometry loading from file '" + fileName + "' of " + std::to_string(triN) + " triangles.");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// geometriatároló típusa
|
// geometriatároló típusa
|
||||||
template <typename vertex_t>
|
using GeometryPool = std::vector<std::shared_ptr<Geometry>>;
|
||||||
using GeometryPool = std::vector<std::shared_ptr<Geometry<vertex_t>>>;
|
|
||||||
}
|
}
|
||||||
|
BIN
RUNTIME/assets/crate.stl
Normal file
BIN
RUNTIME/assets/crate.stl
Normal file
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
struct VSInput // vertex shader bemeneti struktúra
|
struct VSInput // vertex shader bemeneti struktúra
|
||||||
{
|
{
|
||||||
float3 position_D : POSITION;
|
float3 position_D : POSITION;
|
||||||
float3 color : COLOR;
|
//float3 color : COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VSOutput // vertex shader kimeneti struktúra
|
struct VSOutput // vertex shader kimeneti struktúra
|
||||||
@ -13,14 +13,15 @@ struct VSOutput // vertex shader kimeneti strukt
|
|||||||
cbuffer CBuf : register(b0)
|
cbuffer CBuf : register(b0)
|
||||||
{
|
{
|
||||||
float4x4 transformMatrix;
|
float4x4 transformMatrix;
|
||||||
|
float4x4 projMatrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
VSOutput vs_main(VSInput input)
|
VSOutput vs_main(VSInput input)
|
||||||
{
|
{
|
||||||
VSOutput output; // vertex shader kimenete
|
VSOutput output; // vertex shader kimenete
|
||||||
|
|
||||||
output.position_H = mul(transformMatrix, float4(input.position_D, 1.0));
|
output.position_H = mul(projMatrix, mul(transformMatrix, float4(input.position_D, 1.0)));
|
||||||
output.color = input.color;
|
output.color = float3(1.0, 1.0, 1.0);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
20
Vertex.cpp
Normal file
20
Vertex.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// Created by Epagris on 2020. 03. 14..
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Vertex.h"
|
||||||
|
|
||||||
|
eg3d::Vertex::Vertex() : x(0.0f), y(0.0f), z(0.0f) {}
|
||||||
|
|
||||||
|
eg3d::Vertex::Vertex(const DirectX::XMFLOAT3 xmf3) : x(xmf3.x), y(xmf3.y), z(xmf3.z) {}
|
||||||
|
|
||||||
|
eg3d::Vertex::Vertex(std::initializer_list<float> initList) {
|
||||||
|
if (initList.size() >= 3) {
|
||||||
|
const float *pParams = initList.begin();
|
||||||
|
|
||||||
|
// paraméterek elkérése
|
||||||
|
x = pParams[0];
|
||||||
|
y = pParams[1];
|
||||||
|
z = pParams[2];
|
||||||
|
}
|
||||||
|
}
|
26
Vertex.h
Normal file
26
Vertex.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// Created by Epagris on 2020. 03. 14..
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef VERTEX
|
||||||
|
#define VERTEX
|
||||||
|
|
||||||
|
#include <DirectXMath.h>
|
||||||
|
#include <initializer_list>
|
||||||
|
|
||||||
|
namespace eg3d {
|
||||||
|
|
||||||
|
struct Vertex {
|
||||||
|
public:
|
||||||
|
float x, y, z; // koordináták
|
||||||
|
// float nx, ny, nz; // normálvektorok TODO
|
||||||
|
|
||||||
|
Vertex(); // default konstruktor
|
||||||
|
Vertex(const DirectX::XMFLOAT3 xmf3); // betöltés XMFLOAT3-ból
|
||||||
|
Vertex(std::initializer_list<float> initList); // konstruktor struktúraszerû inicializációval
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //VERTEX
|
26
main.cpp
26
main.cpp
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
#include "Geometry.h"
|
#include "Geometry.h"
|
||||||
|
#include "not_used/vertex_types.h"
|
||||||
|
|
||||||
// FPS-mérés
|
// FPS-mérés
|
||||||
size_t gFrames = 0;
|
size_t gFrames = 0;
|
||||||
@ -38,31 +39,28 @@ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszA
|
|||||||
gTmr1s.reg(timerCBData);
|
gTmr1s.reg(timerCBData);
|
||||||
|
|
||||||
std::vector<Vertex> vertices = { // vertexek
|
std::vector<Vertex> vertices = { // vertexek
|
||||||
{ -0.5f, -0.5f, 0.1f, 1.0f, 0.0f, 0.0f },
|
{ -0.5f, -0.5f, 1.0f },
|
||||||
{ 0.5f, -0.5f, 0.1f , 0.0f, 1.0f, 0.0f },
|
{ 0.5f, -0.5f, 1.0f },
|
||||||
{ 0.0f, 0.98f, 0.1f, 0.0f, 0.0f, 1.0f },
|
{ 0.0f, 0.98f, 1.0f },
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<uint32_t> indices = { 0, 2, 1 }; // indexek
|
std::vector<uint32_t> indices = { 0, 2, 1 }; // indexek
|
||||||
|
|
||||||
auto pGeo = std::shared_ptr<Geometry<Vertex>>(new Geometry<Vertex>(win.getDevice()));
|
auto pGeo = std::shared_ptr<Geometry>(new Geometry(win.getDevice()));
|
||||||
pGeo->setVertices(vertices);
|
pGeo->setVertices(vertices);
|
||||||
pGeo->setIndices(indices);
|
pGeo->setIndices(indices);
|
||||||
|
|
||||||
|
auto pGeo2 = std::shared_ptr<Geometry>(new Geometry(win.getDevice()));
|
||||||
|
pGeo2->loadBinarySTL("assets/crate.stl");
|
||||||
|
|
||||||
|
//drawables.push_back(pGeo2);
|
||||||
|
//(*pGeo) += (*pGeo2);
|
||||||
|
|
||||||
DrawablePool drawables; // geometriák halmaza
|
DrawablePool drawables; // geometriák halmaza
|
||||||
drawables.push_back(pGeo); // pGeo geometria hozzáadása
|
drawables.push_back(pGeo); // pGeo geometria hozzáadása
|
||||||
|
|
||||||
vertices = { // vertexek
|
|
||||||
{ -0.3f, -0.5f, 0.05f, 1.0f, 0.2f, 0.0f },
|
|
||||||
{ 0.3f, -0.5f, 0.05f , 0.2f, 1.0f, 0.0f },
|
|
||||||
{ 0.0f, 0.7f, 0.05f, 0.0f, 0.2f, 1.0f },
|
|
||||||
};
|
|
||||||
|
|
||||||
auto pGeo2 = std::shared_ptr<Geometry<Vertex>>(new Geometry<Vertex>(win.getDevice()));
|
// ------------------------------------
|
||||||
pGeo2->setVertices(vertices);
|
|
||||||
pGeo2->setIndices(indices);
|
|
||||||
|
|
||||||
drawables.push_back(pGeo2);
|
|
||||||
|
|
||||||
MSG msg = { };
|
MSG msg = { };
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user