DebugSphere::DebugSphere(int pPerimiterPoints, ID3D11Device* p_device, ID3D11DeviceContext* p_deviceContext) { m_device = p_device; m_deviceContext = p_deviceContext; AglSphereMesh sm; vector<VertexPC> v = vector<VertexPC>(sm.positions.size()); for (int i = 0; i < v.size(); i++) { if (sm.positions[i].x > 0) v[i] = VertexPC(sm.positions[i], sm.normals[i], AglVector4(0, 0, 1, 1)); else v[i] = VertexPC(sm.positions[i], sm.normals[i], AglVector4(1, 1, 0, 1)); } m_indexCount = sm.indices.size(); //Create Vertex Buffer D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DYNAMIC; bd.ByteWidth = sizeof(VertexPC) * v.size(); bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; D3D11_SUBRESOURCE_DATA vertexData; vertexData.pSysMem = &v[0]; vertexData.SysMemPitch = 0; vertexData.SysMemSlicePitch = 0; m_device->CreateBuffer(&bd, &vertexData, &m_vb); D3D11_BUFFER_DESC ibd; ibd.Usage = D3D11_USAGE_DEFAULT; ibd.ByteWidth = sizeof(unsigned int) * sm.indices.size(); ibd.BindFlags = D3D11_BIND_INDEX_BUFFER; ibd.CPUAccessFlags = 0; ibd.MiscFlags = 0; ibd.StructureByteStride = 0; D3D11_SUBRESOURCE_DATA indexData; indexData.pSysMem = &sm.indices[0]; indexData.SysMemPitch = 0; indexData.SysMemSlicePitch = 0; m_device->CreateBuffer(&ibd, &indexData, &m_ib); }
void LineRenderer::DrawAABB(const AABB& aabb, const float4& color) { float3 min = aabb.Min(); float3 max = aabb.Max(); // render top quad m_vertsPC.push_back(VertexPC(max,color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(max,color)); // render bottom quad m_vertsPC.push_back(VertexPC(float3(max.x,min.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,min.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,min.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,min.y,max.z),color)); // four legs m_vertsPC.push_back(VertexPC(max,color)); m_vertsPC.push_back(VertexPC(float3(max.x,min.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,max.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(min.x,min.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,max.y,min.z),color)); m_vertsPC.push_back(VertexPC(float3(max.x,min.y,min.z),color)); }
void LineRenderer::DrawFrustum(const Frustum& frustum, const float4& color) { float3 corners[8]; frustum.GetCorners(corners); m_vertsPC.push_back(VertexPC(corners[0],color)); m_vertsPC.push_back(VertexPC(corners[1],color)); m_vertsPC.push_back(VertexPC(corners[1],color)); m_vertsPC.push_back(VertexPC(corners[2],color)); m_vertsPC.push_back(VertexPC(corners[2],color)); m_vertsPC.push_back(VertexPC(corners[3],color)); m_vertsPC.push_back(VertexPC(corners[3],color)); m_vertsPC.push_back(VertexPC(corners[0],color)); m_vertsPC.push_back(VertexPC(corners[4],color)); m_vertsPC.push_back(VertexPC(corners[5],color)); m_vertsPC.push_back(VertexPC(corners[5],color)); m_vertsPC.push_back(VertexPC(corners[6],color)); m_vertsPC.push_back(VertexPC(corners[6],color)); m_vertsPC.push_back(VertexPC(corners[7],color)); m_vertsPC.push_back(VertexPC(corners[7],color)); m_vertsPC.push_back(VertexPC(corners[4],color)); m_vertsPC.push_back(VertexPC(corners[0],color)); m_vertsPC.push_back(VertexPC(corners[4],color)); m_vertsPC.push_back(VertexPC(corners[1],color)); m_vertsPC.push_back(VertexPC(corners[5],color)); m_vertsPC.push_back(VertexPC(corners[2],color)); m_vertsPC.push_back(VertexPC(corners[6],color)); m_vertsPC.push_back(VertexPC(corners[3],color)); m_vertsPC.push_back(VertexPC(corners[7],color)); }