X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FModels.cpp;h=0b8105396bd4f00204e73440c319a0783707d65f;hb=2a9d19feea3589e45e3f6aa4e7b6052732b35f3f;hp=609d1b1a24b28f3e7d971ff7d5f56533ca76d56c;hpb=24004d6ab1e68faaf85ece11b566449997da5013;p=lugaru.git
diff --git a/Source/Models.cpp b/Source/Models.cpp
index 609d1b1..0b81053 100644
--- a/Source/Models.cpp
+++ b/Source/Models.cpp
@@ -3,20 +3,18 @@ Copyright (C) 2003, 2010 - Wolfire Games
This file is part of Lugaru.
-Lugaru 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 2
-of the License, or (at your option) any later version.
+Lugaru 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 2 of the License, or
+(at your option) any later version.
-This program is distributed in the hope that it will be useful,
+Lugaru 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.
+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, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+along with Lugaru. If not, see .
*/
#include "Game.h"
@@ -42,10 +40,12 @@ int Model::LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
*p1 = *p1 - *move;
*p2 = *p2 - *move;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
- if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
- if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
- &boundingsphereradius))return -1;
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, -*rotate, 0);
+ if (*rotate)
+ *p2 = DoRotation(*p2, 0, -*rotate, 0);
+ if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+ return -1;
firstintersecting = -1;
for (j = 0; j < TriangleNum; j++) {
@@ -58,45 +58,12 @@ int Model::LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
}
}
- if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+ if (*rotate)
+ *p = DoRotation(*p, 0, *rotate, 0);
*p = *p + *move;
return firstintersecting;
}
-int Model::LineCheckSlide(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
-{
- static int j;
- static float distance;
- static float olddistance;
- static int intersecting;
- static int firstintersecting;
- static XYZ point;
-
- *p1 = *p1 - *move;
- *p2 = *p2 - *move;
- if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
- &boundingsphereradius))return -1;
- firstintersecting = -1;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
- if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
-
- for (j = 0; j < TriangleNum; j++) {
- intersecting = LineFacetd(p1, p2, &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], &facenormals[j], &point);
- distance = (point.x - p1->x) * (point.x - p1->x) + (point.y - p1->y) * (point.y - p1->y) + (point.z - p1->z) * (point.z - p1->z);
- if ((distance < olddistance || firstintersecting == -1) && intersecting) {
- olddistance = distance;
- firstintersecting = j;
- }
- }
-
- distance = abs((facenormals[firstintersecting].x * p2->x) + (facenormals[firstintersecting].y * p2->y) + (facenormals[firstintersecting].z * p2->z) - ((facenormals[firstintersecting].x * vertex[Triangles[firstintersecting].vertex[0]].x) + (facenormals[firstintersecting].y * vertex[Triangles[firstintersecting].vertex[0]].y) + (facenormals[firstintersecting].z * vertex[Triangles[firstintersecting].vertex[0]].z)));
- *p2 -= facenormals[firstintersecting] * distance;
-
- if (*rotate)*p2 = DoRotation(*p2, 0, *rotate, 0);
- *p2 = *p2 + *move;
- return firstintersecting;
-}
-
int Model::LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
{
static int j;
@@ -108,11 +75,13 @@ int Model::LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
*p1 = *p1 - *move;
*p2 = *p2 - *move;
- if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
- &boundingsphereradius))return -1;
+ if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+ return -1;
firstintersecting = -1;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
- if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, -*rotate, 0);
+ if (*rotate)
+ *p2 = DoRotation(*p2, 0, -*rotate, 0);
if (numpossible > 0 && numpossible < TriangleNum)
for (j = 0; j < numpossible; j++) {
@@ -127,7 +96,8 @@ int Model::LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate)
}
}
- if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+ if (*rotate)
+ *p = DoRotation(*p, 0, *rotate, 0);
*p = *p + *move;
return firstintersecting;
}
@@ -143,11 +113,13 @@ int Model::LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *ro
*p1 = *p1 - *move;
*p2 = *p2 - *move;
- if (!sphere_line_intersection(p1, p2, &boundingspherecenter,
- &boundingsphereradius))return -1;
+ if (!sphere_line_intersection(p1, p2, &boundingspherecenter, &boundingsphereradius))
+ return -1;
firstintersecting = -1;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
- if (*rotate)*p2 = DoRotation(*p2, 0, -*rotate, 0);
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, -*rotate, 0);
+ if (*rotate)
+ *p2 = DoRotation(*p2, 0, -*rotate, 0);
if (numpossible)
for (j = 0; j < numpossible; j++) {
@@ -166,7 +138,8 @@ int Model::LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *ro
*p2 -= facenormals[firstintersecting] * distance;
}
- if (*rotate)*p2 = DoRotation(*p2, 0, *rotate, 0);
+ if (*rotate)
+ *p2 = DoRotation(*p2, 0, *rotate, 0);
*p2 = *p2 + *move;
return firstintersecting;
}
@@ -186,8 +159,10 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
oldp1 = *p1;
*p1 = *p1 - *move;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
- if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius)return -1;
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, -*rotate, 0);
+ if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius)
+ return -1;
for (i = 0; i < 4; i++) {
for (j = 0; j < TriangleNum; j++) {
@@ -195,16 +170,14 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
distance = abs((facenormals[j].x * p1->x) + (facenormals[j].y * p1->y) + (facenormals[j].z * p1->z) - ((facenormals[j].x * vertex[Triangles[j].vertex[0]].x) + (facenormals[j].y * vertex[Triangles[j].vertex[0]].y) + (facenormals[j].z * vertex[Triangles[j].vertex[0]].z)));
if (distance < radius) {
point = *p1 - facenormals[j] * distance;
- if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))intersecting = 1;
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
- &vertex[Triangles[j].vertex[1]],
- p1, &radius);
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]],
- &vertex[Triangles[j].vertex[2]],
- p1, &radius);
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
- &vertex[Triangles[j].vertex[2]],
- p1, &radius);
+ if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))
+ intersecting = 1;
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], p1, &radius);
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], p1, &radius);
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[2]], p1, &radius);
if (intersecting) {
*p1 += facenormals[j] * (distance - radius);
/*start=*p1;
@@ -222,16 +195,18 @@ int Model::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate)
}
}
}
- if (*rotate)*p = DoRotation(*p, 0, *rotate, 0);
+ if (*rotate)
+ *p = DoRotation(*p, 0, *rotate, 0);
*p = *p + *move;
- if (*rotate)*p1 = DoRotation(*p1, 0, *rotate, 0);
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, *rotate, 0);
*p1 += *move;
return firstintersecting;
}
int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
{
- static int i, j;
+ static int j;
static float distance;
static float olddistance;
static int intersecting;
@@ -247,7 +222,8 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
numpossible = 0;
- if (*rotate)*p1 = DoRotation(*p1, 0, -*rotate, 0);
+ if (*rotate)
+ *p1 = DoRotation(*p1, 0, -*rotate, 0);
if (distsq(p1, &boundingspherecenter) > radius * radius + boundingsphereradius * boundingsphereradius) {
*p1 = oldp1;
return -1;
@@ -258,16 +234,14 @@ int Model::SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate)
distance = abs((facenormals[j].x * p1->x) + (facenormals[j].y * p1->y) + (facenormals[j].z * p1->z) - ((facenormals[j].x * vertex[Triangles[j].vertex[0]].x) + (facenormals[j].y * vertex[Triangles[j].vertex[0]].y) + (facenormals[j].z * vertex[Triangles[j].vertex[0]].z)));
if (distance < radius) {
point = *p1 - facenormals[j] * distance;
- if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))intersecting = 1;
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
- &vertex[Triangles[j].vertex[1]],
- p1, &radius);
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]],
- &vertex[Triangles[j].vertex[2]],
- p1, &radius);
- if (!intersecting)intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]],
- &vertex[Triangles[j].vertex[2]],
- p1, &radius);
+ if (PointInTriangle( &point, facenormals[j], &vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]]))
+ intersecting = 1;
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[1]], p1, &radius);
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[1]], &vertex[Triangles[j].vertex[2]], p1, &radius);
+ if (!intersecting)
+ intersecting = sphere_line_intersection(&vertex[Triangles[j].vertex[0]], &vertex[Triangles[j].vertex[2]], p1, &radius);
if (intersecting) {
//if(j>=0&&j=0&&Triangles[i].vertex[1]>=0&&Triangles[i].vertex[2]>=0){
- if(isnormal(vertex[Triangles[i].vertex[0]].x)&&isnormal(vertex[Triangles[i].vertex[0]].y)&&isnormal(vertex[Triangles[i].vertex[0]].z)
- &&isnormal(vertex[Triangles[i].vertex[1]].x)&&isnormal(vertex[Triangles[i].vertex[1]].y)&&isnormal(vertex[Triangles[i].vertex[1]].z)
- &&isnormal(vertex[Triangles[i].vertex[2]].x)&&isnormal(vertex[Triangles[i].vertex[2]].y)&&isnormal(vertex[Triangles[i].vertex[2]].z)){
- */glTexCoord2f(Triangles[i].gx[0], Triangles[i].gy[0]);
- if (color)glColor3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
- if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[0]].x, normals[Triangles[i].vertex[0]].y, normals[Triangles[i].vertex[0]].z);
- if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
- glVertex3f(vertex[Triangles[i].vertex[0]].x, vertex[Triangles[i].vertex[0]].y, vertex[Triangles[i].vertex[0]].z);
-
- glTexCoord2f(Triangles[i].gx[1], Triangles[i].gy[1]);
- if (color)glColor3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
- if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[1]].x, normals[Triangles[i].vertex[1]].y, normals[Triangles[i].vertex[1]].z);
- if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
- glVertex3f(vertex[Triangles[i].vertex[1]].x, vertex[Triangles[i].vertex[1]].y, vertex[Triangles[i].vertex[1]].z);
-
- glTexCoord2f(Triangles[i].gx[2], Triangles[i].gy[2]);
- if (color)glColor3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
- if (!color && !flat)glNormal3f(normals[Triangles[i].vertex[2]].x, normals[Triangles[i].vertex[2]].y, normals[Triangles[i].vertex[2]].z);
- if (!color && flat)glNormal3f(facenormals[i].x, facenormals[i].y, facenormals[i].y);
- glVertex3f(vertex[Triangles[i].vertex[2]].x, vertex[Triangles[i].vertex[2]].y, vertex[Triangles[i].vertex[2]].z);
- //}
- //}
- }
- glEnd();
}
void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture)
{
if (decals) {
- if (type != decalstype)return;
- static int i, j;
- static float distancemult;
+ if (type != decalstype)
+ return;
+ static int i;
+ //~ static float distancemult;
static int lasttype;
- static float viewdistsquared;
+ //~ static float viewdistsquared;
static bool blend;
- viewdistsquared = viewdistance * viewdistance;
+ //~ viewdistsquared = viewdistance * viewdistance;
blend = 1;
lasttype = -1;
@@ -1075,9 +1044,11 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
glDisable(GL_CULL_FACE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDepthMask(0);
- if (numdecals > max_model_decals)numdecals = max_model_decals;
+ if (numdecals > max_model_decals)
+ numdecals = max_model_decals;
for (i = 0; i < numdecals; i++) {
- if (decaltype[i] == blooddecalfast && decalalivetime[i] < 2)decalalivetime[i] = 2;
+ if (decaltype[i] == blooddecalfast && decalalivetime[i] < 2)
+ decalalivetime[i] = 2;
if (decaltype[i] == shadowdecal && decaltype[i] != lasttype) {
shadowtexture.bind();
@@ -1116,18 +1087,21 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
}
if (decaltype[i] == breakdecal) {
glColor4f(1, 1, 1, decalopacity[i]);
- if (decalalivetime[i] > 58)glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
+ if (decalalivetime[i] > 58)
+ glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
}
if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow)) {
glColor4f(1, 1, 1, decalopacity[i]);
- if (decalalivetime[i] < 4)glColor4f(1, 1, 1, decalopacity[i]*decalalivetime[i]*.25);
- if (decalalivetime[i] > 58)glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
+ if (decalalivetime[i] < 4)
+ glColor4f(1, 1, 1, decalopacity[i]*decalalivetime[i]*.25);
+ if (decalalivetime[i] > 58)
+ glColor4f(1, 1, 1, decalopacity[i] * (60 - decalalivetime[i]) / 2);
}
lasttype = decaltype[i];
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glBegin(GL_TRIANGLES);
for (int j = 0; j < 3; j++) {
@@ -1139,10 +1113,14 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
}
for (i = numdecals - 1; i >= 0; i--) {
decalalivetime[i] += multiplier;
- if (decaltype[i] == blooddecalslow)decalalivetime[i] -= multiplier * 2 / 3;
- if (decaltype[i] == blooddecalfast)decalalivetime[i] += multiplier * 4;
- if (decaltype[i] == shadowdecal)DeleteDecal(i);
- if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow) && decalalivetime[i] >= 60)DeleteDecal(i);
+ if (decaltype[i] == blooddecalslow)
+ decalalivetime[i] -= multiplier * 2 / 3;
+ if (decaltype[i] == blooddecalfast)
+ decalalivetime[i] += multiplier * 4;
+ if (decaltype[i] == shadowdecal)
+ DeleteDecal(i);
+ if ((decaltype[i] == blooddecal || decaltype[i] == blooddecalfast || decaltype[i] == blooddecalslow) && decalalivetime[i] >= 60)
+ DeleteDecal(i);
}
glAlphaFunc(GL_GREATER, 0.0001);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -1152,7 +1130,8 @@ void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloo
void Model::DeleteDecal(int which)
{
if (decals) {
- if (type != decalstype)return;
+ if (type != decalstype)
+ return;
decaltype[which] = decaltype[numdecals - 1];
decalposition[which] = decalposition[numdecals - 1];
for (int i = 0; i < 3; i++) {
@@ -1170,7 +1149,8 @@ void Model::DeleteDecal(int which)
void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float *rotation)
{
if (decals) {
- if (type != decalstype)return;
+ if (type != decalstype)
+ return;
static float placex, placez;
static XYZ rot;
@@ -1236,7 +1216,8 @@ void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float
decaltexcoords[numdecals][j][1] = rot.z + .5;
}
}
- if (numdecals < max_model_decals - 1)numdecals++;
+ if (numdecals < max_model_decals - 1)
+ numdecals++;
}
}
}
@@ -1247,7 +1228,8 @@ void Model::MakeDecal(int atype, XYZ *where, float *size, float *opacity, float
void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rotation)
{
if (decals) {
- if (type != decalstype)return;
+ if (type != decalstype)
+ return;
static float placex, placez;
static XYZ rot;
@@ -1313,7 +1295,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
decaltexcoords[numdecals][j][1] = rot.z + .5;
}
}
- if (numdecals < max_model_decals - 1)numdecals++;
+ if (numdecals < max_model_decals - 1)
+ numdecals++;
}
}
} else if (distance < .02 && abs(facenormals[i].x) > abs(facenormals[i].y) && abs(facenormals[i].x) > abs(facenormals[i].z)) {
@@ -1370,7 +1353,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
decaltexcoords[numdecals][j][1] = rot.z + .5;
}
}
- if (numdecals < max_model_decals - 1)numdecals++;
+ if (numdecals < max_model_decals - 1)
+ numdecals++;
}
}
} else if (distance < .02 && abs(facenormals[i].z) > abs(facenormals[i].y) && abs(facenormals[i].z) > abs(facenormals[i].x)) {
@@ -1427,7 +1411,8 @@ void Model::MakeDecal(int atype, XYZ where, float size, float opacity, float rot
decaltexcoords[numdecals][j][1] = rot.z + .5;
}
}
- if (numdecals < max_model_decals - 1)numdecals++;
+ if (numdecals < max_model_decals - 1)
+ numdecals++;
}
}
}
@@ -1445,25 +1430,32 @@ void Model::deallocate()
{
int i = 0, j = 0;
- if (owner)free(owner);
+ if (owner)
+ free(owner);
owner = 0;
- if (possible)free(possible);
+ if (possible)
+ free(possible);
possible = 0;
- if (vertex)free(vertex);
+ if (vertex)
+ free(vertex);
vertex = 0;
- if (normals)free(normals);
+ if (normals)
+ free(normals);
normals = 0;
- if (facenormals)free(facenormals);
+ if (facenormals)
+ free(facenormals);
facenormals = 0;
- if (Triangles)free(Triangles);
+ if (Triangles)
+ free(Triangles);
Triangles = 0;
- if (vArray)free(vArray);
+ if (vArray)
+ free(vArray);
vArray = 0;