mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
31b63bb79f
Generated using script: for file in \$(find ./legacy -type f | \grep -E "\.cpp|\.h") do mv $file temp.xxx cp gplheader $file cat temp.xxx >> $file done
103 lines
2.5 KiB
C
103 lines
2.5 KiB
C
/*
|
|
* Descent 3
|
|
* Copyright (C) 2024 Parallax Software
|
|
*
|
|
* 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/>.
|
|
*/
|
|
|
|
#ifndef HEMICUBE_H
|
|
#define HEMICUBE_H
|
|
|
|
#include "3d.h"
|
|
#include "radiosity.h"
|
|
#include "gr.h"
|
|
|
|
typedef struct
|
|
{
|
|
matrix view_matrix;
|
|
matrix head_matrix;
|
|
vector view_position;
|
|
rad_element *shooting_element;
|
|
rad_surface *shooting_surface;
|
|
|
|
grHardwareSurface drawing_surface;
|
|
grViewport *vport;
|
|
int *id_grid;
|
|
float *depth_grid;
|
|
|
|
float *top_array;
|
|
float *side_array;
|
|
|
|
int ff_res; // Form factor resolution
|
|
int grid_dim; // Hemicube top/side array dimension
|
|
|
|
} rad_hemicube;
|
|
|
|
typedef struct
|
|
{
|
|
float sx,sy;
|
|
float z;
|
|
} hemicube_point;
|
|
|
|
|
|
extern rad_hemicube rad_Hemicube;
|
|
extern int Hemicube_resolution;
|
|
|
|
// Calculates the form factors for a hemicube
|
|
void CalculateFormFactorsHemiCube ();
|
|
|
|
// Initializes the hemicube
|
|
void InitHemicube (int resolution);
|
|
|
|
void CloseHemicube ();
|
|
|
|
// Clears the Zbuffer hemicube grid
|
|
void ClearHemicubeGrid ();
|
|
|
|
// Sets the elements we're shooting from
|
|
void SetElementView(rad_element *ep);
|
|
|
|
// Sets the surface we're shooting from
|
|
void SetSurfaceView(rad_surface *ep);
|
|
|
|
// Build transformation matrix for our hemicube
|
|
void BuildTransform(vector *nu,vector *nv,vector *nn);
|
|
|
|
// Gets our view system ready for drawing
|
|
void StartHemicubeDrawing ();
|
|
|
|
// Releases the view system
|
|
void EndHemicubeDrawing (int);
|
|
|
|
// Update hemicube view transformation matrix
|
|
void UpdateView( int face_id );
|
|
|
|
// Actually draws the projected polygon onto a hemicube face
|
|
void ScanRadiosityPoly (g3Point **pl,int nv,int element_id);
|
|
void DrawRadiosityPoly(int nv,g3Point **pointlist,int id);
|
|
void GetVertexOrdering (hemicube_point *t, int nv, int *vlt, int *vlb, int *vrt, int *vrb,int *bottom_y_ind);
|
|
int PrevIndex(int val,int modulus);
|
|
int NextIndex(int val,int modulus);
|
|
|
|
// Sums the delta form factors
|
|
void SumDeltas (float *ff_array,int face_id);
|
|
|
|
float GetTopFactor( int row, int col );
|
|
|
|
// Get side face cell form factor
|
|
float GetSideFactor( int row, int col );
|
|
|
|
|
|
|
|
#endif |