浏览代码

explicate more parameters

David Rose 17 年之前
父节点
当前提交
0811991a8a
共有 1 个文件被更改,包括 143 次插入22 次删除
  1. 143 22
      direct/src/showbase/Loader.py

+ 143 - 22
direct/src/showbase/Loader.py

@@ -90,7 +90,7 @@ class Loader(DirectObject):
         Otherwise, an IOError is raised if the model is not found or
         Otherwise, an IOError is raised if the model is not found or
         cannot be read (similar to attempting to open a nonexistent
         cannot be read (similar to attempting to open a nonexistent
         file).  (If modelPath is a list of filenames, then IOError is
         file).  (If modelPath is a list of filenames, then IOError is
-        raised if *any* of the models could be loaded.)
+        raised if *any* of the models could not be loaded.)
 
 
         If callback is not None, then the model load will be performed
         If callback is not None, then the model load will be performed
         asynchronously.  In this case, loadModel() will initiate a
         asynchronously.  In this case, loadModel() will initiate a
@@ -290,7 +290,8 @@ class Loader(DirectObject):
 
 
     # font loading funcs
     # font loading funcs
     def loadFont(self, modelPath,
     def loadFont(self, modelPath,
-                 spaceAdvance = None, pointSize = None,
+                 spaceAdvance = None, lineHeight = None,
+                 pointSize = None,
                  pixelsPerUnit = None, scaleFactor = None,
                  pixelsPerUnit = None, scaleFactor = None,
                  textureMargin = None, polyMargin = None,
                  textureMargin = None, polyMargin = None,
                  minFilter = None, magFilter = None,
                  minFilter = None, magFilter = None,
@@ -299,22 +300,76 @@ class Loader(DirectObject):
                  outlineWidth = None,
                  outlineWidth = None,
                  outlineFeather = 0.1,
                  outlineFeather = 0.1,
                  outlineColor = VBase4(0, 0, 0, 1),
                  outlineColor = VBase4(0, 0, 0, 1),
-                 lineHeight = None, okMissing = False):
+                 renderMode = None,
+                 okMissing = False):
         """
         """
         modelPath is a string.
         modelPath is a string.
 
 
         This loads a special model as a TextFont object, for rendering
         This loads a special model as a TextFont object, for rendering
         text with a TextNode.  A font file must be either a special
         text with a TextNode.  A font file must be either a special
-        egg file (or bam file) generated with egg-mkfont, or a
-        standard font file (like a TTF file) that is supported by
-        FreeType.
+        egg file (or bam file) generated with egg-mkfont, which is
+        considered a static font, or a standard font file (like a TTF
+        file) that is supported by FreeType, which is considered a
+        dynamic font.
+
+        okMissing should be True to indicate the method should return
+        None if the font file is not found.  If it is False, the
+        method will raise an exception if the font file is not found
+        or cannot be loaded.
 
 
         Most font-customization parameters accepted by this method
         Most font-customization parameters accepted by this method
         (except lineHeight and spaceAdvance) may only be specified for
         (except lineHeight and spaceAdvance) may only be specified for
-        font files like TTF files, not for static egg files.
-
-        If color is not None, it is a VBase4 specifying the foreground
-        color of the font.  Specifying this option breaks
+        dynamic font files like TTF files, not for static egg files.
+
+        lineHeight specifies the vertical distance between consecutive
+        lines, in Panda units.  If unspecified, it is taken from the
+        font information.  This parameter may be specified for static
+        as well as dynamic fonts.
+
+        spaceAdvance specifies the width of a space character (ascii
+        32), in Panda units.  If unspecified, it is taken from the
+        font information.  This may be specified for static as well as
+        dynamic fonts.
+
+        The remaining parameters may only be specified for dynamic
+        fonts.
+
+        pixelsPerUnit controls the visual quality of the rendered text
+        characters.  It specifies the number of texture pixels per
+        each Panda unit of character height.  Increasing this number
+        increases the amount of detail that can be represented in the
+        characters, at the expense of texture memory.
+
+        scaleFactor also controls the visual quality of the rendered
+        text characters.  It is the amount by which the characters are
+        rendered bigger out of Freetype, and then downscaled to fit
+        within the texture.  Increasing this number may reduce some
+        artifacts of very small font characters, at a small cost of
+        processing time to generate the characters initially.
+
+        textureMargin specifies the number of pixels of the texture to
+        leave between adjacent characters.  It may be a floating-point
+        number.  This helps reduce bleed-through from nearby
+        characters within the texture space.  Increasing this number
+        reduces artifacts at the edges of the character cells
+        (especially for very small text scales), at the expense of
+        texture memory.
+
+        polyMargin specifies the amount of additional buffer to create
+        in the polygon that represents each character, in Panda units.
+        It is similar to textureMargin, but it controls the polygon
+        buffer, not the texture buffer.  Increasing this number
+        reduces artifacts from letters getting chopped off at the
+        edges (especially for very small text scales), with some
+        increasing risk of adjacent letters overlapping and obscuring
+        each other.
+
+        minFilter, magFilter, and anisotropicDegree specify the
+        texture filter modes that should be applied to the textures
+        that are created to hold the font characters.
+
+        If color is not None, it should be a VBase4 specifying the
+        foreground color of the font.  Specifying this option breaks
         TextNode.setColor(), so you almost never want to use this
         TextNode.setColor(), so you almost never want to use this
         option; the default (white) is the most appropriate for a
         option; the default (white) is the most appropriate for a
         font, as it allows text to have any arbitrary color assigned
         font, as it allows text to have any arbitrary color assigned
@@ -331,6 +386,39 @@ class Loader(DirectObject):
         outlineWidth, you can also specify outlineFeather (0.0 .. 1.0)
         outlineWidth, you can also specify outlineFeather (0.0 .. 1.0)
         and outlineColor.  You may need to increase pixelsPerUnit to
         and outlineColor.  You may need to increase pixelsPerUnit to
         get the best results.
         get the best results.
+
+        if renderMode is not None, it may be one of the following
+        symbols to specify a geometry-based font:
+
+            TextFont.RMTexture - this is the default.  Font characters
+              are rendered into a texture and applied to a polygon.
+              This gives the best general-purpose results.
+
+            TextFont.RMWireframe - Font characters are rendered as a
+              sequence of one-pixel lines.  Consider enabling line or
+              multisample antialiasing for best results.
+
+            TextFont.RMPolygon - Font characters are rendered as a
+              flat polygon.  This works best for very large
+              characters, and generally requires polygon or
+              multisample antialiasing to be enabled for best results.
+
+            TextFont.RMExtruded - Font characters are rendered with a
+              3-D outline made of polygons, like a cookie cutter.
+              This is appropriate for a 3-D scene, but may be
+              completely invisible when assigned to a 2-D scene and
+              viewed normally from the front, since polygons are
+              infinitely thin.
+
+            TextFont.RMSolid - A combination of RMPolygon and
+              RMExtruded: a flat polygon in front with a solid
+              three-dimensional edge.  This is best for letters that
+              will be tumbling in 3-D space.
+
+        If the texture mode is other than RMTexture, most of the above
+        parameters do not apply, though pixelsPerUnit still does apply
+        and roughly controls the tightness of the curve approximation
+        (and the number of vertices generated).
         
         
         """
         """
         assert Loader.notify.debug("Loading font: %s" % (modelPath))
         assert Loader.notify.debug("Loading font: %s" % (modelPath))
@@ -375,6 +463,8 @@ class Loader(DirectObject):
                 # This means we want the background to match the
                 # This means we want the background to match the
                 # outline color, but transparent.
                 # outline color, but transparent.
                 font.setBg(VBase4(outlineColor[0], outlineColor[1], outlineColor[2], 0.0))
                 font.setBg(VBase4(outlineColor[0], outlineColor[1], outlineColor[2], 0.0))
