[Add?] Some work in progress planet drawing. Nothing to pay attention
to. :P
This commit is contained in:
parent
1b35d387b9
commit
8a16f3c0db
109
src/planet.cpp
109
src/planet.cpp
@ -2,6 +2,7 @@
|
|||||||
#include "planet.h"
|
#include "planet.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "l3d.h"
|
#include "l3d.h"
|
||||||
|
#include "world_view.h"
|
||||||
|
|
||||||
Planet::Planet(StarSystem::SBody::SubType subtype) : Body() {
|
Planet::Planet(StarSystem::SBody::SubType subtype) : Body() {
|
||||||
m_radius = 6378135.0;
|
m_radius = 6378135.0;
|
||||||
@ -34,6 +35,110 @@ void Planet::SetRadius(double radius) {
|
|||||||
dGeomSphereSetRadius(m_geom, radius);
|
dGeomSphereSetRadius(m_geom, radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void subdivide(vector3d& v1, vector3d& v2, vector3d& v3, vector3d& v4, int depth) {
|
||||||
|
if(depth) {
|
||||||
|
depth--;
|
||||||
|
vector3d v5 = v1+v2;
|
||||||
|
vector3d v6 = v2+v3;
|
||||||
|
vector3d v7 = v3+v4;
|
||||||
|
vector3d v8 = v4+v1;
|
||||||
|
vector3d v9 = v1+v2+v3+v4;
|
||||||
|
|
||||||
|
v5.Normalize();
|
||||||
|
v6.Normalize();
|
||||||
|
v7.Normalize();
|
||||||
|
v8.Normalize();
|
||||||
|
v9.Normalize();
|
||||||
|
|
||||||
|
/* XXX WRONG, need to do projection stuff! */
|
||||||
|
#if 0
|
||||||
|
/* Front-facing. */
|
||||||
|
bool ff1, ff2, ff3, ff4, ff5, ff6, ff7, ff8, ff9;
|
||||||
|
const matrix4x4d& r = L3D::world_view->viewingRotation;
|
||||||
|
|
||||||
|
ff1 = (r*v1).z > 0;
|
||||||
|
ff2 = (r*v2).z > 0;
|
||||||
|
ff3 = (r*v3).z > 0;
|
||||||
|
ff4 = (r*v4).z > 0;
|
||||||
|
ff5 = (r*v5).z > 0;
|
||||||
|
ff6 = (r*v6).z > 0;
|
||||||
|
ff7 = (r*v7).z > 0;
|
||||||
|
ff8 = (r*v8).z > 0;
|
||||||
|
ff9 = (r*v9).z > 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
subdivide(v1, v5, v8, v8, depth);
|
||||||
|
subdivide(v5, v2, v6, v9, depth);
|
||||||
|
subdivide(v9, v6, v3, v7, depth);
|
||||||
|
subdivide(v8, v9, v7, v4, depth);
|
||||||
|
} else {
|
||||||
|
glBegin(GL_TRIANGLE_STRIP);
|
||||||
|
glNormal3dv(&v1.x);
|
||||||
|
glVertex3dv(&v1.x);
|
||||||
|
glNormal3dv(&v2.x);
|
||||||
|
glVertex3dv(&v2.x);
|
||||||
|
glNormal3dv(&v4.x);
|
||||||
|
glVertex3dv(&v4.x);
|
||||||
|
glNormal3dv(&v3.x);
|
||||||
|
glVertex3dv(&v3.x);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawLovelyRoundCube(double radius) {
|
||||||
|
const float mdiff[] = { 0.8, 0.8, 0.5, 1.0 };
|
||||||
|
const float mambient[] = { 0.02, 0.02, 0.01, 1.0 };
|
||||||
|
const float mdiff2[] = { 0.2, 0.2, 0.8, 0.5 };
|
||||||
|
const float mambient2[] = { 0.01, 0.01, 0.04, 0.5 };
|
||||||
|
glMaterialfv(GL_FRONT, GL_AMBIENT, mambient);
|
||||||
|
glMaterialfv(GL_FRONT, GL_DIFFUSE, mdiff);
|
||||||
|
|
||||||
|
vector3d p1(1, 1, 1);
|
||||||
|
vector3d p2(-1, 1, 1);
|
||||||
|
vector3d p3(-1, -1, 1);
|
||||||
|
vector3d p4(1, -1, 1);
|
||||||
|
|
||||||
|
vector3d p5(1, 1, -1);
|
||||||
|
vector3d p6(-1, 1, -1);
|
||||||
|
vector3d p7(-1, -1, -1);
|
||||||
|
vector3d p8(1, -1, -1);
|
||||||
|
|
||||||
|
p1.Normalize();
|
||||||
|
p2.Normalize();
|
||||||
|
p3.Normalize();
|
||||||
|
p4.Normalize();
|
||||||
|
p5.Normalize();
|
||||||
|
p6.Normalize();
|
||||||
|
p7.Normalize();
|
||||||
|
p8.Normalize();
|
||||||
|
|
||||||
|
//p1 *= radius;
|
||||||
|
//p2 *= radius;
|
||||||
|
//p3 *= radius;
|
||||||
|
//p4 *= radius;
|
||||||
|
//p5 *= radius;
|
||||||
|
//p6 *= radius;
|
||||||
|
//p7 *= radius;
|
||||||
|
//p8 *= radius;
|
||||||
|
|
||||||
|
//glDisable(GL_CULL_FACE);
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
|
subdivide(p1, p2, p3, p3, 3);
|
||||||
|
subdivide(p4, p3, p7, p8, 3);
|
||||||
|
subdivide(p1, p4, p8, p5, 3);
|
||||||
|
subdivide(p2, p1, p5, p6, 3);
|
||||||
|
subdivide(p3, p2, p6, p7, 3);
|
||||||
|
subdivide(p8, p7, p6, p5, 3);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glMaterialfv(GL_FRONT, GL_AMBIENT, mambient2);
|
||||||
|
glMaterialfv(GL_FRONT, GL_DIFFUSE, mdiff2);
|
||||||
|
subdivide(p1, p2, p3, p4, 3);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
glDisable(GL_NORMALIZE);
|
||||||
|
}
|
||||||
|
|
||||||
void Planet::Render(const Frame* a_camFrame) {
|
void Planet::Render(const Frame* a_camFrame) {
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
@ -61,7 +166,9 @@ void Planet::Render(const Frame* a_camFrame) {
|
|||||||
glEnd();
|
glEnd();
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
} else {
|
} else {
|
||||||
gluSphere(L3D::gluQuadric, rad, 100, 100);
|
glScalef(rad, rad, rad);
|
||||||
|
DrawLovelyRoundCube(1.0f);
|
||||||
|
//gluSphere(L3D::gluQuadric, rad, 100, 100);
|
||||||
}
|
}
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
Loading…
Reference in New Issue
Block a user