mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 15:42:35 +00:00
112 lines
2.9 KiB
Ruby
112 lines
2.9 KiB
Ruby
class IMICFPS
|
|
class Terrain
|
|
include OpenGL
|
|
def initialize(size:, height: nil, width: nil, length: nil, heightmap: nil)
|
|
@size = 3#size
|
|
@heightmap = heightmap
|
|
@map = []
|
|
|
|
@height = height ? height : 1
|
|
@width = width ? width : @size
|
|
@length = length ? length : @size
|
|
|
|
@vertices = []
|
|
@normals = []
|
|
@colors = []
|
|
generate
|
|
end
|
|
|
|
def generate
|
|
# x
|
|
row = []
|
|
@width.times do |x|
|
|
@length.times do |z|
|
|
@map << Vertex.new(x-@width.to_f/2, @height, z-@length.to_f/2)
|
|
@map << Vertex.new(x+1-@width.to_f/2, @height, z-@length.to_f/2)
|
|
@map << Vertex.new(x-@width.to_f/2, @height, z+1-@length.to_f/2)
|
|
|
|
# @map << Vertex.new(x+1, height, z)
|
|
# @map << Vertex.new(x+1, height, z-1)
|
|
#
|
|
# @map << Vertex.new(x, height, z)
|
|
# @map << Vertex.new(x+1, height, z)
|
|
# @map << Vertex.new(x+1, height, z-1)
|
|
# height +=0.5
|
|
end
|
|
|
|
|
|
# @map << row
|
|
end
|
|
|
|
@map.size do |i|
|
|
@vertices << @map[i].x
|
|
@vertices << @map[i].y
|
|
@vertices << @map[i].z
|
|
@vertices << 1.0
|
|
normal = Vertex.new(0,1,0)
|
|
@normals << normal.x
|
|
@normals << normal.y
|
|
@normals << normal.z
|
|
color = Vertex.new(0,rand(0.2..1.0),0)
|
|
@colors << color.red
|
|
@colors << color.green
|
|
@colors << color.blue
|
|
end
|
|
@vertices = @vertices.pack("f*")
|
|
@normals = @normals.pack("f*")
|
|
@colors = @colors.pack("f*")
|
|
end
|
|
|
|
def draw
|
|
# new_draw
|
|
old_draw
|
|
end
|
|
|
|
def old_draw
|
|
glEnable(GL_COLOR_MATERIAL)
|
|
|
|
# glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
|
|
glPointSize(5)
|
|
# glBegin(GL_LINES)
|
|
# glBegin(GL_POINTS)
|
|
glBegin(GL_TRIANGLES)
|
|
@map.each_with_index do |vertex, index|
|
|
glNormal3f(0,1,0)
|
|
glColor3f(0.0, 0.5, 0) if index.even?
|
|
glColor3f(0, 1.0, 0) if index.odd?
|
|
glVertex3f(vertex.x, vertex.y, vertex.z)
|
|
end
|
|
glEnd
|
|
|
|
glDisable(GL_COLOR_MATERIAL)
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
|
|
end
|
|
|
|
def new_draw
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
|
|
glEnable(GL_NORMALIZE)
|
|
glPushMatrix
|
|
|
|
glEnable(GL_COLOR_MATERIAL)
|
|
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
|
|
glShadeModel(GL_SMOOTH)
|
|
glEnableClientState(GL_VERTEX_ARRAY)
|
|
glEnableClientState(GL_NORMAL_ARRAY)
|
|
glEnableClientState(GL_COLOR_ARRAY)
|
|
|
|
glVertexPointer(4, GL_FLOAT, 0, @vertices)
|
|
glNormalPointer(GL_FLOAT, 0, @normals)
|
|
glColorPointer(3, GL_FLOAT, 0, @colors)
|
|
|
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, @map.size/4)
|
|
|
|
glDisableClientState(GL_VERTEX_ARRAY)
|
|
glDisableClientState(GL_NORMAL_ARRAY)
|
|
glDisableClientState(GL_COLOR_ARRAY)
|
|
|
|
glPopMatrix
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
|
|
end
|
|
end
|
|
end
|