+            if renderMode:
+                font.setRenderMode(renderMode)
 
 
         if lineHeight is not None:
         if lineHeight is not None:
             # If the line height is specified, it overrides whatever
             # If the line height is specified, it overrides whatever
@@ -396,7 +486,23 @@ class Loader(DirectObject):
         texturePath is a string.
         texturePath is a string.
 
 
         Attempt to load a texture from the given file path using
         Attempt to load a texture from the given file path using
-        TexturePool class. Returns None if not found
+        TexturePool class.
+
+        okMissing should be True to indicate the method should return
+        None if the texture file is not found.  If it is False, the
+        method will raise an exception if the texture file is not
+        found or cannot be loaded.
+
+        If alphaPath is not None, it is the name of a grayscale image
+        that is applied as the texture's alpha channel.
+
+        If readMipmaps is True, then the filename string must contain
+        a sequence of hash characters ('#') that are filled in with
+        the mipmap index number, and n images will be loaded
+        individually which define the n mipmap levels of the texture.
+        The base level is mipmap level 0, and this defines the size of
+        the texture and the number of expected mipmap images.
+        
         """
         """
         if alphaPath is None:
         if alphaPath is None:
             assert Loader.notify.debug("Loading texture: %s" % (texturePath))
             assert Loader.notify.debug("Loading texture: %s" % (texturePath))
@@ -416,11 +522,19 @@ class Loader(DirectObject):
     def load3DTexture(self, texturePattern, readMipmaps = False, okMissing = False):
     def load3DTexture(self, texturePattern, readMipmaps = False, okMissing = False):
         """
         """
         texturePattern is a string that contains a sequence of one or
         texturePattern is a string that contains a sequence of one or
-        more '#' characters, which will be filled in with the sequence
-        number.
-
-        Returns a 3-D Texture object, suitable for rendering
-        volumetric textures, if successful, or None if not.
+        more hash characters ('#'), which will be filled in with the
+        z-height number.  Returns a 3-D Texture object, suitable for
+        rendering volumetric textures.
+
+        okMissing should be True to indicate the method should return
+        None if the texture file is not found.  If it is False, the
+        method will raise an exception if the texture file is not
+        found or cannot be loaded.
+
+        If readMipmaps is True, then the filename string must contain
+        two sequences of hash characters; the first group is filled in
+        with the z-height number, and the second group with the mipmap
+        index number.
         """
         """
         assert Loader.notify.debug("Loading 3-D texture: %s" % (texturePattern))
         assert Loader.notify.debug("Loading 3-D texture: %s" % (texturePattern))
         if phaseChecker:
         if phaseChecker:
@@ -434,12 +548,19 @@ class Loader(DirectObject):
     def loadCubeMap(self, texturePattern, readMipmaps = False, okMissing = False):
     def loadCubeMap(self, texturePattern, readMipmaps = False, okMissing = False):
         """
         """
         texturePattern is a string that contains a sequence of one or
         texturePattern is a string that contains a sequence of one or
-        more '#' characters, which will be filled in with the sequence
-        number.
-
-        Returns a six-face cube map Texture object if successful, or
-        None if not.
-
+        more hash characters ('#'), which will be filled in with the
+        face index number (0 through 6).  Returns a six-face cube map
+        Texture object.
+
+        okMissing should be True to indicate the method should return
+        None if the texture file is not found.  If it is False, the
+        method will raise an exception if the texture file is not
+        found or cannot be loaded.
+
+        If readMipmaps is True, then the filename string must contain
+        two sequences of hash characters; the first group is filled in
+        with the face index number, and the second group with the
+        mipmap index number.
         """
         """
         assert Loader.notify.debug("Loading cube map: %s" % (texturePattern))
         assert Loader.notify.debug("Loading cube map: %s" % (texturePattern))
         if phaseChecker:
         if phaseChecker: