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