virtual void user_init() { tex::initialise(); msh.fill(5.0f, 2.5f, vec3::ZERO_VEC3, 90, color4::WHITE4); Lightangx = ang = 0.0f; fr = 0; fpsstr = "Wait for results..."; aniso.load("aniso.tga"); texture_settings sett = { RWWM_MIRRORED_REPEAT, RWWM_CLAMP, RWWM_CLAMP, RWMAGFT_LINEAR, RWMINFT_LINEAR, RWTIF_RGBA, RWTOF_RGBA }; aniso.generate(sett); FONTMANAGER.add("fps", 12, "cour.ttf"); CGPROGRAMMANAGER.open_program("anisoV.cg", "basicV", RWCP_VERTEX); CGPROGRAMMANAGER.open_program("anisoF.cg", "basicF", RWCP_FRAGMENT); pos = vec3(8.0f, 0.0f, 0.0f); LightDir.x = pos.x; LightDir.y = pos.y; LightDir.z = pos.z; LightDir.w = 1.0f; LightDir.normalize(); eye = vec3(0.0f, 5.0f, 30.0f); RENDERER.disable(RWS_LIGHTING); RENDERER.enable(RWS_TEXTURE_2D); RENDERER.enable(RWS_DEPTH_TEST); }
Ray::Ray(vec4 a, vec4 b, int i) { pos = a; dir = b.normalize(); lastIndex = i; }
virtual void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); RENDERER.identity_matrix(); gluLookAt(eye.x, eye.y, eye.z, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); if (key_state('F')) ang += 0.2f; if (key_state('V')) ang -= 0.2f; if (key_state('Z')) { Lightangx += 0.1f; pos.x = 8.0f * sinf(Lightangx); pos.z = 8.0f * cosf(Lightangx); LightDir.x = pos.x; LightDir.y = pos.y; LightDir.z = pos.z; LightDir.w = 1.0f; LightDir.normalize(); } if (key_state('X')) { Lightangx -= 0.1f; pos.x = 8.0f * sinf(Lightangx); pos.z = 8.0f * cosf(Lightangx); LightDir.x = pos.x; LightDir.y = pos.y; LightDir.z = pos.z; LightDir.w = 1.0f; LightDir.normalize(); } if (key_state('D')) { pos.y += 0.2f; LightDir.x = pos.x; LightDir.y = pos.y; LightDir.z = pos.z; LightDir.w = 1.0f; LightDir.normalize(); } if (key_state('C')) { pos.y -= 0.2f; LightDir.x = pos.x; LightDir.y = pos.y; LightDir.z = pos.z; LightDir.w = 1.0f; LightDir.normalize(); } if (key_state('Q')) RENDERER.polygon_draw_mode(RWPS_FRONT_AND_BACK, RWPDM_LINES); if (key_state('W')) RENDERER.polygon_draw_mode(RWPS_FRONT_AND_BACK, RWPDM_FILL); FONTMANAGER["fps"].print(-400.0f, 330.0f, fpsstr, color4::WHITE4); CGPROGRAMMANAGER["basicV"].enable_profile(); CGPROGRAMMANAGER["basicV"].bind_program(); CGPROGRAMMANAGER["basicF"].enable_profile(); CGPROGRAMMANAGER["basicF"].bind_program(); CGPROGRAMMANAGER["basicV"].set_parameter("EyePos", eye); CGPROGRAMMANAGER["basicV"].set_parameter("LightVec", LightDir); CGPROGRAMMANAGER["basicF"].set_texture("tex0", aniso.ID()); RENDERER.disable(RWS_TEXTURE_2D); glPointSize(4.0f); glBegin(GL_POINTS); glVertex3f(pos.x, pos.y, pos.z); glEnd(); RENDERER.enable(RWS_TEXTURE_2D); RENDERER.bind_texture(RWTT_TEXTURE_2D, aniso.ID()); glPushMatrix(); glRotatef(ang, 1.0f, 0.0f, 0.0f); CGPROGRAMMANAGER["basicV"].set_renderer_matrix("WorldViewProj"); CGPROGRAMMANAGER["basicV"].set_world_inverted_transposed_matrix("WorldIT"); CGPROGRAMMANAGER["basicV"].set_world_transposed_matrix("World"); msh.draw(CGPROGRAMMANAGER["basicV"]); glPopMatrix(); CGPROGRAMMANAGER["basicV"].disable_profile(); CGPROGRAMMANAGER["basicF"].disable_profile(); }