grafika-color kezdő
This commit is contained in:
parent
89ca072b2d
commit
8b67a40e55
@ -388,14 +388,15 @@ namespace eg3d {
|
||||
void DXWindow::createRootSignature()
|
||||
{
|
||||
// root paraméterek létrehozása
|
||||
CD3DX12_ROOT_PARAMETER slotParams[1];
|
||||
CD3DX12_ROOT_PARAMETER slotParams[2];
|
||||
|
||||
// TODO worldMatrix konstansbufferének hozzáadása
|
||||
|
||||
// konstansbuffer-TÍPUS beállítása
|
||||
slotParams[0].InitAsConstantBufferView(0);
|
||||
slotParams[1].InitAsConstantBufferView(1);
|
||||
|
||||
CD3DX12_ROOT_SIGNATURE_DESC rsD(1, &slotParams[0], 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);
|
||||
CD3DX12_ROOT_SIGNATURE_DESC rsD(2, &slotParams[0], 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);
|
||||
|
||||
ComPtr<ID3DBlob> serializedRS = nullptr, errorBlob = nullptr;
|
||||
if (FAILED(D3D12SerializeRootSignature(&rsD, D3D_ROOT_SIGNATURE_VERSION_1, serializedRS.GetAddressOf(), errorBlob.GetAddressOf())))
|
||||
|
@ -82,7 +82,7 @@ namespace eg3d {
|
||||
|
||||
// TODO konstansbuffer példány és DX-objektum
|
||||
ComPtr<ID3D12Resource> cbResource; // konstansbuffer DX-objektuma
|
||||
ConstantBuffer constantBuffer; // konstansbuffer
|
||||
CB_Frame constantBuffer; // konstansbuffer
|
||||
|
||||
// virtuális kamera
|
||||
Cam * pCam;
|
||||
|
27
Entity.cpp
27
Entity.cpp
@ -5,17 +5,20 @@
|
||||
#include "Entity.h"
|
||||
|
||||
eg3d::Entity::Entity(const ComPtr<ID3D12Device> &device) : Geometry(device) {
|
||||
createConstantBuffer();
|
||||
loadDefaults();
|
||||
}
|
||||
|
||||
eg3d::Entity::Entity(const Entity& other): Geometry(other.device)
|
||||
{
|
||||
createConstantBuffer();
|
||||
setEntitySRT(other.getEntitySRT());
|
||||
}
|
||||
|
||||
void eg3d::Entity::loadDefaults() {
|
||||
XMStoreFloat4x4(&mWorldMatrix, XMMatrixIdentity()); // egységmátrix betöltése a világ-mátrixba
|
||||
XMStoreFloat4x4(&mConstBuf.worldMatrix, XMMatrixIdentity()); // egységmátrix betöltése a világ-mátrixba
|
||||
mSRTProps.loadDefaults();
|
||||
constructWorldMatrix();
|
||||
}
|
||||
|
||||
void eg3d::Entity::setEntitySRT(const eg3d::SRTProps &srtProps) {
|
||||
@ -30,16 +33,34 @@ eg3d::SRTProps eg3d::Entity::getEntitySRT() const {
|
||||
void eg3d::Entity::draw(ComPtr<ID3D12GraphicsCommandList> commandList) const
|
||||
{
|
||||
// TODO konstansbuffer becsatolása
|
||||
commandList->SetGraphicsRootConstantBufferView(1, mConstBufRes->GetGPUVirtualAddress());
|
||||
|
||||
Geometry::draw(commandList);
|
||||
}
|
||||
|
||||
void eg3d::Entity::constructWorldMatrix() {
|
||||
// TODO (Cam alapján)
|
||||
// XMMATRIX w = s * r * t
|
||||
// XMStoreFloat4x4(...)
|
||||
|
||||
auto scaling = mSRTProps.scaling;
|
||||
auto rotation = mSRTProps.rotation;
|
||||
auto translation = mSRTProps.translation;
|
||||
|
||||
XMMATRIX w = XMMatrixTranslation(translation.x, translation.y, translation.z) *
|
||||
XMMatrixRotationX(rotation.x) * XMMatrixRotationY(rotation.y) * XMMatrixRotationZ(rotation.z) *
|
||||
XMMatrixScaling(scaling.x, scaling.y, scaling.z);
|
||||
|
||||
w = XMMatrixTranspose(w);
|
||||
|
||||
XMStoreFloat4x4(&mConstBuf.worldMatrix, w);
|
||||
|
||||
// konstansbuffer felmásolása a videokártyára
|
||||
bufferMapCopy(mConstBufRes, static_cast<void*>(&mConstBuf), sizeof(CB_Entity));
|
||||
}
|
||||
|
||||
void eg3d::Entity::createConstantBuffer()
|
||||
{
|
||||
mConstBufRes = createBuffer_UH(device, calc256AlignedSize(sizeof(CB_Entity)));
|
||||
}
|
||||
|
||||
|
||||
// ----------------------
|
||||
|
5
Entity.h
5
Entity.h
@ -7,6 +7,7 @@
|
||||
|
||||
#include "Geometry.h"
|
||||
#include "IHasDefault.h"
|
||||
#include "const_bufs.h"
|
||||
|
||||
namespace eg3d {
|
||||
|
||||
@ -22,12 +23,14 @@ namespace eg3d {
|
||||
|
||||
class Entity : public Geometry, public IHasDefault {
|
||||
private:
|
||||
DirectX::XMFLOAT4X4 mWorldMatrix; // világ-mátrix
|
||||
ComPtr<ID3D12Resource> mConstBufRes; // konstansbuffer erõforrás a videokártyán
|
||||
CB_Entity mConstBuf; // konstansbuffer
|
||||
SRTProps mSRTProps; // STR-tulajdonságok
|
||||
|
||||
void constructWorldMatrix(); // világ-mátrix újragenerálása
|
||||
|
||||
// TODO konstansbuffer létrehozása, feltöltése
|
||||
void createConstantBuffer(); // konstansbuffer létrehozása
|
||||
public:
|
||||
Entity(const ComPtr<ID3D12Device> &device);
|
||||
explicit Entity(const Entity& other); // másolókonstruktor
|
||||
|
@ -10,18 +10,22 @@ struct VSOutput // vertex shader kimeneti strukt
|
||||
float3 color : COLOR;
|
||||
};
|
||||
|
||||
cbuffer CBuf : register(b0)
|
||||
cbuffer CFrame : register(b0)
|
||||
{
|
||||
float4x4 transformMatrix;
|
||||
float4x4 viewMatrix;
|
||||
float4x4 projMatrix;
|
||||
};
|
||||
cbuffer CEntity : register(b1)
|
||||
{
|
||||
float4x4 worldMatrix;
|
||||
}
|
||||
|
||||
VSOutput vs_main(VSInput input)
|
||||
{
|
||||
VSOutput output; // vertex shader kimenete
|
||||
|
||||
output.position_H = mul(float4(input.position_D, 1.0), mul(viewMatrix, projMatrix));
|
||||
output.position_H = mul(float4(input.position_D, 1.0), mul(worldMatrix, mul(viewMatrix, projMatrix)));
|
||||
output.color = float3(1.0, 1.0, 1.0);
|
||||
|
||||
return output;
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
// konstansbuffer struktúrája
|
||||
// TODO refactor!
|
||||
struct ConstantBuffer
|
||||
struct CB_Frame
|
||||
{
|
||||
DirectX::XMFLOAT4X4 transformMatrix;
|
||||
DirectX::XMFLOAT4X4 viewMatrix; // nézet-mátrix
|
||||
|
19
main.cpp
19
main.cpp
@ -13,6 +13,7 @@
|
||||
|
||||
#include "Timer.h"
|
||||
#include "Geometry.h"
|
||||
#include "Entity.h"
|
||||
|
||||
// FPS-mérés
|
||||
size_t gFrames = 0;
|
||||
@ -71,6 +72,18 @@ void mouseCB(EventHandlerCBData * pCBData)
|
||||
LOG("Mouse clicked!");
|
||||
|
||||
// TODO új entitás behozása a kamera pozíciójára
|
||||
DXWindow * pWindow = static_cast<DXWindow *>((void *)GetWindowLongPtrA(pCBData->hwnd, GWLP_USERDATA));
|
||||
ComPtr<ID3D12Device> device = pWindow->getDevice(); // device elkérése
|
||||
|
||||
SRTProps srtProps;
|
||||
srtProps.translation = gCam.getViewParams().position;
|
||||
|
||||
// új geometria létrehozása
|
||||
auto pTeapot = std::shared_ptr<Entity>(new Entity(device));
|
||||
pTeapot->loadBinarySTL("assets/utahteapot.stl", ImportAdapters::IAD_SwapYZ_RH);
|
||||
pTeapot->setEntitySRT(srtProps);
|
||||
|
||||
gDrawables.push_back(pTeapot);
|
||||
}
|
||||
|
||||
void moveForward_H(EventHandlerCBData * pCBData)
|
||||
@ -125,7 +138,7 @@ void regEventHandlers(EventHandler * pEH)
|
||||
pEH->regKeyCB('P', keyCB, nullptr, { ET_KeyDown });
|
||||
|
||||
// kattintás
|
||||
pEH->regMouseCB(mouseCB, nullptr, { ET_LMouseDown });
|
||||
pEH->regMouseCB(mouseCB, nullptr, { ET_RMouseDown });
|
||||
|
||||
// mozgás
|
||||
pEH->regKeyCB('W', moveForward_H, nullptr, { ET_KeyDown, ET_KeyUp }); // előre
|
||||
@ -173,11 +186,11 @@ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszA
|
||||
|
||||
std::vector<uint32_t> indices = { 0, 1, 2 }; // indexek
|
||||
|
||||
auto pGeo = std::shared_ptr<Geometry>(new Geometry(win.getDevice()));
|
||||
auto pGeo = std::shared_ptr<Entity>(new Entity(win.getDevice()));
|
||||
pGeo->setVertices(vertices);
|
||||
pGeo->setIndices(indices);
|
||||
|
||||
auto pGeo2 = std::shared_ptr<Geometry>(new Geometry(win.getDevice()));
|
||||
auto pGeo2 = std::shared_ptr<Entity>(new Entity(win.getDevice()));
|
||||
pGeo2->loadBinarySTL("assets/dust2.stl", ImportAdapters::IAD_SwapYZ_RH);
|
||||
|
||||
(*pGeo) += (*pGeo2);
|
||||
|
Loading…
x
Reference in New Issue
Block a user