blender to C++ exporter for vertices and normals of triangulated mesh for CULL_FACE
Modified so that the front-sides are directed in their normals.
(faces's normal. not vertex's normal)
import bpy def cross(u, v): return [u[1]*v[2]-u[2]*v[1], u[2]*v[0]-u[0]*v[2], u[1]*v[2]-u[2]*v[1]] def dot(u, v): return u[0]*v[0]+u[1]*v[1]+u[2]*v[2] def diff(u, v): return [u[0]-v[0], u[1]-v[1], u[2]-v[2]] ao = bpy.context.active_object lineNum = 0 f = open("Obj.cpp", "w") # vertices lineNum = 0 i = 0 l = [] f.write("GLfloat Obj::vtx_src[] = {\n") for v in ao.data.vertices: i += 1 n = v.normal f.write("%f, %f, %f,\n"% (v.co.x, v.co.y, v.co.z)) if i%10 == 0: f.write("// line %d\n" %i) f.write("};\n\n") # normals lineNum = 0 i = 0 l = [] f.write("GLfloat Obj::nml_src[] = {\n") for v in ao.data.vertices: i += 1 n = v.normal f.write("%f, %f, %f,\n"% (n.x, n.y, n.z)) if i%10 == 0: f.write("// line %d\n" %i) f.write("};\n\n") #indices lineNum = 0 i = 0 f.write("GLushort Obj::idx_src[] = {\n") for p in ao.data.polygons: l = [] n = p.normal for ek in p.edge_keys: for v in ek: if v.numerator not in l: l.append(v.numerator) vh = [] for id in l: vh.append(ao.data.vertices[id].co) vv = cross(diff(vh[1], vh[0]), diff(vh[2],vh[0])) if dot(n, vv) < 0.0: l[1], l[2] = l[2], l[1] f.write("%d, %d, %d,\t"% (l[0], l[1], l[2])) i += 1 if i%4 == 0: f.write("\n") lineNum += 1 if lineNum%10 == 0: f.write("// line %d\n" %lineNum) f.write("};\n") f.close()