mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 23:51:41 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
216
Code/Tools/max2w3d/meshsave.h
Normal file
216
Code/Tools/max2w3d/meshsave.h
Normal file
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* $Header: /Commando/Code/Tools/max2w3d/meshsave.h 45 1/28/02 3:47p Greg_h $ */
|
||||
/***********************************************************************************************
|
||||
*** Confidential - Westwood Studios ***
|
||||
***********************************************************************************************
|
||||
* *
|
||||
* Project Name : Commando / G *
|
||||
* *
|
||||
* File Name : MESHSAVE.H *
|
||||
* *
|
||||
* Programmer : Greg Hjelstrom *
|
||||
* *
|
||||
* Start Date : 06/10/97 *
|
||||
* *
|
||||
* Last Update : June 10, 1997 [GH] *
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifndef MESHSAVE_H
|
||||
#define MESHSAVE_H
|
||||
|
||||
#include "rawfile.h" // have to include this before Max.h
|
||||
#include <Max.h>
|
||||
#include "bittype.h"
|
||||
#include "w3d_file.h"
|
||||
#include "chunkio.h"
|
||||
#include "progress.h"
|
||||
#include "nodelist.h"
|
||||
#include "util.h"
|
||||
#include "w3dmtl.h"
|
||||
#include "meshbuild.h"
|
||||
#include "w3dappdata.h"
|
||||
|
||||
class HierarchySaveClass;
|
||||
class MeshConnectionsClass;
|
||||
class MeshSaveClass;
|
||||
class SkinDataClass;
|
||||
|
||||
|
||||
/*******************************************************************************************
|
||||
**
|
||||
** VertStruct
|
||||
**
|
||||
*******************************************************************************************/
|
||||
struct VertStruct
|
||||
{
|
||||
Point3 Vertex;
|
||||
Point3 Normal;
|
||||
Point2 TexCoord;
|
||||
Color Color;
|
||||
|
||||
uint32 MaxVertIdx; // index of the MAX vertex that this vert came from
|
||||
uint32 MaxFaceIdx; // index of the MAX face that this vert came from
|
||||
VertStruct * Next; // used by the hash table...
|
||||
};
|
||||
|
||||
/*******************************************************************************************
|
||||
**
|
||||
** FaceStruct
|
||||
**
|
||||
*******************************************************************************************/
|
||||
struct FaceStruct
|
||||
{
|
||||
uint32 MaxVidx[3]; // original 3ds-MAX vertex index (for smoothing computations)
|
||||
uint32 OurVidx[3]; // vertex, vertex normal, and texture coord indices
|
||||
uint32 MaterialIdx; // material index
|
||||
uint32 SmGroup; // smoothing group (not really needed, normals pre-calced)
|
||||
Point3 Normal; // Face normal
|
||||
float32 Dist; // Plane distance
|
||||
uint32 Attributes; // collision flags, sort method, etc
|
||||
};
|
||||
|
||||
/*******************************************************************************************
|
||||
**
|
||||
** MeshSaveClass - this is the big one, create meshes and skins from a MAX mesh.
|
||||
**
|
||||
*******************************************************************************************/
|
||||
class MeshSaveClass
|
||||
{
|
||||
public:
|
||||
|
||||
enum {
|
||||
EX_UNKNOWN = 0, // exception error codes
|
||||
EX_CANCEL = 1
|
||||
};
|
||||
|
||||
MeshSaveClass(
|
||||
char * mesh_name,
|
||||
char * container_name,
|
||||
INode * inode,
|
||||
const Mesh * input_mesh,
|
||||
Matrix3 & exportspace,
|
||||
W3DAppData2Struct & exportoptions,
|
||||
HierarchySaveClass * htree,
|
||||
TimeValue curtime,
|
||||
Progress_Meter_Class & meter,
|
||||
WorldInfoClass * world_info = NULL
|
||||
);
|
||||
|
||||
~MeshSaveClass(void);
|
||||
|
||||
int Write_To_File(ChunkSaveClass & csave,bool export_aabtrees = false);
|
||||
|
||||
private:
|
||||
|
||||
INode * MaxINode;
|
||||
W3DAppData2Struct & ExportOptions;
|
||||
|
||||
W3dMeshHeader3Struct Header;
|
||||
W3dMaterialDescClass MaterialDesc;
|
||||
MeshBuilderClass Builder;
|
||||
TimeValue CurTime;
|
||||
Matrix3 ExportSpace;
|
||||
Matrix3 MeshToExportSpace;
|
||||
Matrix3 PivotSpace;
|
||||
HierarchySaveClass * HTree;
|
||||
char * UserText;
|
||||
bool MeshInverted; // this flag indicates that the transform is inverting this mesh
|
||||
W3dVertInfStruct * VertInfluences;
|
||||
|
||||
int * MaterialRemapTable; // reindexes mtl_idx after un-used mtls are removed
|
||||
|
||||
// Flag set if the mesh uses a PS2 material.
|
||||
int PS2Material;
|
||||
|
||||
private:
|
||||
|
||||
// Use a MeshBuilderClass to process the mesh
|
||||
void Build_Mesh(Mesh & mesh, Mtl *node_mtl);
|
||||
|
||||
// compute properties for the mesh
|
||||
void compute_bounding_volumes(void);
|
||||
void compute_physical_constants(INode * inode,Progress_Meter_Class & meter,bool voxelize);
|
||||
|
||||
// create the materials
|
||||
int scan_used_materials(Mesh & mesh, Mtl * nodemtl);
|
||||
void create_materials(Mtl * nodemtl,DWORD wirecolor);
|
||||
|
||||
// creating damage stages
|
||||
void add_damage_stage(MeshSaveClass * damage_mesh);
|
||||
|
||||
// methods used in building the wtm file
|
||||
int write_header(ChunkSaveClass & csave);
|
||||
int write_user_text(ChunkSaveClass & csave);
|
||||
|
||||
int write_verts(ChunkSaveClass & csave);
|
||||
int write_vert_normals(ChunkSaveClass & csave);
|
||||
int write_vert_influences(ChunkSaveClass & csave);
|
||||
int write_vert_shade_indices(ChunkSaveClass & csave);
|
||||
|
||||
int write_triangles(ChunkSaveClass & csave);
|
||||
|
||||
int write_material_info(ChunkSaveClass & csave);
|
||||
int write_shaders(ChunkSaveClass & csave);
|
||||
int write_vertex_materials(ChunkSaveClass & csave);
|
||||
int write_textures(ChunkSaveClass & csave);
|
||||
|
||||
int write_pass(ChunkSaveClass & csave,int pass);
|
||||
int write_vertex_material_ids(ChunkSaveClass & csave,int pass);
|
||||
int write_shader_ids(ChunkSaveClass & csave,int pass);
|
||||
int write_dcg(ChunkSaveClass & csave,int pass);
|
||||
|
||||
int write_texture_stage(ChunkSaveClass & csave,int pass,int stage);
|
||||
int write_texture_ids(ChunkSaveClass & csave,int pass,int stage);
|
||||
int write_texture_coords(ChunkSaveClass & csave,int pass,int stage);
|
||||
|
||||
int write_aabtree(ChunkSaveClass & csave);
|
||||
|
||||
// transforms mesh so that it uses the desired coordinate system
|
||||
void prep_mesh(Mesh & mesh,Matrix3 & objoff);
|
||||
|
||||
// inverse deform the mesh so that its ready to be used as a skin!
|
||||
void get_skin_modifier_objects(SkinDataClass ** skin_data_ptr,SkinWSMObjectClass ** skin_obj_ptr);
|
||||
int get_htree_bone_index_for_inode(INode * node);
|
||||
void inv_deform_mesh(void);
|
||||
|
||||
// get rendering settings for the materials
|
||||
void customize_materials(void);
|
||||
|
||||
// Write the ps2 shaders and approximate them as close as possible in the W3D shaders.
|
||||
int write_ps2_shaders(ChunkSaveClass & csave);
|
||||
|
||||
// Make the PC shader emulate the PS2 shader.
|
||||
void setup_PC_shaders_from_PS2_shaders();
|
||||
|
||||
friend class DamageClass;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*MESHSAVE_H*/
|
||||
Reference in New Issue
Block a user