![Page 1: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/1.jpg)
GraphGamegg011-Particles
Plakátok, részecskerendszerek
Szécsi László
![Page 2: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/2.jpg)
gg011-Particles project
• copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide)
• vcxproj, filters átnevezés• solution/add existing project• rename project• working dir: $(SolutionDir)• Project Properties/Configuration
Properties/Debugging/Command Arguments--solutionPath:"$(SolutionDir)" --projectPath:"$(ProjectDir)"
• build, run
![Page 3: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/3.jpg)
Particle osztály#include "Math/math.h"class Particle{ friend class Game; Egg::Math::float3 position; Egg::Math::float3 velocity; float lifespan; float age;public:};
![Page 4: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/4.jpg)
Particle osztályvoid reborn() { using namespace Egg::Math; position = float3::random(-1,1); velocity = position * 5; age = 0; lifespan = float1::random(2,5);}Particle(){ reborn(); }
![Page 5: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/5.jpg)
Particle buffer, input layout és pass
• Lehetne ezeket kézzel létrehozni– ugyanúgy, ahogy a háromszögrajzolásnál az elején– csak a shader az effect fileból jön
• D3DX11_PASS_DESC billboardPassDesc;• effect->GetTechniqueByName("billboard")->
GetPassByName("fire")->GetDesc(&billboardPassDesc);
– és a VB használati módja dinamikus– rajzoláskor
• context->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_POINTLIST);
• effect->GetTechniqueByName("billboard")-> GetPassByName("fire")->Apply(0, context);
• context->Draw(particles.size(), 0);
![Page 6: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/6.jpg)
Egg::Mesh-t használva
• Mesh::VertexStream a buffer• Effect pass-ra Mesh::Material• InputLayout gyártása a Mesh::Binder feladata• a végén kapunk egy Mesh::Shaded-et amit
csak ki kell rajzolni– beállítja az effect pass-t– az input layoutot– a vertex buffert– rajzol
![Page 7: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/7.jpg)
Game.h#include "Particle.h"#include <vector>
![Page 8: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/8.jpg)
Game.hclass Game : public Egg::Sas::SasApp
{ std::vector<Particle> particles; Egg::Mesh::Shaded::P fireBillboardSet;
![Page 9: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/9.jpg)
createResourcesfor(int i=0; i<40; i++) particles.push_back(Particle());
![Page 10: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/10.jpg)
createResourcesD3D11_INPUT_ELEMENT_DESC particleElements[3];particleElements[0].AlignedByteOffset = offsetof(Particle, position);particleElements[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;particleElements[0].InputSlot = 0;particleElements[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;particleElements[0].InstanceDataStepRate = 0;particleElements[0].SemanticIndex = 0;particleElements[0].SemanticName = "POSITION";particleElements[1].AlignedByteOffset = offsetof(Particle, lifespan);particleElements[1].Format = DXGI_FORMAT_R32_FLOAT;particleElements[1].InputSlot = 0;particleElements[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;particleElements[1].InstanceDataStepRate = 0;particleElements[1].SemanticIndex = 0;particleElements[1].SemanticName = "LIFESPAN";particleElements[2].AlignedByteOffset = offsetof(Particle, age);particleElements[2].Format = DXGI_FORMAT_R32_FLOAT;particleElements[2].InputSlot = 0;particleElements[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;particleElements[2].InstanceDataStepRate = 0;particleElements[2].SemanticIndex = 0;particleElements[2].SemanticName = "AGE";
![Page 11: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/11.jpg)
createResourcesEgg::Mesh::VertexStreamDesc particleBufferDesc;
particleBufferDesc.elements = particleElements;particleBufferDesc.nElements = 3;particleBufferDesc.nVertices = particles.size();
particleBufferDesc.vertexStride = sizeof(Particle);
particleBufferDesc.vertexData = &particles.at(0);
particleBufferDesc.cpuAccessFlags = D3D11_CPU_ACCESS_WRITE;
particleBufferDesc.usage = D3D11_USAGE_DYNAMIC;
![Page 12: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/12.jpg)
createResourcesEgg::Mesh::VertexStream::P particleVertexStream = Egg::Mesh::VertexStream::create( device, particleBufferDesc);
![Page 13: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/13.jpg)
createResourcesID3DX11EffectPass* billboardPass = effect-> GetTechniqueByName("billboard")-> GetPassByName("fire");Egg::Mesh::Material::P fireMaterial = Egg::Mesh::Material::create( billboardPass, 0);fireBillboardSet = binder->bindMaterial( fireMaterial, particleVertexStream);
![Page 14: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/14.jpg)
releaseResourcesfireBillboardSet.reset();
![Page 15: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/15.jpg)
renderfireBillboardSet->draw(context);
![Page 16: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/16.jpg)
Új fx file
• solution fx folderbe• billboard.fx
![Page 17: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/17.jpg)
fx/main.fx#include <envmapped.fx>#include <billboard.fx>
#9.0
![Page 18: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/18.jpg)
fx/billboard.fxstruct IaosBillboard{ float3 pos : POSITION; float lifespan : LIFESPAN; float age : AGE;};
typedef IaosBillboard VsosBillboard;
VsosBillboard vsBillboard(IaosBillboard input){ return input;}
#9.0
![Page 19: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/19.jpg)
fx/billboard.fxstruct GsosBillboard{ float4 pos : SV_Position; float2 tex : TEXCOORD;};
float billboardWidth = 0.1;float billboardHeight = 0.1;
#9.0
![Page 20: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/20.jpg)
fx/billboard.fx[maxvertexcount(4)]void gsBillboard( point VsosBillboard input[1], inout TriangleStream<GsosBillboard> stream) { float4 hndcPos = mul(float4(input[0].pos, 1), modelViewProjMatrix); GsosBillboard output; output.pos = hndcPos; output.pos.x += billboardWidth; output.pos.y += billboardHeight; output.tex = float2(1, 0); stream.Append(output);output.pos = hndcPos;
output.pos.x += billboardWidth;
output.pos.y -= billboardHeight;
output.tex = float2(1, 1);
stream.Append(output);
output.pos = hndcPos;
output.pos.x -= billboardWidth;
output.pos.y += billboardHeight;
output.tex = float2(0, 0);
stream.Append(output);
output.pos = hndcPos;
output.pos.x -= billboardWidth;
output.pos.y -= billboardHeight;
output.tex = float2(0, 1);
stream.Append(output); }
#9.0
![Page 21: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/21.jpg)
fx/billboard.fxfloat4 psFire(GsosBillboard input) : SV_Target{ return input.tex.xyyy;}technique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); }}
#9.0
![Page 22: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/22.jpg)
Színes plakátok
![Page 23: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/23.jpg)
Textúra
• particle.dds letöltése• Projects/gg011-Particles/Media folderbe
![Page 24: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/24.jpg)
Game classclass Game : public Egg::Sas::SasApp
{
ID3D11ShaderResourceView* billboardSrv;
![Page 25: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/25.jpg)
createResourcesD3DX11CreateShaderResourceViewFromFileA( device, systemEnvironment.resolveMediaPath( "particle.dds" ).c_str(), NULL, NULL, &billboardSrv, NULL);effect-> GetVariableByName("billboardTexture") ->AsShaderResource(billboardSrv);
![Page 26: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/26.jpg)
releaseResourcesbillboardSrv->Release();
![Page 27: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/27.jpg)
fx/billboard.fxTexture2D billboardTexture;
float4 psFire(GsosBillboard input) : SV_Target{ return billboardTexture.Sample( linearSampler, input.tex.xy);}
#9.0
![Page 28: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/28.jpg)
Textúrázott, de viewporthoz torzuló
![Page 29: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/29.jpg)
createSwapChainResourcesusing namespace Egg::Math;
float4 worldBillboardSize(0.2, 0.2, 0, 0);float4 screenBillboardSize = worldBillboardSize * firstPersonCam->getProjMatrix();
effect-> GetVariableByName("billboardWidth")-> AsScalar()-> SetFloat(screenBillboardSize.x);effect-> GetVariableByName("billboardHeight")-> AsScalar()-> SetFloat(screenBillboardSize.y);
![Page 30: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/30.jpg)
Állandó méretű plakátok
![Page 31: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/31.jpg)
Alpha blending
• BlendState-et kell definiálni, pass-ban kiválasztani
• a többi pass-ban viszont vissza kéne állítani• legyen a blendStates.fx, amibe az összes
BlendState-et gyűjtjük• legyen akkor már– rasterizerStates.fx– depthStencilStates.fx
![Page 32: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/32.jpg)
fx/blendStates.fxBlendState defaultBlender{};
BlendState additiveBlender{BlendEnable[0] = true;SrcBlend = src_alpha;DestBlend = one;BlendOp = add;SrcBlendAlpha = one;DestBlendAlpha = one;BlendOpAlpha = add;
};
#9.0
![Page 33: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/33.jpg)
fx/blendStates.fxRasterizerState defaultRasterizer{};
RasterizerState noCullRasterizer{
CullMode = none;FillMode = solid;
};
RasterizerState backfaceRasterizer{
CullMode = front;FillMode = solid;
};
RasterizerState wireframeRasterizer{
CullMode = none;FillMode = wireFrame;
};
#9.0
![Page 34: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/34.jpg)
depthStencilStates.fxDepthStencilState defaultCompositor{};
DepthStencilState noDepthTestCompositor{
DepthEnable = false;DepthWriteMask = zero;
};
DepthStencilState noDepthWriteCompositor{ DepthEnable = true; DepthWriteMask = zero;};
#9.0
![Page 35: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/35.jpg)
fx/basic.fx#include <blendStates.fx>#include <rasterizerStates.fx>#include <depthStencilStates.fx>
...
technique11 basic{
pass basic{ SetVertexShader ( CompileShader( vs_5_0, vsTrafo() ) ); SetGeometryShader( NULL ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psBasic() ) ); SetDepthStencilState( defaultCompositor, 0 ); SetBlendState( defaultBlender,
float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }
}
#9.0
![Page 36: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/36.jpg)
Minden pass legyen teljes
• textured/textured• shaded/diffuse, shaded/specular• envmapped/envmapped,
envmapped/background
![Page 37: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/37.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( defaultCompositor, 0 ); SetBlendState( defaultBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 38: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/38.jpg)
Ugyanaz
![Page 39: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/39.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( defaultCompositor, 0 ); SetBlendState( additiveBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 40: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/40.jpg)
Blending van… de z-teszt is
![Page 41: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/41.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( noDepthTestCompositor, 0 ); SetBlendState( additiveBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 42: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/42.jpg)
Nem depth test – zsiráf sem takar
![Page 43: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/43.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( noDepthWriteCompositor, 0 ); SetBlendState( additiveBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 44: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/44.jpg)
Zsiráf takar, plakát nem
![Page 45: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/45.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( noDepthWriteCompositor, 0 ); SetBlendState( transparencyBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 46: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/46.jpg)
Rossz a sorrend… hátsók takarnak előbbiekre
Ehhez rendezni kellene a plakátokat mélység szerint…
egyelőre inkább vissza az additívhoz!
![Page 47: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/47.jpg)
Legyen színesebbfloat4 psFire(GsosBillboard input) : SV_Target{ float4 color = billboardTexture.Sample(linearSampler,
input.tex.xy); color.rgb = float3( color.a, pow(color.a, 4), pow(color.a, 10)); return color;}
#9.0
![Page 48: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/48.jpg)
worldBillboardSize (1, 1)
![Page 49: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/49.jpg)
Nagyobb tűzusing namespace Egg::Math;firstPersonCam = Egg::Cam::FirstPerson::create()
->setView( float3(0, 0, 200), float3(0, 0, -1)) ->setProj(1.2, 1, 1, 1000) ->setSpeed(50);
float4 worldBillboardSize(50.0, 50.0, 0, 0);
![Page 50: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/50.jpg)
Particlevoid move(float dt){ position +=velocity * dt; age += dt; if(age > lifespan) reborn();}
![Page 51: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/51.jpg)
Game::animatefor(int i = 0; i < particles.size(); i++)
particles.at(i).move(dt);
![Page 52: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/52.jpg)
Game::animateID3D11Buffer* vertexBuffer = fireBillboardSet->getGeometry()-> getPrimaryBuffer();
ID3D11DeviceContext* context;device->GetImmediateContext(&context);D3D11_MAPPED_SUBRESOURCE mappedVertexData;context->Map(vertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedVertexData);
memcpy(mappedVertexData.pData, &particles.at(0), sizeof(Particle) * particles.size());context->Unmap(vertexBuffer, 0);context->Release();
![Page 53: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/53.jpg)
Hirtelen tűnnek el
![Page 54: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/54.jpg)
Megoldás
• Korfüggő méret, intenzitás és átlátszóság
![Page 55: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/55.jpg)
gsBillboardstruct GsosBillboard{ float4 pos : SV_Position; float2 tex : TEXCOORD; float opacity : OPACITY;};
float s = input[0].age / input[0].lifespan;...output.opacity = 1 - abs(s*2-1);
// és mindenhol szorozzuk s-sel a szélességet és magasságot
#9.0
![Page 56: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/56.jpg)
psFirefloat4 psFire(GsosBillboard input) : SV_Target{ float4 color = billboardTexture.Sample(linearSampler,
input.tex.xy); color.rgb = float3(color.a, pow(color.a, 4), pow(color.a, 10)); color.a *= input.opacity; return color;}
#9.0
![Page 57: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/57.jpg)
Simább tűz
![Page 58: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/58.jpg)
fx/billboard.fxtechnique11 billboard { pass fire { SetVertexShader ( CompileShader( vs_5_0, vsBillboard() ) ); SetGeometryShader ( CompileShader( gs_5_0, gsBillboard() ) ); SetRasterizerState( defaultRasterizer ); SetPixelShader( CompileShader( ps_5_0, psFire() ) ); SetDepthStencilState( noDepthWriteCompositor, 0 ); SetBlendState( transparencyBlender, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); }}
#9.0
![Page 59: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/59.jpg)
animate - rendezésusing namespace Egg::Math;struct CameraDepthComparator { float3 ahead; bool operator()(const Particle& a, const Particle& b) { return a.position.dot(ahead) > b.position.dot(ahead) + 0.01; }} comp = { firstPersonCam->getAhead() };std::sort(particles.begin(), particles.end(), comp);
![Page 60: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/60.jpg)
Rendezéssel szép
![Page 61: Plakátok, részecskerendszerek Szécsi László. copy-paste-rename gg009-Gui folder (sok zsiráf nem kell ide) vcxproj, filters átnevezés solution/add existing](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551b1d5255034607418b5901/html5/thumbnails/61.jpg)
400 részecske, kisebb alfa