*
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
#include "Gizmos.h"
|
||||
#include "GameObject.h"
|
||||
#include "LEngine.h"
|
||||
#include "d3d11_helper.h"
|
||||
#include "LEngine.h"
|
||||
|
||||
Gizmos::Gizmos()
|
||||
:_color(0.0f, 1.0f, 0.0f, 1.0f)
|
||||
{
|
||||
_matrix = float4x4::identity();
|
||||
}
|
||||
void Gizmos::SetMatrix(const float4x4& matrix) {
|
||||
_matrix = matrix;
|
||||
}
|
||||
float4x4 Gizmos::GetMatrix() {
|
||||
return _matrix;
|
||||
}
|
||||
void Gizmos::DrawBounds(const Bounds& bounds) {
|
||||
auto b = bounds;
|
||||
b.Scale(1.01f);
|
||||
auto bMin = b.Minimum();
|
||||
auto bMax = b.Maximum();
|
||||
|
||||
DrawLine(float3(bMin.x(), bMax.y(), bMax.z()), float3(bMax.x(), bMax.y(), bMax.z()));
|
||||
DrawLine(float3(bMin.x(), bMax.y(), bMin.z()), float3(bMax.x(), bMax.y(), bMin.z()));
|
||||
DrawLine(float3(bMin.x(), bMax.y(), bMax.z()), float3(bMin.x(), bMax.y(), bMin.z()));
|
||||
DrawLine(float3(bMax.x(), bMax.y(), bMax.z()), float3(bMax.x(), bMax.y(), bMin.z()));
|
||||
|
||||
DrawLine(float3(bMin.x(), bMin.y(), bMax.z()), float3(bMax.x(), bMin.y(), bMax.z()));
|
||||
DrawLine(float3(bMin.x(), bMin.y(), bMin.z()), float3(bMax.x(), bMin.y(), bMin.z()));
|
||||
DrawLine(float3(bMin.x(), bMin.y(), bMax.z()), float3(bMin.x(), bMin.y(), bMin.z()));
|
||||
DrawLine(float3(bMax.x(), bMin.y(), bMax.z()), float3(bMax.x(), bMin.y(), bMin.z()));
|
||||
|
||||
DrawLine(float3(bMin.x(), bMin.y(), bMin.z()), float3(bMin.x(), bMax.y(), bMin.z()));
|
||||
DrawLine(float3(bMax.x(), bMin.y(), bMin.z()), float3(bMax.x(), bMax.y(), bMin.z()));
|
||||
|
||||
DrawLine(float3(bMin.x(), bMin.y(), bMax.z()), float3(bMin.x(), bMax.y(), bMax.z()));
|
||||
DrawLine(float3(bMax.x(), bMin.y(), bMax.z()), float3(bMax.x(), bMax.y(), bMax.z()));
|
||||
|
||||
}
|
||||
void Gizmos::Init() {
|
||||
/*_backMaterial = Material::Create(Shader::Create(L"shaders/gizmos.fx"), "gizmo_back");
|
||||
|
||||
_frontMaterial = Material::Create(_backMaterial->GetShader(), "gizmo_front");
|
||||
|
||||
_backMaterial->GetParametersBlock().SetValue("alphaMul", 0.2f);
|
||||
_frontMaterial->GetParametersBlock().SetValue("alphaMul", 1.0f);
|
||||
|
||||
D3D11_INPUT_ELEMENT_DESC ied[] = {
|
||||
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0 },
|
||||
};
|
||||
|
||||
auto vs = _backMaterial->GetShader()->GetShader(ShaderType::Vs);
|
||||
auto device = LEngine::Instance()->GetRenderer()->GetDevice();
|
||||
auto hr = device->CreateInputLayout(ied, 2, vs->blob->GetBufferPointer(), vs->blob->GetBufferSize(), &_inputLayout);
|
||||
|
||||
D3D11_DEPTH_STENCIL_DESC desc;
|
||||
d3d11_helper::DefaultDepthStencilDesc(desc);
|
||||
hr = device->CreateDepthStencilState(&desc, &_frontLineDepthState);
|
||||
desc.DepthFunc = D3D11_COMPARISON_GREATER;
|
||||
hr = device->CreateDepthStencilState(&desc, &_backLineDepthState);*/
|
||||
}
|
||||
void Gizmos::DrawLine(const float3& from, const float3& to) {
|
||||
/*_vertices.push_back(GizmoVertex(lm::mul(_matrix, from), _color));
|
||||
_vertices.push_back(GizmoVertex(lm::mul(_matrix, to), _color));*/
|
||||
}
|
||||
void Gizmos::DrawAll(CameraPtr camera) {
|
||||
/*auto renderer = LEngine::Instance()->GetRenderer();
|
||||
|
||||
renderer->GetImmediateContext()->OMSetDepthStencilState(_frontLineDepthState, 0);
|
||||
DrawImpl(camera, _frontMaterial);
|
||||
renderer->GetImmediateContext()->OMSetDepthStencilState(_backLineDepthState, 0);
|
||||
DrawImpl(camera, _backMaterial);
|
||||
renderer->GetImmediateContext()->OMSetDepthStencilState(_frontLineDepthState, 0);*/
|
||||
}
|
||||
void Gizmos::DrawImpl(CameraPtr camera, MaterialPtr material) {
|
||||
/*if (_vertices.size() < 2) {
|
||||
return;
|
||||
}
|
||||
//set system variables
|
||||
auto& params = material->GetParametersBlock();
|
||||
float4x4 matrix = float4x4::identity();
|
||||
params.SetValue("mWorld", matrix);
|
||||
params.SetValue("mView", camera->worldToCameraMatrix());
|
||||
params.SetValue("mProjection", camera->projectionMatrix());
|
||||
|
||||
auto renderer = LEngine::Instance()->GetRenderer();
|
||||
|
||||
material->Apply(renderer->GetImmediateContext());
|
||||
|
||||
ID3D11Buffer* vb[1] = { _vertexBuffer };
|
||||
UINT stride = sizeof(GizmoVertex);
|
||||
UINT offset = 0;
|
||||
|
||||
renderer->GetImmediateContext()->IASetInputLayout(_inputLayout);
|
||||
renderer->GetImmediateContext()->IASetVertexBuffers(0, 1, vb, &stride, &offset);
|
||||
renderer->GetImmediateContext()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST);
|
||||
renderer->GetImmediateContext()->Draw(_vertices.size(), 0);*/
|
||||
}
|
||||
void Gizmos::Clear() {
|
||||
/*_vertices.clear();
|
||||
_matrix = float4x4::identity();*/
|
||||
}
|
||||
void Gizmos::PrepareRender() {
|
||||
/*_vertexBuffer = nullptr;
|
||||
|
||||
if (_vertices.size() < 2) {
|
||||
return;
|
||||
}
|
||||
//vertex buffer
|
||||
D3D11_BUFFER_DESC desc = { 0 };
|
||||
desc.Usage = D3D11_USAGE_DEFAULT;
|
||||
desc.ByteWidth = sizeof(_vertices[0])* _vertices.size();
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
desc.CPUAccessFlags = 0;
|
||||
desc.MiscFlags = 0;
|
||||
|
||||
D3D11_SUBRESOURCE_DATA data;
|
||||
data.pSysMem = &_vertices[0];
|
||||
data.SysMemPitch = 0;
|
||||
|
||||
_vertexBuffer = nullptr;
|
||||
LEngine::Instance()->GetRenderer()->GetDevice()->CreateBuffer(&desc, &data, &_vertexBuffer);*/
|
||||
}
|
||||
float4 Gizmos::GetColor() {
|
||||
return _color;
|
||||
}
|
||||
void Gizmos::SetColor(float4 color) {
|
||||
_color = color;
|
||||
}
|
||||
Reference in New Issue
Block a user