public void initShadowmap(GL2GL3 gl, int lightcount, int width, int height) { initLight(lightcount); Ctrlpanel.getInstance().addLightCtrl(realLightcount, this); smapwidth = width; smapheight = height; Tex2DArray shadowmap = new Tex2DArray( GL2.GL_RGB16, GL2.GL_RGB, GL.GL_FLOAT, smapwidth, smapheight, realLightcount, GL.GL_LINEAR, "shadowmap"); Tex2DArray shadowmapdepth = new Tex2DArray( GL2.GL_DEPTH_COMPONENT, GL2.GL_DEPTH_COMPONENT, GL.GL_FLOAT, smapwidth, smapheight, realLightcount, GL.GL_LINEAR, "shadowmapdepth"); shadowmap.init(gl); shadowmapdepth.init(gl); shadowmapB = tum.bind(gl, shadowmap); smapfbo = new FBO(gl); smapfbo.attachTexture(gl, shadowmapB); smapfbo.attachDepth(gl, shadowmapdepth); /*シャドウマップ*/ shadowmapshader = new Shader( "resources/ShaderSource/BaseShaders/Shadowmap/vertsimple.c", null, null, smapgsrc, smapfsrc); shadowmapshader.init(gl); shadowmapshader.use(gl); uniformlightsview = gl.glGetUniformLocation(shadowmapshader.getID(), "lightsview"); uniformlightsproj = gl.glGetUniformLocation(shadowmapshader.getID(), "lightsproj"); uniformlightscolor = gl.glGetUniformLocation(shadowmapshader.getID(), "lightscolor"); uniformlightsattr = gl.glGetUniformLocation(shadowmapshader.getID(), "lightsattr"); uniformlightcount = gl.glGetUniformLocation(shadowmapshader.getID(), "lightcount_real_virtual"); /*シャドウマップテッセレーション*/ shadowmapshadertess = new Shader(smapvsrc, smapcsrc, smapesrc, smapgsrc, smapfsrc); shadowmapshadertess.init(gl); shadowmapshadertess.use(gl); uniformlightsviewtess = gl.glGetUniformLocation(shadowmapshadertess.getID(), "lightsview"); uniformlightsprojtess = gl.glGetUniformLocation(shadowmapshadertess.getID(), "lightsproj"); uniformlightscolortess = gl.glGetUniformLocation(shadowmapshadertess.getID(), "lightscolor"); uniformlightsattrtess = gl.glGetUniformLocation(shadowmapshader.getID(), "lightsattr"); uniformlightcounttess = gl.glGetUniformLocation(shadowmapshadertess.getID(), "lightcount_real_virtual"); }
public void init(GL2GL3 gl) { timer.init(gl); smapfbo = new FBO(gl); texviewer = new TexViewer(); texviewer.init(gl); fxaa = new Filter("resources/ShaderSource/FXAA/vert.c", "resources/ShaderSource/FXAA/frag.c"); fxaa.init(gl); // String filepath = "/home/michael/zheng/Programs/WeatherData/2009100718/"; String filepath = "/home/michael/zheng/Programs/WeatherData/2009100818/"; // String filepath = "/home/michael/zheng/Programs/WeatherData/2008061418/"; // initTestData(gl); scene = new Scene1(); scene.initShadowmap(gl, 2, SHADOWMAPWIDTH, SHADOWMAPHEIGHT); for (int i = 0; i < scene.lightCount(); i++) { scene.lights.get(i).init(gl); // float angle = 2 * (float)Math.PI * i / (scene.lightCount() - 1); // //scene.lights.get(i).lookat(3, 3, i + 1, 0, 0, 0, 0, 1, 0); // scene.lights.get(i).lookat(6*(float)Math.sin(angle), 6*(float)Math.cos(angle), 8, // 0, 0, 0, 0, 1, 0); // scene.lights.get(i).perspectivef(120f, 1, 0.1f, 50f); } scene.lights.get(0).lookatd(4, 4, 10, 0, 0, 0, 0, 1, 0); // scene.lights.get(0).lookatd(0, 0, 50, 0, 0, 0, 0, 1, 0); scene.lights.get(0).orthof(-4, 4, -4, 4, 0, 60); scene.lights.get(0).setattr(0, 1); scene.lights.get(0).setintensity(1.25); // scene.lights.get(2).lookatd(4, 4, 10, 0, 0, 0, 0, 1, 0); // scene.lights.get(2).orthof(-5, 5, -5, 5, 0, 30); scene.lights.get(1).lookatd(4, -4, 10, 0, 0, 0, 0, 1, 0); scene.lights.get(1).orthof(-4, 4, -4, 4, 0, 100); // scene.lights.get(2).lookatd(0, 0, 50, 0, 0, 0, 0, 1, 0); // scene.lights.get(2).orthof(-5, 5, -5, 5, 0, 100); shader = new Shader( "resources/ShaderSource/BaseShaders/SimpleShader/vert.c", null, null, null, "resources/ShaderSource/BaseShaders/SimpleShader/frag.c"); shader.init(gl); shadowmapping = new Shader( "resources/ShaderSource/ShadowMapping/vert.c", null, null, "resources/ShaderSource/ShadowMapping/geom.c", "resources/ShaderSource/ShadowMapping/fragsimple.c"); shadowmapping.init(gl); shadowmapping.use(gl); // tess evalシェーダーはシャドウマップのものを使う shadowmappingtess = new Shader( "resources/ShaderSource/ShadowMapping/vert.c", "resources/ShaderSource/ShadowMapping/ctrl.c", "resources/ShaderSource/BaseShaders/Shadowmap/eval.c", "resources/ShaderSource/ShadowMapping/geom.c", "resources/ShaderSource/ShadowMapping/frag.c"); shadowmappingtess.init(gl); tex = new Tex2D( GL2.GL_RGBA, GL2.GL_RGBA, GL2.GL_FLOAT, 1024, 1024, GL2.GL_LINEAR, GL2.GL_REPEAT, GL2.GL_REPEAT, null, "testimage"); tex.init(gl); tbs = new TexBindSet(tex); tbs.bind(gl); // scene.updateligths(gl, shadowmapping); // scene.lookat(0, 0, 30, 0, 0, 0, 0, 1, 0); // scene.orthof(proj[0], proj[1], proj[2], proj[3], 0, 100); // initの場所はあとで調整 scene.init(gl, shadowmapping, shadowmappingtess); // 円柱オフ scene.shader1i(gl, 0, "offheight"); fbo = new FBO(gl); fbo.attachTexture(gl, tbs); fbo.attachDepthRBO(gl, 1024, 1024); // */ initSceneOrganizer(gl); Ctrlpanel.currentSO = currentSO; }