Indeed very fast. Thanks for sharing. Best, Scuri
> -----Original Message----- > From: Victor Bombi [mailto:[email protected]] > Sent: quinta-feira, 16 de janeiro de 2014 11:17 > To: IUP discussion list. > Subject: Re: [Iup-users] teselation sample > > Hello, > > This is an OpenGL version of teselation. It is really 10 times faster or > more althought less flexible for doing modifications. > The CD sample is more "soft" looking because of some kind of dither, I > wonder if this could be avoided anyhow. > > Best > victor bombi > > > ----------------Opengl teselation sample begin > require("iuplua") > require("iupluagl") > require("luagl") > require("luaglu") > require("imlua") > > filename = > [[C:\LUA\im-3.8.2_Win32_dllw4_lib\im- > 3.8.2_Examples\im\html\examples\flower.jpg]] > heightfac=math.sqrt(3)*0.5 -- ratio from height to side in equilateral > triangle > iup.key_open() > > texture = 0 > > cnv = iup.glcanvas{buffer="DOUBLE", rastersize = "640x480"} > > function cnv:resize_cb(width, height) > iup.GLMakeCurrent(self) > gl.Viewport(0, 0, width, height) > > gl.MatrixMode('PROJECTION') -- Select The Projection Matrix > gl.LoadIdentity() -- Reset The Projection Matrix > > if height == 0 then -- Calculate The Aspect Ratio Of The Window > height = 1 > end > gl.Ortho(0, width, height,0, 0.0, 500); > gl.MatrixMode('MODELVIEW') -- Select The Model View Matrix > gl.LoadIdentity() -- Reset The Model View Matrix > end > > function EQtriang(dummy,wi) > gl.PushMatrix() > gl.Scale(wi,wi,1) > gl.Begin('TRIANGLES') -- Drawing Using Triangles > gl.TexCoord(0.5, 1) gl.Vertex( 0.5, math.sqrt(3)*0.5, 0) -- Top > gl.TexCoord(0, 0) gl.Vertex(0, 0, 0) -- Bottom Left > gl.TexCoord(1, 0) gl.Vertex( 1, 0, 0) -- Bottom Right > gl.End() -- Finished Drawing The Triangle > gl.PopMatrix() > end > function TeselR(fun,wi,lev) > local fu = lev > 0 and TeselR or fun > local w = wi*(2^lev) > > gl.PushMatrix() > fu(fun,wi,lev-1) > gl.PopMatrix() > > gl.PushMatrix() > gl.Translate(1.5*w,heightfac*w,0) > gl.Rotate(120,0,0,1) > fu(fun,wi,lev-1) > > gl.PopMatrix() > > gl.PushMatrix() > --gl.LoadIdentity() -- Reset The Current Modelview Matrix > gl.Translate(1.5*w,heightfac*w,0) > gl.Rotate(-120,0,0,1) > fu(fun,wi,lev-1) > > gl.Rotate(180,1,0,0) > fu(fun,wi,lev-1) > > gl.PopMatrix() > > end > function cnv:action(x, y) > --local timebegin = os.clock() > --print((self.DRAWSIZE):match("(%d*)x(%d*)")) > local w,h = (self.DRAWSIZE):match("(%d*)x(%d*)") > local endwide = h*2/math.sqrt(3) + w > local cellwide = math.max(10,mouseX) > local iters = math.floor(math.log(endwide/cellwide)/math.log(2)) > --print(w,h,endwide,iters) > iup.GLMakeCurrent(self) > gl.Clear('COLOR_BUFFER_BIT,DEPTH_BUFFER_BIT') -- Clear Screen And Depth > Buffer > > gl.LoadIdentity() -- Reset The Current Modelview Matrix > gl.Translate(-0.5*(endwide -w),0,-40) > gl.BindTexture('TEXTURE_2D', texture[1]) > --TeselR(EQtriang,0) > > TeselR(EQtriang,cellwide,iters) > > iup.GLSwapBuffers(self) > --print("drawtime",os.clock()-timebegin) > end > > mouseX,mouseY=0,0 > nostatus=(" "):rep(10) > function cnv:motion_cb(x,y,status) > if status == nostatus then > mouseX = x > mouseY = y > iup.Update(cnv) > end > end > function cnv:k_any(c) > if c == iup.K_q or c == iup.K_ESC then > return iup.CLOSE > elseif c == iup.K_F1 then > if fullscreen then > fullscreen = false > dlg.fullscreen = "No" > else > fullscreen = true > dlg.fullscreen = "Yes" > end > iup.SetFocus(cnv) > end > end > > function LoadImage(fileName) > local image = im.FileImageLoadBitmap(fileName) > if (not image) then > print ("Unnable to open the file: " .. fileName) > os.exit() > end > local gldata, glformat = image:GetOpenGLData() > gl.PixelStore(gl.UNPACK_ALIGNMENT, 1) > > glu.Build2DMipmaps(image:Depth(), image:Width(), image:Height(), > glformat, > gl.UNSIGNED_BYTE, gldata) > > -- gldata will be destroyed when the image object is destroyed > image:Destroy() > end > > function cnv:map_cb() > iup.GLMakeCurrent(self) > gl.Enable('TEXTURE_2D') -- Enable Texture Mapping ( NEW ) > > texture = gl.GenTextures(1) -- Create The Texture > > -- Typical Texture Generation Using Data From The Bitmap > gl.BindTexture('TEXTURE_2D', texture[1]) > gl.TexParameter('TEXTURE_2D','TEXTURE_MIN_FILTER','LINEAR') > gl.TexParameter('TEXTURE_2D','TEXTURE_MAG_FILTER','LINEAR') > > LoadImage(fileName) > end > > if arg[1] ~= nil then > fileName = arg[1] > else > fileName = filename -- > [[C:\LUA\LuaGLsource\luagl\html\examples\luagl.tga]] > end > > dlg = iup.dialog{cnv; title="LuaGL Image Texture Loader"} > > dlg:show() > cnv.rastersize = nil -- reset minimum limitation > > if (not iup.MainLoopLevel or iup.MainLoopLevel()==0) then > iup.MainLoop() > end > > -------------------End sample > > > ---------------------------------------------------------------------------- -- > CenturyLink Cloud: The Leader in Enterprise Cloud Services. > Learn Why More Businesses Are Choosing CenturyLink Cloud For > Critical Workloads, Development Environments & Everything In Between. > Get a Quote or Start a Free Trial Today. > http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.c > lktrk > _______________________________________________ > Iup-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/iup-users ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ Iup-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/iup-users
