mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 20:46:03 +08:00
Update from SDK 2013
This commit is contained in:

committed by
Nicholas Hastings

parent
6d5c024820
commit
94b660e16e
127
raytrace/trace3.cpp
Normal file
127
raytrace/trace3.cpp
Normal file
@ -0,0 +1,127 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
|
||||
#include "raytrace.h"
|
||||
#include <bspfile.h>
|
||||
#include "bsplib.h"
|
||||
|
||||
static Vector VertCoord(dface_t const &f, int vnum)
|
||||
{
|
||||
int eIndex = dsurfedges[f.firstedge+vnum];
|
||||
int point;
|
||||
if( eIndex < 0 )
|
||||
{
|
||||
point = dedges[-eIndex].v[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
point = dedges[eIndex].v[0];
|
||||
}
|
||||
dvertex_t *v=dvertexes+point;
|
||||
return Vector(v->point[0],v->point[1],v->point[2]);
|
||||
|
||||
}
|
||||
|
||||
Vector colors[]={
|
||||
Vector(0.5,0.5,1),
|
||||
Vector(0.5,1,0.5),
|
||||
Vector(0.5,1,1),
|
||||
Vector(1,0.5,0.5),
|
||||
Vector(1,0.5,1),
|
||||
Vector(1,1,1)};
|
||||
|
||||
void RayTracingEnvironment::AddBSPFace(int id,dface_t const &face)
|
||||
{
|
||||
if (face.dispinfo!=-1) // displacements must be dealt with elsewhere
|
||||
return;
|
||||
texinfo_t *tx =(face.texinfo>=0)?&(texinfo[face.texinfo]):0;
|
||||
// if (tx && (tx->flags & (SURF_SKY|SURF_NODRAW)))
|
||||
// return;
|
||||
if (tx)
|
||||
{
|
||||
printf("id %d flags=%x\n",id,tx->flags);
|
||||
}
|
||||
printf("side: ");
|
||||
for(int v=0;v<face.numedges;v++)
|
||||
{
|
||||
printf("(%f %f %f) ",XYZ(VertCoord(face,v)));
|
||||
}
|
||||
printf("\n");
|
||||
int ntris=face.numedges-2;
|
||||
for(int tri=0;tri<ntris;tri++)
|
||||
{
|
||||
|
||||
AddTriangle(id,VertCoord(face,0),VertCoord(face,(tri+1)%face.numedges),
|
||||
VertCoord(face,(tri+2)%face.numedges),Vector(1,1,1)); //colors[id % NELEMS(colors)]);
|
||||
}
|
||||
}
|
||||
|
||||
void RayTracingEnvironment::InitializeFromLoadedBSP(void)
|
||||
{
|
||||
// CUtlVector<uint8> PlanesToSkip;
|
||||
// SidesToSkip.EnsureCapacity(numplanes);
|
||||
// for(int s=0;s<numplanes;s++)
|
||||
// SidesToSkip.AddToTail(0);
|
||||
// for(int b=0;b<numbrushes;b++)
|
||||
// if ((dbrushes[b].contents & MASK_OPAQUE)==0)
|
||||
// {
|
||||
// // transparent brush - mark all its sides as "do not process"
|
||||
// for(int s=0;s<dbrushes[b].numsides;s++)
|
||||
// {
|
||||
// PlanesToSkip[s+dbrushes[b].firstside]=1;
|
||||
// }
|
||||
|
||||
// }
|
||||
// // now, add all origfaces, omitting those whose sides are the ones we marked previously
|
||||
// for(int c=0;c<numorigfaces;c++)
|
||||
// {
|
||||
// dface_t const &f=dorigfaces[c];
|
||||
// if (SidesToSkip[f.AddBSPFace(c,dorigfaces[c]);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// // ugly - I want to traverse all the faces. but there is no way to get from a face back to it's
|
||||
// // original brush, and I need to get back to the face to the contents field of the brush. So I
|
||||
// // will create a temporary mapping from a "side" to its brush. I can get from the face to it
|
||||
// // side, which can get me back to its brush.
|
||||
|
||||
// CUtlVector<uint8> OrigFaceVisited;
|
||||
// OrigFaceVisited.EnsureCapacity(numorigfaces);
|
||||
// int n_added=0;
|
||||
|
||||
// for(int i=0;i<numorigfaces;i++)
|
||||
// OrigFaceVisited.AddToTail(0);
|
||||
|
||||
// for(int l=0;l<numleafs;l++)
|
||||
// {
|
||||
// dleaf_t const &lf=dleafs[l];
|
||||
// // if (lf.contents & MASK_OPAQUE)
|
||||
// {
|
||||
// for(int f=0;f<lf.numleaffaces;f++);
|
||||
// {
|
||||
// dface_t const &face=dfaces[f+lf.firstleafface];
|
||||
// if (OrigFaceVisited[face.origFace]==0)
|
||||
// {
|
||||
// dface_t const &oface=dorigfaces[face.origFace];
|
||||
// OrigFaceVisited[face.origFace]=1;
|
||||
// n_added++;
|
||||
// AddBSPFace(face.origFace,oface);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// printf("added %d of %d\n",n_added,numorigfaces);
|
||||
// for(int c=0;c<numorigfaces;c++)
|
||||
// {
|
||||
// dface_t const &f=dorigfaces[c];
|
||||
// AddBSPFace(c,dorigfaces[c]);
|
||||
// }
|
||||
for(int c=0;c<numfaces;c++)
|
||||
{
|
||||
// dface_t const &f=dfaces[c];
|
||||
AddBSPFace(c,dorigfaces[c]);
|
||||
}
|
||||
|
||||
// AddTriangle(1234,Vector(51,145,-700),Vector(71,165,-700),Vector(51,165,-700),colors[5]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user