void DefaultObjects::init() { RenderState *state; Geometry *axis[3]; vec3f red, green, blue; red = vec3f(1.0f, 0.0f, 0.0f); green = vec3f(0.0f, 1.0f, 0.0f); blue = vec3f(0.0f, 0.0f, 1.0f); static const f32 vertex[4 * 3] = { -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f }; static const i32 index[4 * 3] = { 0, 1, 2, 1, 2, 3, 0, 1, 3, 2, 0, 3 }; failureShaderProgram = 0; failureTexture = 0; failureCubeMap = 0; failureVertexArray = 0; printf(" Setting up failure shader program\n"); failureShaderProgram = SceneGraph::createShaderProgram("FailureShaderProgram", "Default", 0); if (!failureShaderProgram) REPORT_ERROR("Couldn't load default shader program"); printf(" Setting up failure texture\n"); failureTexture = SceneGraph::createTexture("FailureTexture", "textures/notex.png", true, TEXTURE_FILTER_TRILINEAR, TEXTURE_WRAP_REPEAT); if (!failureTexture) REPORT_ERROR("Couldn't load default texture"); printf(" Setting up failure cube map\n"); failureCubeMap = SceneGraph::createCubeMap("FailureCubeMap", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png"); if (!failureCubeMap) REPORT_ERROR("Couldn't load default cube map"); printf(" Setting up failure vertex array\n"); failureVertexArray = SceneGraph::createVertexArray("FailureVertexArray", (void *) vertex, 4 * 3, 4, TRIANGLES, USAGE_STATIC); printf(" Attribute\n"); failureVertexArray->setAttribute("Vertex", 0, 3, ATTRIB_FLOAT32, false); printf(" Index array\n"); failureVertexArray->setIndexArray((void *) index, 4, 12); printf(" Setting up bulb mesh\n"); bulbMesh = SceneGraph::createGeometry("LightBulb", "scenes/light.obj", false); bulbShader = SceneGraph::createShaderProgram("LightShader", "Light", 0); bulbMesh->setShaderProgram(bulbShader, false); printf(" Setting up camera mesh\n"); camMesh = SceneGraph::createGeometry("CameraModel", "scenes/camera.obj", false); camShader = SceneGraph::createShaderProgram("CameraShader", "Camera", 0); camMesh->setShaderProgram(camShader, false); printf(" Setting up arrow mesh\n"); arrowMesh = SceneGraph::createGeometry("ArrowModel", "scenes/arrow.obj", false); arrowShader = SceneGraph::createShaderProgram("ArrowShader", "Axis", 0); arrowMesh->setShaderProgram(arrowShader, false); state = arrowShader->getRenderState(); axis[0] = (Geometry *) arrowMesh->duplicate("AxisX", false); axis[1] = (Geometry *) arrowMesh->duplicate("AxisY", false); axis[2] = (Geometry *) arrowMesh->duplicate("AxisZ", false); axis[0]->scale(2.0f, 2.0f, 2.0f); axis[1]->scale(2.0f, 2.0f, 2.0f); axis[2]->scale(2.0f, 2.0f, 2.0f); axis[0]->setRotate(-fPI * 0.5f, 0.0f, 0.0f, 1.0f); axis[2]->setRotate(fPI * 0.5f, 1.0f, 0.0f, 0.0f); axis[0]->setVector("col", red.vec, 3, UNIFORM_FLOAT32); axis[1]->setVector("col", green.vec, 3, UNIFORM_FLOAT32); axis[2]->setVector("col", blue.vec, 3, UNIFORM_FLOAT32); axisGroup = SceneGraph::createGroup("AxisGroup"); axisGroup->attachChild(axis[0]); axisGroup->attachChild(axis[1]); axisGroup->attachChild(axis[2]); printf(" Setting up grid\n"); /* Grid */ { u32 i, o; VertexArray *gridva; f32 gridv[2 * 21 * 2 * 2]; vec3f color; color = vec3f(0.4f, 0.7f, 0.8f); for (i = 0; i < 21; i++) { gridv[i * 4] = ((f32) i) - 10.0f; gridv[i * 4 + 1] = -10.0f; gridv[i * 4 + 2] = ((f32) i) - 10.0f; gridv[i * 4 + 3] = 10.0f; } o = 21 * 4; for (i = 0; i < 21; i++) { gridv[o + i * 4] = -10.0f; gridv[o + i * 4 + 1] = ((f32) i) - 10.0f; gridv[o + i * 4 + 2] = 10.0f; gridv[o + i * 4 + 3] = ((f32) i) - 10.0f; } gridva = SceneGraph::createVertexArray("Grid", gridv, 2 * 4, 84, LINES, USAGE_STATIC); gridva->setAttribute("Vertex", 0, 2, ATTRIB_FLOAT32, false); gridva->setPurgeLevel(0); gridShader = SceneGraph::createShaderProgram("GridShader", "Grid", 0); gridShader->setPurgeLevel(0); state = gridShader->getRenderState(); gridMesh = SceneGraph::createGeometry("GridMesh", gridva, false); gridMesh->setShaderProgram(gridShader, false); gridShader->setVector("Color", color.vec, 3, UNIFORM_FLOAT32); gridShader->renderState.disableCulling(); } printf(" Default object setup complete\n"); }