You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.7 KiB
C
111 lines
3.7 KiB
C
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include "Cry_Math.h"
|
|
#include "Cry_Geo.h"
|
|
#include "IMaterial.h"
|
|
|
|
// General forward declaration.
|
|
struct SRenderingPassInfo;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Type of static sub object.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
enum EStaticSubObjectType
|
|
{
|
|
STATIC_SUB_OBJECT_MESH, // This simple geometry part of the multi-sub object geometry.
|
|
STATIC_SUB_OBJECT_HELPER_MESH, // Special helper mesh, not rendered usually, used for broken pieces.
|
|
};
|
|
|
|
// used for on-CPU voxelization
|
|
struct SRayHitInfo
|
|
{
|
|
SRayHitInfo()
|
|
{
|
|
memset(this, 0, sizeof(*this));
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Input parameters.
|
|
Vec3 inReferencePoint;
|
|
Ray inRay;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Output parameters.
|
|
Vec3 vHitPos;
|
|
Vec3 vHitNormal;
|
|
|
|
// More inputs
|
|
bool bInFirstHit;
|
|
bool bUseCache;
|
|
};
|
|
|
|
// Summary:
|
|
// Interface to hold static object data
|
|
struct IStatObj
|
|
{
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// SubObject
|
|
//////////////////////////////////////////////////////////////////////////
|
|
struct SSubObject
|
|
{
|
|
EStaticSubObjectType nType;
|
|
Matrix34 localTM; // Local transformation matrix, relative to parent.
|
|
IStatObj* pStatObj; // Static object for sub part of CGF.
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
virtual ~IStatObj() {}
|
|
// Description:
|
|
// Provide access to the faces, vertices, texture coordinates, normals and
|
|
// colors of the object used later for CRenderMesh construction.
|
|
// Return Value:
|
|
//
|
|
// Summary:
|
|
// Get the object source geometry
|
|
virtual struct IIndexedMesh* GetIndexedMesh(bool bCreateIfNone = false) = 0;
|
|
|
|
// Summary:
|
|
// Get the bounding box
|
|
// Arguments:
|
|
// Mins - Position of the bottom left close corner of the bounding box
|
|
// Maxs - Position of the top right far corner of the bounding box
|
|
virtual AABB GetAABB() = 0;
|
|
|
|
// Description:
|
|
// Returns the LOD object, if present.
|
|
// Arguments:
|
|
// nLodLevel - Level of the LOD
|
|
// bReturnNearest - if true will return nearest available LOD to nLodLevel.
|
|
// Return Value:
|
|
// A static object with the desired LOD. The value NULL will be return if there isn't any LOD object for the level requested.
|
|
// Summary:
|
|
// Get the LOD object
|
|
virtual IStatObj* GetLodObject(int nLodLevel, bool bReturnNearest = false) = 0;
|
|
|
|
// Summary:
|
|
// Returns a pointer to the object
|
|
// Return Value:
|
|
// A pointer to the current object, which is simply done like this "return this;"
|
|
virtual struct IStatObj* GetIStatObj() { return this; }
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Interface to the Sub Objects.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Summary:
|
|
// Retrieve number of sub-objects.
|
|
virtual int GetSubObjectCount() const = 0;
|
|
// Summary:
|
|
// Retrieve sub object by index, where 0 <= nIndex < GetSubObjectCount()
|
|
virtual SSubObject* GetSubObject(int nIndex) = 0;
|
|
|
|
// Intersect ray with static object.
|
|
// Ray must be in object local space.
|
|
virtual bool RayIntersection(SRayHitInfo& hitInfo, IMaterial* pCustomMtl = nullptr) = 0;
|
|
};
|