mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-31 22:02:58 -06:00
reorganizing repo
git-svn-id: svn://ultimatepp.org/upp/trunk@9206 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
7d17505cfe
commit
e3e8d627f5
3840 changed files with 0 additions and 1161578 deletions
|
|
@ -1,234 +0,0 @@
|
|||
#include "Model.h"
|
||||
|
||||
bool ModelMesh::Load(String file, VBOLibrary &lib, Point3f scale)
|
||||
{
|
||||
FileIn fin(file);
|
||||
if (!fin.IsOpen())
|
||||
return false;
|
||||
Vector<Triangle> t;
|
||||
Vector<Vertex> v;
|
||||
bool smoothnormals;
|
||||
s % alphasort % smoothnormals;
|
||||
v.Serialize(fin);
|
||||
t.Serialize(t);
|
||||
Scale(v, t, scale, smoothnormals);
|
||||
vbo = lib.GetVertexBuffer(v);
|
||||
if (!vbo) return false;
|
||||
ibo = lib.GetIndexBuffer(t);
|
||||
return ibo > 0;
|
||||
}
|
||||
|
||||
void ModelMesh::Draw()
|
||||
{
|
||||
#error Do model drawing
|
||||
}
|
||||
|
||||
void ModelMesh::Scale(Vector<Vertex> &v, Vector<Vertex> &tri, Point3f scale, bool smooth_normals)
|
||||
{
|
||||
for (int i = 0; i < v.GetCount(); i++) {
|
||||
v[i].pos.x *= scale.x;
|
||||
v[i].pos.y *= scale.y;
|
||||
v[i].pos.z *= scale.z;
|
||||
v[i].normal = Point3f(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (smooth_normals) {
|
||||
for (int i = 0; i < tri.GetCount(); i++) {
|
||||
Triangle &t = tri[i];
|
||||
Point3f n = t.GetNormal(v[t.a].pos, v[t.b].pos, v[t.v].pos);
|
||||
v[t.a].normal += n;
|
||||
v[t.b].normal += n;
|
||||
v[t.c].normal += n;
|
||||
}
|
||||
for (int i = 0; i < v.GetCount(); i++)
|
||||
v[i].normal.Unit();
|
||||
}
|
||||
else
|
||||
for (int i = 0; i < tri.GetCount(); i++) {
|
||||
Triangle &t = tri[i];
|
||||
Point3f n = t.GetNormal(v[t.a].pos, v[t.b].pos, v[t.v].pos);
|
||||
v[t.a].normal = n;
|
||||
v[t.b].normal = n;
|
||||
v[t.c].normal = n;
|
||||
}
|
||||
}
|
||||
|
||||
void CreateUpStair(Vector<Vertex> &v, Vector<Quad> &t, float floorcy)
|
||||
{
|
||||
float landingcx = 0.2;
|
||||
float stairstart = 1.0f - landingcx;
|
||||
// 0 - 3 Landing upper face
|
||||
v.Add(Vertex(0.0f, 0.0f, 0.5f));
|
||||
v.Add(Vertex(landingcx, 0.0f, 0.5f));
|
||||
v.Add(Vertex(landingcx, 1.0f, 0.5f));
|
||||
v.Add(Vertex(0.0f, 1.0f, 0.5f));
|
||||
// 4 - 7 Landing lower face
|
||||
v.Add(Vertex(0.0f, 0.0f, 0.5f - floorcy));
|
||||
v.Add(Vertex(landingcx, 0.0f, 0.5f - floorcy));
|
||||
v.Add(Vertex(landingcx, 1.0f, 0.5f - floorcy));
|
||||
v.Add(Vertex(0.0f, 1.0f, 0.5f - floorcy));
|
||||
// 8 - 10 Ramp upper face
|
||||
v.Add(Vertex(stairstart, stairstart, 0.0f));
|
||||
v.Add(Vertex(stairstart, 1.0f, 0.0f));
|
||||
v.Add(Vertex(landingcx, 1.0f, 0.5f));
|
||||
v.Add(Vertex(landingcx, stairstart, 0.5f));
|
||||
// 11 - 13 Ramp lower face
|
||||
v.Add(Vertex(stairstart, stairstart, 0.5f - floorcy));
|
||||
v.Add(Vertex(stairstart, 1.0f, -floorcy));
|
||||
v.Add(Vertex(landingcx, 1.0f, 0.5f - floorcy));
|
||||
v.Add(Vertex(landingcx, stairstart, 0.5f - floorcy));
|
||||
|
||||
float a = floorcy
|
||||
float c = 1.0f - landingcx*2;
|
||||
float d = 0.5f - floorcy;
|
||||
|
||||
AddCube(t, 0, true, true, true);
|
||||
AddCube(t, 8, true, false, true);
|
||||
}
|
||||
|
||||
void CreateDownStair(Vector<Vertex> &v, Vector<Quad> &t, float floorcy)
|
||||
{
|
||||
float landingcx = 0.2;
|
||||
float stairend = 1.0f - landingcx;
|
||||
floorcy = -floorcy;
|
||||
// 0 - 3 Floor pt1 upper face
|
||||
v.Add(Vertex(0.0f, landingcx, 0.0));
|
||||
v.Add(Vertex(1.0f, landingcx, 0.0));
|
||||
v.Add(Vertex(1.0f, 1.0f, 0.0));
|
||||
v.Add(Vertex(0.0f, 1.0f, 0.0));
|
||||
// 4 - 7 Floor pt1 lower face
|
||||
v.Add(Vertex(0.0f, landingcx, floorcy));
|
||||
v.Add(Vertex(1.0f, landingcx, floorcy));
|
||||
v.Add(Vertex(1.0f, 1.0f, floorcy));
|
||||
v.Add(Vertex(0.0f, 1.0f, floorcy));
|
||||
// 8 - 11 Floor pt2 upper face
|
||||
v.Add(Vertex(stairend, 0.0f, 0.0f));
|
||||
v.Add(Vertex(1.0f, 0.0f, 0.0f));
|
||||
v.Add(Vertex(1.0f, landingcx, 0.0f));
|
||||
v.Add(Vertex(stairend, landingcx, 0.0f));
|
||||
// 12 - 15 Floor pt2 lower face
|
||||
v.Add(Vertex(stairend, 0.0f, floorcy));
|
||||
v.Add(Vertex(1.0f, 0.0f, floorcy));
|
||||
v.Add(Vertex(1.0f, landingcx, floorcy));
|
||||
v.Add(Vertex(stairend, landingcx, floorcy));
|
||||
// 16 - 19 Ramp upper face
|
||||
v.Add(Vertex(landingcx, 0.0f, 0.5f));
|
||||
v.Add(Vertex(stairend, 0.0f, 0.5f));
|
||||
v.Add(Vertex(stairend, landingcx, 0.0f));
|
||||
v.Add(Vertex(landingcx, landingcx, 0.0f));
|
||||
// 20 - 23 Ramp lower face
|
||||
v.Add(Vertex(landingcx, 0.0f, 0.5f+floorcy));
|
||||
v.Add(Vertex(stairend, 0.0f, 0.5f+floorcy));
|
||||
v.Add(Vertex(stairend, landingcx, floorcy));
|
||||
v.Add(Vertex(landingcx, landingcx, floorcy));
|
||||
|
||||
// Upper/lower faces
|
||||
AddCube(t, 0, true, true, true);
|
||||
AddCube(t, 8, true, true, true);
|
||||
t.Remove(t.GetCount()-2); // Remove top face
|
||||
AddCube(t, 16, true, true, true);
|
||||
t.Remove(t.GetCount()-3); // Remove right face
|
||||
}
|
||||
|
||||
void CreateTrunk(Vector<Vertex> &v, Vector<Quad> &t)
|
||||
{
|
||||
float thick = 0.1;
|
||||
float height = 0.3;
|
||||
Point3f c(0.5, 0.5, 0.0f)
|
||||
v.Add(Vertex(c.x - thick, c.y - thick, c.z));
|
||||
v.Add(Vertex(c.x + thick, c.y - thick, c.z));
|
||||
v.Add(Vertex(c.x + thick, c.y + thick, c.z));
|
||||
v.Add(Vertex(c.x - thick, c.y + thick, c.z));
|
||||
c.z += height;
|
||||
v.Add(Vertex(c.x - thick, c.y - thick, c.z));
|
||||
v.Add(Vertex(c.x + thick, c.y - thick, c.z));
|
||||
v.Add(Vertex(c.x + thick, c.y + thick, c.z));
|
||||
v.Add(Vertex(c.x - thick, c.y + thick, c.z));
|
||||
AddCube(t, 0, false, true, true);
|
||||
}
|
||||
|
||||
void CreateDownStair(Vector<Vertex> &v, Vector<Quad> &t, float floorcy)
|
||||
{
|
||||
float landingcx = 0.2;
|
||||
float stairend = 1.0f - landingcx;
|
||||
|
||||
CreateDownStair(v, t, floorcy);
|
||||
v[2].y = stairend;
|
||||
v[3].y = stairend;
|
||||
v[6].y = stairend;
|
||||
v[7].y = stairend;
|
||||
CreateUpStair(v, t, floorcy);
|
||||
int pt3ix = v.GetCount();
|
||||
// Floor pt3 upper face
|
||||
v.Add(Vertex(stairend, 0.0f, 0.0f));
|
||||
v.Add(Vertex(1.0f, 0.0f, 0.0f));
|
||||
v.Add(Vertex(1.0f, 1.0f, 0.0f));
|
||||
v.Add(Vertex(stairend, 1.0f, 0.0f));
|
||||
// Floor pt3 lower face
|
||||
v.Add(Vertex(stairend, 0.0f, floorcy));
|
||||
v.Add(Vertex(1.0f, 0.0f, floorcy));
|
||||
v.Add(Vertex(1.0f, 1.0f, floorcy));
|
||||
v.Add(Vertex(stairend, 1.0f, floorcy));
|
||||
|
||||
// Upper/lower faces
|
||||
AddCube(t, pt3ix, true, true, true);
|
||||
t.Remove(t.GetCount() - 4); // Remove left face
|
||||
t.Remove(t.GetCount() - 2); // Remove bottom face
|
||||
}
|
||||
|
||||
void AddCube(Vector<Quad> &t, int ix, bool vertical, bool sides, bool ends)
|
||||
{
|
||||
// Up/Down
|
||||
if (vertical) {
|
||||
AddQuad(t, ix+0, ix+1, ix+2, ix+3); // Up
|
||||
AddQuad(t, ix+7, ix+6, ix+5, ix+4); // Down
|
||||
}
|
||||
if (sides) {
|
||||
// Sides
|
||||
AddQuad(t, ix+4, ix+5, ix+1, ix+0); // Left - 4
|
||||
AddQuad(t, ix+3, ix+2, ix+6, ix+7); // Right - 3
|
||||
}
|
||||
if (ends) {
|
||||
// Ends
|
||||
AddQuad(t, ix+0, ix+3, ix+7, ix+4); // Bottom - 2
|
||||
AddQuad(t, ix+1, ix+2, ix+6, ix+5); // Top - 1
|
||||
}
|
||||
}
|
||||
|
||||
void AddQuad(Vector<Quad> &t, int a, int b, int c, int d)
|
||||
{
|
||||
t.Add(Triangle(a, b, c, d));
|
||||
}
|
||||
|
||||
void SplitTriVertex(Vector<Vertex> &v, Vector<Quad> &t, Vector<Vertex> &vout, Vector<Triangle> &tout)
|
||||
{
|
||||
out.Reserve(t.GetCount()*4);
|
||||
for (int i = 0; i < t.GetCount(); i++) {
|
||||
Quad &q = t[i];
|
||||
int ix = vout.GetCount()
|
||||
Triangle t1(ix, ix+1, ix+2);
|
||||
Triangle t2(ix+2, ix+3, ix);
|
||||
SetTextureCoords(v[t.a], v[t.b], v[t.c], v[t.d]);
|
||||
vout.Add(v[t.a]);
|
||||
vout.Add(v[t.b]);
|
||||
vout.Add(v[t.c]);
|
||||
vout.Add(v[t.d]);
|
||||
tout.Add(t1);
|
||||
tout.Add(t2);
|
||||
}
|
||||
}
|
||||
|
||||
void SetTextureCoords(Vertex &a, Vertex &b, Vertex &c, Vertex &d)
|
||||
{
|
||||
Point2f t;
|
||||
t.x = (a.pos - b.pos).Length();
|
||||
t.y = (d.pos - a.pos).Length();
|
||||
a.tex.x = 0.0f;
|
||||
a.tex.y = 0.0f;
|
||||
b.tex.x = t.x;
|
||||
b.tex.y = 0.0f;
|
||||
c.tex.x = t.xf;
|
||||
c.tex.y = t.yf;
|
||||
d.tex.x = 0.0;
|
||||
d.tex.y = t.yf;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue