diff --git a/data/xml/models.xml b/data/xml/models.xml index 4c21b0d..00e461e 100755 --- a/data/xml/models.xml +++ b/data/xml/models.xml @@ -11,4 +11,30 @@ mat_test + + + mesh_sprite + mat_star + + + + + mesh_centered_sprite + mat_star + + + + + mesh_centered_sprite + mat_particle + + + + + mesh_centered_sprite + mat_dralthi + + + + diff --git a/data/xml/textures.xml b/data/xml/textures.xml index 884cee2..e91258d 100755 --- a/data/xml/textures.xml +++ b/data/xml/textures.xml @@ -19,6 +19,16 @@ tex/test1.png + + tex/whitelight_static.png + + + tex/star_sprite_main.png + + + tex/dralthi.png + + tex/plasma1.png @@ -28,4 +38,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/fonts.py b/fonts.py index 0f358e3..8d3879a 100644 --- a/fonts.py +++ b/fonts.py @@ -11,9 +11,11 @@ class TextureFile(object): def load(self, filename): self.filename = filename - img = files.mgr.png(filename) + img = pygame.image.load(filename) + img.convert_alpha() + glActiveTexture(GL_TEXTURE0) texid = glGenTextures(1) - print "Generated texture id %s" % (texid,) + #print "Generated font texture id %s" % (texid,) self.id = texid @@ -25,8 +27,11 @@ class TextureFile(object): dimension = GL_TEXTURE_2D glBindTexture(dimension, texid) glTexImage2D(dimension, 0, GL_RGBA8, imgr.w, imgr.h, 0, GL_RGBA, GL_UNSIGNED_BYTE, imgdata) - glBindTexture(dimension, 0) - + glTexParameteri(dimension, GL_TEXTURE_WRAP_S, GL_CLAMP) + glTexParameteri(dimension, GL_TEXTURE_WRAP_T, GL_CLAMP) + glTexParameteri(dimension, GL_TEXTURE_MAG_FILTER, GL_NEAREST) + glTexParameteri(dimension, GL_TEXTURE_MIN_FILTER, GL_NEAREST) + class TexFont(object): def __init__(self): self.image = None @@ -41,6 +46,7 @@ class TexFont(object): self.gltex = None self.monospace = False self.charsizes = [] + self.colors = (1.0, 1.0, 1.0, 1.0) @staticmethod def new(fontdir, fontname): @@ -49,7 +55,52 @@ class TexFont(object): tf.load_texture(os.path.join(fontdir, "%s.png" % (fontname,))) return tf - def render + def render(self, text, color=None): + if color is None: + color = self.colors + #print "Binding texture %s" % (self.gltex.id,) + glActiveTexture(GL_TEXTURE0) + dimension = GL_TEXTURE_2D + glBindTexture(GL_TEXTURE_2D, self.gltex.id) + glTexParameteri(dimension, GL_TEXTURE_WRAP_S, GL_CLAMP) + glTexParameteri(dimension, GL_TEXTURE_WRAP_T, GL_CLAMP) + glTexParameteri(dimension, GL_TEXTURE_MAG_FILTER, GL_NEAREST) + glTexParameteri(dimension, GL_TEXTURE_MIN_FILTER, GL_NEAREST) + + glBegin(GL_TRIANGLES) + glNormal3f(0.0, 0.0, 1.0) + glColor4f(*color) + #print "Rendering font" + offset = 0.0 + for i, letter in enumerate(text): + offset = self.render_letter(letter, offset) + + glEnd() + + + def render_letter(self, letter, offset): + charidx = self.mapchar(letter) + x1, y1, x2, y2 = self.get_coordinates(charidx) + cx, cy = self.charsize(charidx) + + #print "Printing letter %s(%s) from %s, %s to %s, %s using texcoords %s, %s, %s, %s" % (letter, charidx, offset, 0.0, offset + cx, cy, x1*128.0, y1*128.0, x2*128.0, y2*128.0) + glTexCoord2f(x1, y1); glVertex3f( offset + 0.0, 0.0, 0.0) + glTexCoord2f(x1, y2); glVertex3f( offset + 0.0, cy, 0.0) + glTexCoord2f(x2, y1); glVertex3f( offset + cx, 0.0, 0.0) + glTexCoord2f(x2, y1); glVertex3f( offset + cx, 0.0, 0.0) + glTexCoord2f(x1, y2); glVertex3f( offset + 0.0, cy, 0.0) + glTexCoord2f(x2, y2); glVertex3f( offset + cx, cy, 0.0) + glTexCoord2f(0.0, 0.0) + + return offset + cx + + def charsize(self, idx): + if self.monospace: + return (self.charwidth, self.charheight) + else: + return self.charsizes[idx] + + def mapchar(self, char): """ @@ -67,9 +118,9 @@ class TexFont(object): char = ord(char) if char >= self.start and char < self.end: - return self.end - self.start - 1 - else: return char - self.start + else: + return self.end - self.start - 1 def get_coordinates(self, idx): @@ -81,15 +132,15 @@ class TexFont(object): if idx < 0 or idx >= (self.end - self.start): idx = (self.end - self.start - 1) - xp1 = (idx % self.cols) * self.charwidth - yp1 = (idx // self.cols) * self.charheight + xp1 = (idx % self.cols) * (self.charwidth + 1) + yp1 = (idx // self.cols) * (self.charheight + 1) if self.monospace: - xp2 = xp + self.charwidth - yp2 = yp + self.charheight + xp2 = xp1 + self.charwidth + 1 + yp2 = yp1 + self.charheight + 1 else: - xp2 = xp + self.charsizes[idx][0] - yp2 = yp + self.charsizes[idx][1] + xp2 = xp1 + self.charsizes[idx][0] + 1 + yp2 = yp1 + self.charsizes[idx][1] + 1 xtc1 = (float(xp1) + 0.0) / self.texwidth ytc1 = (float(yp1) + 0.0) / self.texheight @@ -120,6 +171,9 @@ class TexFont(object): self.cols, self.rows = nextline(dd) self.texwidth, self.texheight = nextline(dd) + self.charwidth -= 1 + self.charheight -= 1 + assert dd.readline() == "charsizes\n" self.charsizes = [None] * (self.end - self.start) diff --git a/gametimer.py b/gametimer.py index f642d6c..27cc631 100755 --- a/gametimer.py +++ b/gametimer.py @@ -1,10 +1,12 @@ import pygame +import collections def start_loop(): global g_timer, g_elapsed g_elapsed = 0 g_elapsed_sec = 0.0 g_timer = pygame.time.get_ticks() + reset_fps_count() def next_frame(skipping=False): global g_timer, g_elapsed, g_elapsed_sec @@ -16,6 +18,30 @@ def next_frame(skipping=False): g_elapsed = newticks - g_timer g_timer = newticks g_elapsed_sec = float(g_elapsed) / 1000.0 + + if g_elapsed != 0: + update_fps_count(g_elapsed) + + +def reset_fps_count(): + global g_framelist, update_fps_count + g_framelist = collections.deque() + update_fps_count = update_fps_count_empty + +def update_fps_count_empty(elapsed): + global g_framelist, update_fps_count + g_framelist.append(elapsed) + if len(g_framelist) >= 25: + update_fps_count = update_fps_count_full + +def update_fps_count_full(elapsed): + global g_framelist + g_framelist.popleft() + g_framelist.append(elapsed) + +def update_fps_count(elapsed): + "this is replaced with either the _empty or _full variant, depending on the situation" + pass def elapsed(): """ @@ -33,9 +59,61 @@ def num_frames(delay, offset=0): """ if you want something to occur every "delay" milliseconds, this will return the number of times you should make it happen + in this particular frame (can be 0) """ global g_elapsed, g_timer return int((g_timer - offset) / delay) - int((g_timer - g_elapsed - offset) / delay) +def loop_frames(delay, offset=0): + return xrange(num_frames(delay, offset)) + def get_timer(): return g_timer + +def average(d): + #spf = (float(sum(g_framelist)) / (len(g_framelist) * 1000.0)) + if len(d) == 0: + return 0.0 + + smooth = 0.85 + #v2 = float(d[-1]) + #for i in xrange(len(d) - 2, 0, -1): + # pass + + v2 = float(d[0]) + for i in xrange(1, len(d)): + v1 = float(d[i]) + v2 = (smooth * v2) + ((1.0 - smooth) * v1) + + return v2 + + +def get_fps(): + global g_framelist + #return ",".join([str(x) for x in sorted(g_framelist)]) + if len(g_framelist) == 0.0: + return 0.0 + spf = average(g_framelist) / 1000.0 + if spf == 0.0: + return 0.0 + #print "%s < %s" % (1.0 / spf, g_framelist) + return 1.0 / spf + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/models.py b/models.py index 0106d7d..0cd7ca0 100755 --- a/models.py +++ b/models.py @@ -1,9 +1,13 @@ +import os +import glob import enums import files import gamedata import pygame from OpenGL.GL import * from py3dutil import vect +import fonts +import collections class Vertex(object): __slots__ = [ @@ -21,7 +25,8 @@ class Vertex(object): class Model_Manager(object): def __init__(self): - pass + self.centered_sprite_mesh = None + self.sprite_mesh = None def create(self, mname): return self.models[mname].instance() @@ -37,10 +42,11 @@ class Model_Manager(object): self.load_textures() self.load_materials() self.load_models() + self.load_fonts() def load_textypes(self): self.textypes = {} - self.textypes[enums.tt.diffuse] = TextureType(GL_TEXTURE0, GL_TEXTURE_2D, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST) + self.textypes[enums.tt.diffuse] = TextureType(GL_TEXTURE0, GL_TEXTURE_2D, GL_CLAMP, GL_CLAMP, GL_LINEAR, GL_LINEAR) self.textypes[enums.tt.emissive] = TextureType(GL_TEXTURE1, GL_TEXTURE_2D) self.textypes[enums.tt.specular] = TextureType(GL_TEXTURE2, GL_TEXTURE_2D) self.textypes[enums.tt.normal] = TextureType(GL_TEXTURE3, GL_TEXTURE_2D) @@ -91,9 +97,12 @@ class Model_Manager(object): self.models = {} for meshdata in mdldata.mesh: if meshdata['sprite']: - mesh = SpriteMesh.singleton() + self.sprite_mesh = SpriteMesh() + mesh = self.sprite_mesh elif meshdata['centered_sprite']: - mesh = SpriteMeshCentered.singleton() + if self.centered_sprite_mesh == None: + self.centered_sprite_mesh = SpriteMeshCentered() + mesh = self.centered_sprite_mesh else: mesh = Mesh.factory(meshdata) mgr.meshes[meshdata['id']] = mesh @@ -102,6 +111,18 @@ class Model_Manager(object): model = Model() model.load(modeldata) mgr.models[modeldata['id']] = model + + def load_fonts(self): + self.fontlib = {} + fontdir = os.path.join(files.get_basedir(), 'data', 'font') + for fontfile in glob.glob(os.path.join(fontdir, '*.tfd')): + fontname = os.path.splitext(os.path.split(fontfile)[1])[0] + fontobj = fonts.TexFont.new(fontdir, fontname) + self.fontlib[fontname] = fontobj + print "Loaded font %s" % (fontname,) + + def get_font(self, name): + return self.fontlib[name] class TextureType(object): def __init__(self, texunit, texdim, wrap_s=GL_CLAMP, wrap_t=GL_CLAMP, mag=GL_LINEAR, min=GL_LINEAR): @@ -113,11 +134,13 @@ class TextureType(object): self.min = min def initialize(self): - glActiveTexture(self.texunit) - glTexParameterf(self.texdim, GL_TEXTURE_WRAP_S, self.wrap_s) - glTexParameterf(self.texdim, GL_TEXTURE_WRAP_T, self.wrap_t) - glTexParameterf(self.texdim, GL_TEXTURE_MAG_FILTER, self.mag) - glTexParameterf(self.texdim, GL_TEXTURE_MIN_FILTER, self.min) + return + + def apply_parameters(self): + glTexParameteri(self.texdim, GL_TEXTURE_WRAP_S, self.wrap_s) + glTexParameteri(self.texdim, GL_TEXTURE_WRAP_T, self.wrap_t) + glTexParameteri(self.texdim, GL_TEXTURE_MAG_FILTER, self.mag) + glTexParameteri(self.texdim, GL_TEXTURE_MIN_FILTER, self.min) def get_dimension(self): return self.texdim @@ -175,8 +198,10 @@ class Texture(object): self.texcoords = self.texcoords_direct #self.texcoords = self.texcoords_subset - def bind(self): + def bind(self, textype): + textype.activate() glBindTexture(GL_TEXTURE_2D, self.texid) + textype.apply_parameters() class TextureFile(object): def __init__(self): @@ -189,7 +214,7 @@ class TextureFile(object): self.filename = filename img = files.mgr.png(filename) texid = glGenTextures(1) - print "Generated texture id %s" % (texid,) + print "Generated texture id %s from %s" % (texid, self.filename) self.id = texid @@ -201,7 +226,9 @@ class TextureFile(object): dimension = GL_TEXTURE_2D glBindTexture(dimension, texid) glTexImage2D(dimension, 0, GL_RGBA8, imgr.w, imgr.h, 0, GL_RGBA, GL_UNSIGNED_BYTE, imgdata) - glBindTexture(dimension, 0) + + + #glBindTexture(dimension, 0) @@ -219,9 +246,10 @@ class Material(object): for tt in enums.tt: if tt in self.textures: tto = mgr.get_textype(tt) - tto.initialize() + tto.activate() tex = self.textures[tt] - tex.bind() + #print "Binding texture %s" % (tex.texid,) + tex.bind(tto) def load(self, data): self.id = data['id'] @@ -245,8 +273,7 @@ class Material(object): self.texcoords = texobj.texcoords prevtex = texobj - print self.textures - + class Mesh(object): @@ -267,7 +294,8 @@ class Mesh(object): glEnd() def draw_vertex(self, v, texcoord): - glColor3f(v.c[0], v.c[1], v.c[2]) + if v.c != None: + glColor3f(v.c[0], v.c[1], v.c[2]) glNormal3f(v.n.x, v.n.y, v.n.z) glTexCoord2f(*texcoord(v.t[0], v.t[1])) glVertex3f(v.v.x, v.v.y, v.v.z) @@ -275,40 +303,35 @@ class Mesh(object): class SpriteMesh(Mesh): - _SINGLETON = None - def __init__(self): Mesh.__init__(self) self.vertexes = [ - Vertex(vect(0.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect(0.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), (1.0, 1.0, 1.0)), - Vertex(vect(1.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect(1.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect(0.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), (1.0, 1.0, 1.0)), - Vertex(vect(1.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 1.0), (1.0, 1.0, 1.0)), + Vertex(vect(0.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 0.0), None), + Vertex(vect(0.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), None), + Vertex(vect(1.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), None), + Vertex(vect(1.0, 0.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), None), + Vertex(vect(0.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), None), + Vertex(vect(1.0, 1.0, 0.0), vect(0.0, 0.0, 1.0), (1.0, 1.0), None), ] - @classmethod - def return_singleton(cls): - return cls._SINGLETON @classmethod def singleton(cls): - cls._SINGLETON = cls() - cls.singleton = cls.return_singleton - return cls._SINGLETON - + if cls.__SINGLETON == None: + cls.__SINGLETON = cls() + + return cls.__SINGLETON class SpriteMeshCentered(SpriteMesh): def __init__(self): SpriteMesh.__init__(self) self.vertexes = [ - Vertex(vect(-0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect( 0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect(-0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), (1.0, 1.0, 1.0)), - Vertex(vect( 0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), (1.0, 1.0, 1.0)), - Vertex(vect(-0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), (1.0, 1.0, 1.0)), - Vertex(vect( 0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 1.0), (1.0, 1.0, 1.0)), + Vertex(vect(-0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 0.0), None), + Vertex(vect(-0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), None), + Vertex(vect( 0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), None), + Vertex(vect( 0.5, -0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 0.0), None), + Vertex(vect(-0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (0.0, 1.0), None), + Vertex(vect( 0.5, 0.5, 0.0), vect(0.0, 0.0, 1.0), (1.0, 1.0), None), ] class RenderLayer(object): @@ -316,7 +339,7 @@ class RenderLayer(object): self.id = layernum self.mesh = None self.material = None - self.color = [1.0, 1.0, 1.0, 1.0] + self.color = None self.scale = [1.0, 1.0, 1.0] self.displaylist = None self.anim = "idle" @@ -334,6 +357,8 @@ class RenderLayer(object): self.material.bind() glPushMatrix() glScalef(*self.scale) + if self.color != None: + glColor4f(*self.color) if self.displaylist == None: self.displaylist = glGenLists(1) @@ -341,10 +366,18 @@ class RenderLayer(object): self.mesh.draw(self.material.texcoords) glEndList() + #print "Drawing mesh %s" % ( self.displaylist, ) glCallList(self.displaylist) glPopMatrix() + +class ParticleLayer(RenderLayer): + def __init__(self, layernum): + RenderLayer.__init__(self, layernum) + self.particles = collections.deque() + + def render(self): + pass - class Model(object): def __init__(self): @@ -368,6 +401,41 @@ class Model(object): for layer in self.layers: layer.render() + +class TextModel(Model): + def __init__(self, fontname, text, color=None, scale=None): + self.displaylist = None + self.fontname = fontname + self.text = text + self.color = color + self.scale = scale + if self.scale == None: + self.scale = (1.0, 1.0, 1.0) + + def load(self, data): + pass + + def instance(self): + return self + + def render(self): + glPushMatrix() + glScalef(*self.scale) + if self.color != None: + glColor4f(*self.color) + + if self.displaylist == None: + self.displaylist = glGenLists(1) + glNewList(self.displaylist, GL_COMPILE) + font = mgr.get_font(self.fontname) + font.render(self.text, self.color) + glEndList() + + #print "Drawing mesh %s" % ( self.displaylist, ) + glCallList(self.displaylist) + glPopMatrix() + + def init(): global mgr mgr = Model_Manager() diff --git a/roc_test.py b/roc_test.py index d288367..03708b3 100755 --- a/roc_test.py +++ b/roc_test.py @@ -3,14 +3,80 @@ import pygame from OpenGL.GL import * from py3dutil import vect, quat import models -from platform_win32 import * +import fonts +import gametimer +from platform import * +import pipeline +import time +import collections +import random +import math + +class partycle(object): + def __init__(self, x, y, xd, yd, rot, rotd, color): + self.x = x + self.y = y + self.xd = xd + self.yd = yd + self.rot = rot + self.rotd = rotd + self.color = color + + @classmethod + def random(cls): + x, y = [((random.random() * 2.0) - 1.0) * 10.0 for _ in xrange(2)] + xd, yd = [((random.random() * 2.0) - 1.0) * 4.0 for _ in xrange(2)] + hue = random.random() + m1 = 1.0 + h1 = hue * 6.0 + s1 = 1.0 - abs((h1 % 2.0) - 1.0) + if h1 < 1.0: + r, g, b = 1.0, s1, 0.0 + elif h1 < 2.0: + r, g, b = s1, 1.0, 0.0 + elif h1 < 3.0: + r, g, b = 0.0, 1.0, s1 + elif h1 < 4.0: + r, g, b = 0.0, s1, 1.0 + elif h1 < 5.0: + r, g, b = s1, 0.0, 1.0 + elif h1 < 6.0: + r, g, b = 1.0, 0.0, s1 + + rot = random.random() * 90.0 + rotd = ((random.random() * 2.0) - 1.0) * 3.0 + rv = cls(x, y, xd, yd, rot, rotd, (r, g, b, 1.0)) + + return rv + + def movestep(self): + self.x += self.xd + self.y += self.yd + self.xd *= 0.985 + self.yd *= 0.985 + self.rot += self.rotd class test_universe(roc.base_universe): + def __init__(self): + self.font = models.mgr.fontlib["micross20"] + self.text1 = models.TextModel("micross20", "#$% 0123 ,,,, Hello world!\xa8\xa8\xa8F", (1.0, 1.0, 0.5, 1.0)) + self.string = "" + self.move = 199.0 + self.moveinc = 1.0 + self.particles = collections.deque() + self.particles.append(partycle.random()) + + + def frame(self, events): + #print "*** Starting frame" # pink triangle + glDisable(GL_BLEND) + glDisable(GL_TEXTURE_2D) glBegin(GL_TRIANGLE_STRIP) glNormal3f(0.0, 0.0, 1.0) - glColor4f(1.0, 0.0, 0.5, 1.0) + glTexCoord2f(0.0, 0.0) + glColor4f(1.0, 0.0, 0.5, 0.0) glVertex3f( 20.0, 50.0, 1.0) glVertex3f( 20.0, 600.0, 1.0) glVertex3f( 400.0, 50.0, 1.0) @@ -19,12 +85,16 @@ class test_universe(roc.base_universe): # yellow square glBegin(GL_TRIANGLE_STRIP) glNormal3f(0.0, 0.0, 1.0) - glColor4f(0.0, 0.2, 0.5, 1.0) + glTexCoord2f(0.0, 0.0) + glColor4f(0.0, 0.2, 0.5, 0.8) glVertex3f( 150.0, 20.0, -50.0) glVertex3f( 150.0, 400.0, -50.0) glVertex3f( 360.0, 20.0, -50.0) glVertex3f( 360.0, 400.0, -50.0) glEnd() + glEnable(GL_BLEND) + glEnable(GL_TEXTURE_2D) + glColor4f(1.0, 1.0, 1.0, 1.0) # texture test mdl = models.mgr.create("m_test") @@ -33,6 +103,63 @@ class test_universe(roc.base_universe): mdl.render() glPopMatrix() + + + + # font test + glPushMatrix() + glTranslate(200.0, 200.0, 5.0) + self.text1.render() + glPopMatrix() + + for x in xrange(gametimer.num_frames(10)): + self.move = self.move + self.moveinc + if self.move > 300.0: + self.moveinc = -1.0 + elif self.move < 200.0: + self.moveinc = 1.0 + for party in self.particles: + party.movestep() + if self.moveinc > 0.0: + party = partycle.random() + self.particles.append(party) + #print party.color + else: + self.particles.popleft() + + + glPushMatrix() + glTranslate(self.move, 250.0, 5.0) + + + """ + if len(self.string) > 61: + self.string = "" + + for x in xrange(gametimer.num_frames(1000)): + self.string = self.string + str(len(self.string) % 10) + """ + for x in xrange(gametimer.num_frames(100)): + self.string = str(round(gametimer.get_fps(), 1)) + #print len(gametimer.g_framelist) + + + self.font.render(self.string) + glPopMatrix() + + # texture test + mdl2 = models.mgr.create("m_dralthi") + mdl2.layers[0].color = None + #print mdl2.layers[0].mesh + for party in self.particles: + glPushMatrix() + glTranslate(600.0 + party.x, 350.0 + party.y, 6.0) + glRotate(party.rot, 0.0, 0.0, 1.0) + #glColor4f(*party.color) + mdl2.render() + glPopMatrix() + + roc.init2d() diff --git a/tools/examplefonts/coure10.tfd b/tools/examplefonts/coure10.tfd index 1ed4e56..e14fb48 100644 --- a/tools/examplefonts/coure10.tfd +++ b/tools/examplefonts/coure10.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -14,9 -8,13 +9,14 +13,8 128,128 charsizes 8,13 diff --git a/tools/examplefonts/micross20.tfd b/tools/examplefonts/micross20.tfd index 094defd..2d133bf 100644 --- a/tools/examplefonts/micross20.tfd +++ b/tools/examplefonts/micross20.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -25,21 -9,11 +21,25 +11,9 256,256 charsizes 5,24 diff --git a/tools/examplefonts/micross42.tfd b/tools/examplefonts/micross42.tfd index 61b103f..f12cb08 100644 --- a/tools/examplefonts/micross42.tfd +++ b/tools/examplefonts/micross42.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -49,43 -10,11 +43,49 +11,10 512,512 charsizes 11,48 diff --git a/tools/examplefonts/monopro6.tfd b/tools/examplefonts/monopro6.tfd index 4e2cc44..5e7e64a 100644 --- a/tools/examplefonts/monopro6.tfd +++ b/tools/examplefonts/monopro6.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -11,7 -8,13 +7,11 +13,8 128,128 charsizes 6,10 diff --git a/tools/examplefonts/proggysquaresz12.tfd b/tools/examplefonts/proggysquaresz12.tfd index 4e546fd..76db60f 100644 --- a/tools/examplefonts/proggysquaresz12.tfd +++ b/tools/examplefonts/proggysquaresz12.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -12,8 8,12 +12,8 128,128 charsizes 7,11 diff --git a/tools/examplefonts/proggytinysz12.tfd b/tools/examplefonts/proggytinysz12.tfd index 4e2cc44..5e7e64a 100644 --- a/tools/examplefonts/proggytinysz12.tfd +++ b/tools/examplefonts/proggytinysz12.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -11,7 -8,13 +7,11 +13,8 128,128 charsizes 6,10 diff --git a/tools/examplefonts/vgafix12.tfd b/tools/examplefonts/vgafix12.tfd index 0bf6823..a66ef11 100644 --- a/tools/examplefonts/vgafix12.tfd +++ b/tools/examplefonts/vgafix12.tfd @@ -1,7 +1,7 @@ fontheader 32,128 -16,9 -8,14 +9,16 +14,8 128,128 charsizes 8,15 diff --git a/tools/fontmaker.py b/tools/fontmaker.py index ab12a9a..c14ffa7 100644 --- a/tools/fontmaker.py +++ b/tools/fontmaker.py @@ -81,8 +81,8 @@ pygame.image.save(tex, "%s.png" % (fontname,)) datf = open("%s.tfd" % (fontname,), "w") datf.write("fontheader\n") datf.write("%s,%s\n" % (start, end)) -datf.write("%s,%s\n" % (maxheight, maxwidth)) -datf.write("%s,%s\n" % (ratioheight, ratiowidth)) +datf.write("%s,%s\n" % (maxwidth, maxheight)) +datf.write("%s,%s\n" % (ratiowidth, ratioheight)) datf.write("%s,%s\n" % (texsize, texsize)) datf.write("charsizes\n") for i, sz in enumerate(imsizes): diff --git a/video.py b/video.py index 4b5d925..eac2962 100755 --- a/video.py +++ b/video.py @@ -72,7 +72,7 @@ def init2d(): #glRotatef(120.0, 1.0, 0.0, 0.0) - glClearColor(0.0, 0.0, 0.0, 0.0) + glClearColor(0.0, 0.0, 0.0, 0.5) glClearDepth(-256.0) glShadeModel(GL_SMOOTH) @@ -81,6 +81,8 @@ def init2d(): glEnable(GL_TEXTURE_2D) glDepthFunc(GL_GEQUAL) glEnable(GL_BLEND) + glDisable(GL_ALPHA_TEST) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (0.3, 0.3, 0.3, 1.0)) @@ -100,7 +102,7 @@ def init3d(): glLoadIdentity() glShadeModel(GL_SMOOTH) - glClearColor(0.0, 0.0, 0.0, 0.0) + glClearColor(0.0, 0.0, 0.0, 1.0) glClearDepth(1.0) glEnable(GL_DEPTH_TEST) glEnable(GL_CULL_FACE)