/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #ifndef CRYINCLUDE_CRY3DENGINE_VOLUMEOBJECTDATACREATE_H #define CRYINCLUDE_CRY3DENGINE_VOLUMEOBJECTDATACREATE_H #pragma once const int VOLUME_SIZE(64); const int VOLUME_SHADOW_SIZE(32); template struct SVolumeDataSrc { typedef T VoxelElementType; unsigned int m_width; unsigned int m_height; unsigned int m_depth; unsigned int m_slice; VoxelElementType* m_pData; SVolumeDataSrc(unsigned int width, unsigned int height, unsigned int depth) : m_width(width) , m_height(height) , m_depth(depth) , m_slice(width * depth) , m_pData(0) { m_pData = new VoxelElementType[m_width * m_height * m_depth]; } ~SVolumeDataSrc() { SAFE_DELETE_ARRAY(m_pData) } size_t size() const { return m_width * m_height * m_depth; } size_t Idx(unsigned int x, unsigned int y, unsigned int z) const { //return z * m_width * m_height + y * m_width + x; return (z * m_height + y) * m_width + x; } T& operator[](size_t idx) { return m_pData[idx]; } const T& operator[](size_t idx) const { return m_pData[idx]; } }; typedef SVolumeDataSrc SVolumeDataSrcB; typedef SVolumeDataSrc SVolumeDataSrcF; bool CreateVolumeObject(const char* filePath, SVolumeDataSrcB& trg, AABB& tightBounds, float& scale); bool CreateVolumeShadow(const Vec3& lightDir, float shadowStrength, const SVolumeDataSrcB& density, SVolumeDataSrcB& shadows); bool CreateDownscaledVolumeObject(const SVolumeDataSrcB& src, SVolumeDataSrcB& trg); struct SVolumeDataHull { SVolumeDataHull() : m_numPts(0) , m_numTris(0) , m_pPts(0) , m_pIdx(0) { } ~SVolumeDataHull() { SAFE_DELETE_ARRAY(m_pPts); SAFE_DELETE_ARRAY(m_pIdx); } size_t m_numPts; size_t m_numTris; SVF_P3F* m_pPts; vtx_idx* m_pIdx; }; bool CreateVolumeDataHull(const SVolumeDataSrcB& src, SVolumeDataHull& hull); #endif // CRYINCLUDE_CRY3DENGINE_VOLUMEOBJECTDATACREATE_H