#include "geometry.h"
#include "performance.h"
+#include "game/player.h"
+
float viewportAspectRatio = 1.0f;
const Scene* cameraAnchor;
bool debugScene = false;
void initRender() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
-
+
GLfloat light0_ambient[] = {0.1f, 0.1f, 0.1f, 1.0f};
GLfloat light0_diffuse[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat light0_specular[] = {0.96f, 0.98f, 1.0f, 1.0f};
GLfloat light0_position[] = {5.0f, 10.0f, 5.0f, 0.0f}; // (w == 0.0f) == directional
-
+
glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
-
+
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0f);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05f);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.005f);
-
+
//glShadeModel(GL_FLAT);
}
glDisable(GL_LIGHTING);
- if (debugScene) {
+ if (debugScene || scene == playerProjectedMovement) {
drawAxes();
}
static void moveCameraTo(const Scene* anchor) {
glMatrixMode(GL_PROJECTION);
- Vector3D pos = translationOf(worldTransform(anchor));
+ Vector pos = translationOf(worldTransform(anchor));
glTranslatef(-pos.x, -pos.y, -pos.z);
}
if (solid == NULL) {
return;
}
-
+
glMatrixMode(GL_MODELVIEW);
glColor3f(0.5f, 1.0f, 0.0f);
-
+
for (size_t meshIndex = 0; meshIndex < solid->numMeshes; ++meshIndex) {
const Mesh mesh = solid->meshes[meshIndex];
glBindTexture(GL_TEXTURE_2D,
solid->materials[mesh.materialIndex].textureId);
-
+
for (size_t faceIndex = 0; faceIndex < mesh.numFaces; ++faceIndex) {
const Face face = mesh.faces[faceIndex];
-
+
if (debugRender && face.normals) {
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glBegin(GL_LINES);
for (size_t i = 0; i < face.numIndices; ++i) {
size_t vertIndex = face.indices[i];
- Vector3D vertex = mesh.vertices[vertIndex];
- Vector3D normal = face.normals[i];
+ Vector vertex = mesh.vertices[vertIndex];
+ Vector normal = face.normals[i];
glColor3f(absolute(normal.x), absolute(normal.y), absolute(normal.z));
glVertex3f(vertex.x, vertex.y, vertex.z);
glVertex3f(vertex.x + normal.x, vertex.y + normal.y, vertex.z + normal.z);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
}
-
+
GLenum faceMode;
switch (face.numIndices) {
case 1: faceMode = GL_POINTS; break;
case 3: faceMode = GL_TRIANGLES; break;
default: faceMode = GL_POLYGON; break;
}
-
+
glBegin(faceMode);
-
+
for (size_t i = 0; i < face.numIndices; ++i) {
size_t vertIndex = face.indices[i];
if (face.normals) {
if (mesh.textureCoords) {
- Vector3D coords = mesh.textureCoords[vertIndex];
+ Vector coords = mesh.textureCoords[vertIndex];
glTexCoord2f(coords.x, coords.y);
}
- Vector3D normal = face.normals[i];
+ Vector normal = face.normals[i];
glNormal3f(normal.x, normal.y, normal.z);
}
- Vector3D vertex = mesh.vertices[vertIndex];
+ Vector vertex = mesh.vertices[vertIndex];
glVertex3f(vertex.x, vertex.y, vertex.z);
}
-
+
glEnd();
}
}