csgo-2018-source/launcher_main/ExportC.py
2021-07-24 21:11:47 -07:00

69 lines
2.3 KiB
Python

# Export from maya directly into simple vertex / index buffer for direct rendering
# Usage: just run the script below on a selected mesh object. it'll print vertex and index buffers
import sys
import math
import os
import StringIO
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx
selList = OpenMaya.MSelectionList()
OpenMaya.MGlobal.getActiveSelectionList(selList)
selListIter = OpenMaya.MItSelectionList(selList)
listVertices = []
listFaces = []
while not selListIter.isDone():
dagPath = OpenMaya.MDagPath()
component = OpenMaya.MObject()
selListIter.getDagPath(dagPath, component)
rot = OpenMaya.MQuaternion()
dagTransform = dagPath.transform()
if( dagTransform.apiType() == OpenMaya.MFn.kTransform ):
xformFn = OpenMaya.MFnTransform(dagTransform)
xform = xformFn.transformation().asRotateMatrix()
xformFn.getRotation( rot )
else:
xform = OpenMaya.MMatrix()
xform.setToIdentity()
dagPath.extendToShape()
if (dagPath.apiType() == OpenMaya.MFn.kMesh):
mesh = dagPath.node()
meshFn = OpenMaya.MFnMesh(mesh)
vertIter = OpenMaya.MItMeshVertex( dagPath, component )
print "// ", vertIter.count(), " verts in ", dagPath.partialPathName()
print "ErrorRenderLoop::Vertex_t g_verts_%s[%d] = {" % (dagPath.partialPathName(), vertIter.count())
while not vertIter.isDone():
vertPos = OpenMaya.MVector(vertIter.position()).rotateBy(rot)
vertColor = OpenMaya.MColor(1,1,1,1)
vertNormal = OpenMaya.MVector()
vertIter.getNormal( vertNormal )
if( vertIter.hasColor() ):
vertIter.getColor( vertColor )
vertNormal = vertNormal.rotateBy(rot)
print "{%.3f,%.3f,%.3f, %.3f,%.3f,%.3f, 0x%02X%02X%02X%02X }," % (vertPos.x,vertPos.y,vertPos.z, vertNormal.x, vertNormal.y, vertNormal.z, vertColor.r*255, vertColor.g*255,vertColor.b*255, vertColor.a*255 )
vertIter.next()
print "};"
faceIter = OpenMaya.MItMeshPolygon(dagPath,component)
print "// ", faceIter.count(), " triangles"
print "uint16_t g_tris_%s[%d][3] = {" % ( dagPath.partialPathName(), faceIter.count() )
faceCount = 0
while not faceIter.isDone():
faceVerts = OpenMaya.MIntArray()
faceIter.getVertices( faceVerts )
print ("" if faceCount == 0 else ", "), "{ ", ", ".join( str(x) for x in faceVerts ), " }"
faceCount = faceCount + 1
faceIter.next()
print "};"
selListIter.next()