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

Reply via email to