180 lines
3.9 KiB
Lua
180 lines
3.9 KiB
Lua
require( "iuplua" )
|
|
require( "iupluagl" )
|
|
require( "luagl" )
|
|
|
|
canvas = iup.glcanvas{buffer="DOUBLE", rastersize = "640x480"}
|
|
|
|
function canvas:resize_cb(width, height)
|
|
iup.GLMakeCurrent(self)
|
|
|
|
gl.Viewport(0, 0, width, height)
|
|
|
|
gl.MatrixMode('PROJECTION')
|
|
gl.LoadIdentity()
|
|
|
|
gl.MatrixMode('MODELVIEW')
|
|
gl.LoadIdentity()
|
|
|
|
end
|
|
|
|
function canvas:action()
|
|
iup.GLMakeCurrent(self)
|
|
|
|
gl.MatrixMode("PROJECTION")
|
|
gl.LoadIdentity()
|
|
gl.Ortho(0, 1, 1, 0, -1.0, 1.0)
|
|
gl.MatrixMode("MODELVIEW")
|
|
gl.LoadIdentity()
|
|
gl.PushMatrix()
|
|
gl.Translate(0.25,0.5, 0)
|
|
gl.Scale(0.2, 0.2, 1)
|
|
|
|
gl.BlendFunc("SRC_ALPHA", "ONE_MINUS_SRC_ALPHA")
|
|
|
|
gl.ClearColor(0,0,0,1)
|
|
gl.Clear("DEPTH_BUFFER_BIT,COLOR_BUFFER_BIT")
|
|
gl.Enable("BLEND")
|
|
|
|
-- draw rectangle
|
|
gl.Color( {1, 1, 0, 0.8} )
|
|
gl.Rect(-1,-1,1,1)
|
|
|
|
--------------------------------------------------------
|
|
-- Create List That Draws the Circle
|
|
--------------------------------------------------------
|
|
|
|
planet = 1
|
|
orbit = 2
|
|
pi =
|
|
|
|
gl.NewList(planet, "COMPILE")
|
|
gl.Begin("POLYGON")
|
|
for i=0, 100 do
|
|
cosine = math.cos(i * 2 * math.pi/100.0)
|
|
sine = math.sin(i * 2 * math.pi/100.0)
|
|
gl.Vertex(cosine,sine)
|
|
end
|
|
gl.End()
|
|
gl.EndList()
|
|
|
|
gl.NewList(orbit, "COMPILE")
|
|
gl.Begin("LINE_LOOP")
|
|
for i=0, 100 do
|
|
cosine = math.cos(i * 2 * math.pi/100.0)
|
|
sine = math.sin(i * 2 * math.pi/100.0)
|
|
gl.Vertex(cosine, sine)
|
|
end
|
|
gl.End()
|
|
gl.EndList()
|
|
|
|
--------------------------------------------------------
|
|
|
|
gl.Color( {0, 0.5, 0, 0.8} )
|
|
gl.CallList(planet)
|
|
|
|
gl.Color( {0, 0, 0, 1} )
|
|
lists = { orbit }
|
|
gl.CallLists(lists)
|
|
|
|
gl.EnableClientState ("VERTEX_ARRAY")
|
|
|
|
vertices = { {-3^(1/2)/2, 1/2}, {3^(1/2)/2, 1/2}, {0, -1}, {-3^(1/2)/2, -1/2}, {3^(1/2)/2, -1/2}, {0, 1} }
|
|
|
|
gl.VertexPointer (vertices)
|
|
|
|
-- draw first triangle
|
|
gl.Color( {0, 0, 1, 0.5} )
|
|
|
|
gl.Begin("TRIANGLES")
|
|
gl.ArrayElement (0)
|
|
gl.ArrayElement (1)
|
|
gl.ArrayElement (2)
|
|
gl.End()
|
|
|
|
-- draw second triangle
|
|
gl.Color( {1, 0, 0, 0.5} )
|
|
gl.VertexPointer (vertices)
|
|
gl.DrawArrays("TRIANGLES", 3, 3)
|
|
|
|
-- draw triangles outline
|
|
gl.Color(1,1,1,1)
|
|
elements = { 0, 1, 2} gl.DrawElements("LINE_LOOP", elements)
|
|
elements = { 3, 4, 5} gl.DrawElements("LINE_LOOP", elements)
|
|
|
|
gl.DisableClientState ("VERTEX_ARRAY")
|
|
|
|
gl.PopMatrix()
|
|
gl.Translate(0.75,0.5, 0)
|
|
gl.Scale(0.2, 0.2, 1)
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
gl.BlendFunc("SRC_ALPHA", "ONE_MINUS_SRC_ALPHA")
|
|
|
|
-- draw rectangle
|
|
gl.Color( {1, 1, 0, 0.8} )
|
|
|
|
gl.Begin("QUADS")
|
|
gl.Vertex(-1,-1)
|
|
gl.Vertex( 1,-1)
|
|
gl.Vertex( 1, 1)
|
|
gl.Vertex(-1, 1)
|
|
gl.End()
|
|
-------------------------------
|
|
gl.Color( {0, 0.5, 0, 0.8} )
|
|
gl.Begin("POLYGON")
|
|
for i=0, 100 do
|
|
cosine = math.cos(i * 2 * math.pi/100.0)
|
|
sine = math.sin(i * 2 * math.pi/100.0)
|
|
gl.Vertex(cosine,sine)
|
|
end
|
|
gl.End()
|
|
|
|
gl.Color( {0, 0, 0, 1} )
|
|
gl.Begin("LINE_LOOP")
|
|
for i=0, 100 do
|
|
cosine = math.cos(i * 2 * math.pi/100.0)
|
|
sine = math.sin(i * 2 * math.pi/100.0)
|
|
gl.Vertex(cosine, sine)
|
|
end
|
|
gl.End()
|
|
|
|
-- draw first triangle
|
|
gl.Color( {0, 0, 1, 0.5} )
|
|
gl.Begin("TRIANGLES")
|
|
gl.Vertex (vertices[1])
|
|
gl.Vertex (vertices[2])
|
|
gl.Vertex (vertices[3])
|
|
gl.End()
|
|
-- draw second triangle
|
|
gl.Color( {1, 0, 0, 0.5} )
|
|
gl.Begin("TRIANGLES")
|
|
gl.Vertex (vertices[4])
|
|
gl.Vertex (vertices[5])
|
|
gl.Vertex (vertices[6])
|
|
gl.End()
|
|
-- draw triangles outline
|
|
gl.Color(1,1,1,1)
|
|
gl.Begin("LINE_LOOP")
|
|
gl.Vertex (vertices[1])
|
|
gl.Vertex (vertices[2])
|
|
gl.Vertex (vertices[3])
|
|
gl.End()
|
|
gl.Begin("LINE_LOOP")
|
|
gl.Vertex (vertices[4])
|
|
gl.Vertex (vertices[5])
|
|
gl.Vertex (vertices[6])
|
|
gl.End()
|
|
|
|
iup.GLSwapBuffers(self)
|
|
gl.Flush()
|
|
|
|
end
|
|
|
|
dialog = iup.dialog{canvas; title="Lua GL Test Application"}
|
|
dialog:show()
|
|
|
|
if (iup.MainLoopLevel()==0) then
|
|
iup.MainLoop()
|
|
end
|