bge api doc update
bge.texture materialId wasn't showing up bge.type was outdated (I removed the glew example, I hope no one mind)
This commit is contained in:
@@ -516,7 +516,7 @@ When the texture object is deleted, the new texture is deleted and the old textu
|
||||
line by line starting from the bottom of the image. The pixel size and format is determined by the mode
|
||||
parameter.
|
||||
|
||||
.. function materialID(object,name)
|
||||
.. function:: materialID(object,name)
|
||||
|
||||
Returns a numeric value that can be used in :class:`Texture` to create a dynamic texture.
|
||||
|
||||
@@ -538,7 +538,7 @@ When the texture object is deleted, the new texture is deleted and the old textu
|
||||
:type name: string
|
||||
:rtype: integer
|
||||
|
||||
.. function setLogFile(filename)
|
||||
.. function:: setLogFile(filename)
|
||||
|
||||
Sets the name of a text file in which runtime error messages will be written, in addition to the printing
|
||||
of the messages on the Python console. Only the runtime errors specific to the VideoTexture module
|
||||
|
@@ -1765,33 +1765,29 @@ Game Types (bge.types)
|
||||
#. Polygon shape (triangle/quad)
|
||||
#. Game Object
|
||||
|
||||
#. Verticies will be split by face if necessary. Verticies can only be shared between faces if:
|
||||
#. Vertices will be split by face if necessary. Vertices can only be shared between faces if:
|
||||
|
||||
#. They are at the same position
|
||||
#. UV coordinates are the same
|
||||
#. Their normals are the same (both polygons are "Set Smooth")
|
||||
#. They are the same colour, for example: a cube has 24 verticies: 6 faces with 4 verticies per face.
|
||||
#. They are the same colour, for example: a cube has 24 vertices: 6 faces with 4 vertices per face.
|
||||
|
||||
The correct method of iterating over every :class:`KX_VertexProxy` in a game object
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
co = GameLogic.getCurrentController()
|
||||
obj = co.owner
|
||||
cont = logic.getCurrentController()
|
||||
object = cont.owner
|
||||
|
||||
m_i = 0
|
||||
mesh = obj.getMesh(m_i) # There can be more than one mesh...
|
||||
while mesh != None:
|
||||
for mat in range(mesh.getNumMaterials()):
|
||||
for mesh in object.meshes:
|
||||
for material in mesh.materials:
|
||||
for v_index in range(mesh.getVertexArrayLength(mat)):
|
||||
vertex = mesh.getVertex(mat, v_index)
|
||||
# Do something with vertex here...
|
||||
# ... eg: colour the vertex red.
|
||||
vertex.colour = [1.0, 0.0, 0.0, 1.0]
|
||||
m_i += 1
|
||||
mesh = obj.getMesh(m_i)
|
||||
|
||||
.. attribute:: materials
|
||||
|
||||
@@ -2401,135 +2397,53 @@ Game Types (bge.types)
|
||||
|
||||
Some of the methods/variables are CObjects. If you mix these up, you will crash blender.
|
||||
|
||||
This example requires `PyOpenGL <http://pyopengl.sourceforge.net>`_ and `GLEWPy <http://glewpy.sourceforge.net>`_
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
import OpenGL
|
||||
from OpenGL.GL import *
|
||||
from OpenGL.GLU import *
|
||||
import glew
|
||||
from glew import *
|
||||
|
||||
glewInit()
|
||||
from bge import logic
|
||||
|
||||
vertex_shader = """
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// original vertex position, no changes
|
||||
gl_Position = ftransform();
|
||||
// coordinate of the 1st texture channel
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
// coordinate of the 2nd texture channel
|
||||
gl_TexCoord[1] = gl_MultiTexCoord1;
|
||||
}
|
||||
"""
|
||||
|
||||
fragment_shader ="""
|
||||
|
||||
|
||||
uniform sampler2D color_0;
|
||||
uniform sampler2D color_1;
|
||||
uniform float factor;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
vec4 color_0 = texture2D(color_0, gl_TexCoord[0].st);
|
||||
vec4 color_1 = texture2D(color_1, gl_TexCoord[1].st);
|
||||
gl_FragColor = mix(color_0, color_1, factor);
|
||||
}
|
||||
"""
|
||||
|
||||
class MyMaterial:
|
||||
def __init__(self):
|
||||
self.pass_no = 0
|
||||
# Create a shader
|
||||
self.m_program = glCreateProgramObjectARB()
|
||||
# Compile the vertex shader
|
||||
self.shader(GL_VERTEX_SHADER_ARB, (vertex_shader))
|
||||
# Compile the fragment shader
|
||||
self.shader(GL_FRAGMENT_SHADER_ARB, (fragment_shader))
|
||||
# Link the shaders together
|
||||
self.link()
|
||||
|
||||
def PrintInfoLog(self, tag, object):
|
||||
"""
|
||||
PrintInfoLog prints the GLSL compiler log
|
||||
"""
|
||||
print "Tag: def PrintGLError(self, tag = ""):
|
||||
|
||||
def PrintGLError(self, tag = ""):
|
||||
"""
|
||||
Prints the current GL error status
|
||||
"""
|
||||
if len(tag):
|
||||
print tag
|
||||
err = glGetError()
|
||||
if err != GL_NO_ERROR:
|
||||
print "GL Error: %s\\n"%(gluErrorString(err))
|
||||
|
||||
def shader(self, type, shaders):
|
||||
"""
|
||||
shader compiles a GLSL shader and attaches it to the current
|
||||
program.
|
||||
|
||||
type should be either GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB
|
||||
shaders should be a sequence of shader source to compile.
|
||||
"""
|
||||
# Create a shader object
|
||||
shader_object = glCreateShaderObjectARB(type)
|
||||
|
||||
# Add the source code
|
||||
glShaderSourceARB(shader_object, len(shaders), shaders)
|
||||
|
||||
# Compile the shader
|
||||
glCompileShaderARB(shader_object)
|
||||
|
||||
# Print the compiler log
|
||||
self.PrintInfoLog("vertex shader", shader_object)
|
||||
|
||||
# Check if compiled, and attach if it did
|
||||
compiled = glGetObjectParameterivARB(shader_object, GL_OBJECT_COMPILE_STATUS_ARB)
|
||||
if compiled:
|
||||
glAttachObjectARB(self.m_program, shader_object)
|
||||
|
||||
# Delete the object (glAttachObjectARB makes a copy)
|
||||
glDeleteObjectARB(shader_object)
|
||||
|
||||
# print the gl error log
|
||||
self.PrintGLError()
|
||||
|
||||
def link(self):
|
||||
"""
|
||||
Links the shaders together.
|
||||
"""
|
||||
# clear error indicator
|
||||
glGetError()
|
||||
|
||||
glLinkProgramARB(self.m_program)
|
||||
|
||||
self.PrintInfoLog("link", self.m_program)
|
||||
|
||||
linked = glGetObjectParameterivARB(self.m_program, GL_OBJECT_LINK_STATUS_ARB)
|
||||
if not linked:
|
||||
print "Shader failed to link"
|
||||
return
|
||||
|
||||
glValidateProgramARB(self.m_program)
|
||||
valid = glGetObjectParameterivARB(self.m_program, GL_OBJECT_VALIDATE_STATUS_ARB)
|
||||
if not valid:
|
||||
print "Shader failed to validate"
|
||||
return
|
||||
|
||||
def activate(self, rasty, cachingInfo, mat):
|
||||
self.pass_no+=1
|
||||
if (self.pass_no == 1):
|
||||
glDisable(GL_COLOR_MATERIAL)
|
||||
glUseProgramObjectARB(self.m_program)
|
||||
return True
|
||||
|
||||
glEnable(GL_COLOR_MATERIAL)
|
||||
glUseProgramObjectARB(0)
|
||||
self.pass_no = 0
|
||||
return False
|
||||
|
||||
obj = GameLogic.getCurrentController().owner
|
||||
|
||||
mesh = obj.meshes[0]
|
||||
|
||||
for mat in mesh.materials:
|
||||
mat.setCustomMaterial(MyMaterial())
|
||||
print mat.texture
|
||||
object = logic.getCurrentController().owner
|
||||
object = cont.owner
|
||||
for mesh in object.meshes:
|
||||
for material in mesh.materials:
|
||||
shader = material.getShader()
|
||||
if shader != None:
|
||||
if not shader.isValid():
|
||||
shader.setSource(vertex_shader, fragment_shader, True)
|
||||
|
||||
# get the first texture channel of the material
|
||||
shader.setSampler('color_0', 0)
|
||||
# get the second texture channel of the material
|
||||
shader.setSampler('color_1', 1)
|
||||
# pass another uniform to the shader
|
||||
shader.setUniform1f('factor', 0.3)
|
||||
|
||||
|
||||
.. attribute:: texture
|
||||
|
||||
@@ -2932,7 +2846,7 @@ Game Types (bge.types)
|
||||
# +----------+ +-----------+ +-------------------------------------+
|
||||
# | Always +-----+ Python +-----+ Edit Object (Replace Mesh) LOD.Mesh |
|
||||
# +----------+ +-----------+ +-------------------------------------+
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
# List detail meshes here
|
||||
# Mesh (name, near, far)
|
||||
@@ -2942,16 +2856,16 @@ Game Types (bge.types)
|
||||
(".Lo", -40.0, -100.0)
|
||||
)
|
||||
|
||||
co = GameLogic.getCurrentController()
|
||||
obj = co.owner
|
||||
act = co.actuators["LOD." + obj.name]
|
||||
cam = GameLogic.getCurrentScene().active_camera
|
||||
cont = logic.getCurrentController()
|
||||
object = cont.owner
|
||||
actuator = cont.actuators["LOD." + obj.name]
|
||||
camera = logic.getCurrentScene().active_camera
|
||||
|
||||
def Depth(pos, plane):
|
||||
return pos[0]*plane[0] + pos[1]*plane[1] + pos[2]*plane[2] + plane[3]
|
||||
|
||||
# Depth is negative and decreasing further from the camera
|
||||
depth = Depth(obj.position, cam.world_to_camera[2])
|
||||
depth = Depth(object.position, camera.world_to_camera[2])
|
||||
|
||||
newmesh = None
|
||||
curmesh = None
|
||||
@@ -2959,15 +2873,15 @@ Game Types (bge.types)
|
||||
for mesh in meshes:
|
||||
if depth < mesh[1] and depth > mesh[2]:
|
||||
newmesh = mesh
|
||||
if "ME" + obj.name + mesh[0] == act.getMesh():
|
||||
if "ME" + object.name + mesh[0] == actuator.getMesh():
|
||||
curmesh = mesh
|
||||
|
||||
if newmesh != None and "ME" + obj.name + newmesh[0] != act.getMesh():
|
||||
if newmesh != None and "ME" + object.name + newmesh[0] != actuator.mesh:
|
||||
# The mesh is a different mesh - switch it.
|
||||
# Check the current mesh is not a better fit.
|
||||
if curmesh == None or curmesh[1] < depth or curmesh[2] > depth:
|
||||
act.mesh = obj.getName() + newmesh[0]
|
||||
GameLogic.addActiveActuator(act, True)
|
||||
actuator.mesh = object.name + newmesh[0]
|
||||
cont.activate(actuator)
|
||||
|
||||
.. attribute:: mesh
|
||||
|
||||
@@ -3003,31 +2917,31 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
# get the scene
|
||||
scene = GameLogic.getCurrentScene()
|
||||
scene = logic.getCurrentScene()
|
||||
|
||||
# print all the objects in the scene
|
||||
for obj in scene.objects:
|
||||
print obj.name
|
||||
for object in scene.objects:
|
||||
print(object.name)
|
||||
|
||||
# get an object named 'Cube'
|
||||
obj = scene.objects["Cube"]
|
||||
object = scene.objects["Cube"]
|
||||
|
||||
# get the first object in the scene.
|
||||
obj = scene.objects[0]
|
||||
object = scene.objects[0]
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Get the depth of an object in the camera view.
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
obj = GameLogic.getCurrentController().owner
|
||||
cam = GameLogic.getCurrentScene().active_camera
|
||||
object = logic.getCurrentController().owner
|
||||
cam = logic.getCurrentScene().active_camera
|
||||
|
||||
# Depth is negative and decreasing further from the camera
|
||||
depth = obj.position[0]*cam.world_to_camera[2][0] + obj.position[1]*cam.world_to_camera[2][1] + obj.position[2]*cam.world_to_camera[2][2] + cam.world_to_camera[2][3]
|
||||
depth = object.position[0]*cam.world_to_camera[2][0] + object.position[1]*cam.world_to_camera[2][1] + object.position[2]*cam.world_to_camera[2][2] + cam.world_to_camera[2][3]
|
||||
|
||||
@bug: All attributes are read only at the moment.
|
||||
|
||||
@@ -4361,9 +4275,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]
|
||||
if (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):
|
||||
@@ -4386,9 +4300,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# Box to test...
|
||||
box = []
|
||||
@@ -4422,9 +4336,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# Test point [0.0, 0.0, 0.0]
|
||||
if (cam.pointInsideFrustum([0.0, 0.0, 0.0])):
|
||||
|
Reference in New Issue
Block a user