Merci à l'aide de quelques lecteurs, j'ai une version nouvelle et améliorée de l' Blender Export Script pour Objective-C. Cette nouvelle version fonctionne correctement indépendamment du fait qu'il ya une texture. Si vous avez utilisé de la peinture de vertex, elle exportera les couleurs de vertex. Si vous n'avez ni les couleurs de vertex ou une texture mappée, alors il sera simplement exporter les sommets et les normales. Il mettra également à jour le code de dessin comme appropriées pour les données qui auraient été exportés.
Aussi, de nouvelles avec cette version, vous n'avez pas besoin de trianguler les visages, ni avez-vous besoin d'appliquer des modificateurs. Ceux qui se passera automatiquement à l'exportation, sans affecter votre modèle d'origine. Cela devrait rendre plus facile à mettre à jour et maintenir les modèles que vous utilisez dans vos applications iPhone.
Vous pouvez télécharger le nouveau script à partir du lien ci-dessus. Je suis notamment le script ici pour les curieux:
Remarque d'avertissement: Je n'ai pas testé ce script très soigneusement, de sorte caveat emptor! Corrections et suggestions d'amélioration bienvenue, comme toujours.
Merci à Scott Lyons et Dennis Ippel pour leur Python et Blender smarts API. Je n'aurais pas pu à ce point sans leur aide.
Aussi, de nouvelles avec cette version, vous n'avez pas besoin de trianguler les visages, ni avez-vous besoin d'appliquer des modificateurs. Ceux qui se passera automatiquement à l'exportation, sans affecter votre modèle d'origine. Cela devrait rendre plus facile à mettre à jour et maintenir les modèles que vous utilisez dans vos applications iPhone.
Vous pouvez télécharger le nouveau script à partir du lien ci-dessus. Je suis notamment le script ici pour les curieux:
Remarque d'avertissement: Je n'ai pas testé ce script très soigneusement, de sorte caveat emptor! Corrections et suggestions d'amélioration bienvenue, comme toujours.
#!BPY
"""
Name: 'Objective-C Header (.h)'
Blender: 244
Group: 'Export'
Tooltip: 'Exports header file for use with the OpenGL ES template for iPhone available from http://iphonedevelopment.blogspot.com/'
"""
import Blender
from Blender import *
import bpy
import bpy
import os
def write_obj(filepath):
out = file(filepath, 'w')
sce = bpy.data.scenes.active
ob = sce.objects.active
mesh = Mesh.New()
mesh.getFromObject(ob.name)
editmode = Window.EditMode()
if editmode: Window.EditMode(0)
has_quads = False
for f in mesh.faces:
if len(f) == 4:
has_quads = True
break
if has_quads:
oldmode = Mesh.Mode()
Mesh.Mode(Mesh.SelectModes['FACE'])
mesh.sel = True
tempob = sce.objects.new(mesh)
mesh.quadToTriangle(0) # more=0 shortest length
oldmode = Mesh.Mode(oldmode)
sce.objects.unlink(tempob)
Mesh.Mode(oldmode)
objectname = ob.getData(True)
basename = objectname.capitalize()
out.write('#import "OpenGLCommon.h"\n\n\n')
if (mesh.faceUV):
out.write('static const TexturedVertexData3D %sVertexData[] = {\n' % basename)
for face in mesh.faces:
for (vert, uvert) in zip(face.verts, face.uv):
out.write('\t{/*v:*/{%f, %f, %f}, ' % (vert.co.x, vert.co.y, vert.co.z) )
out.write('/*n:*/{%f, %f, %f}, ' % (vert.no.x, vert.no.y, vert.no.z))
out.write('/*t:*/{%f, %f}' % ( uvert.x, uvert.y ) )
out.write('},\n')
out.write('};\n\n')
elif (mesh.vertexColors):
out.write('static const ColoredVertexData3D %sVertexData[] = {\n' % basename)
for face in mesh.faces:
for (vert, color) in zip(face.verts, face.col):
out.write('\t{/*v:*/{%f, %f, %f}, ' % (vert.co.x, vert.co.y, vert.co.z) )
out.write('/*n:*/{%f, %f, %f}, ' % (vert.no.x, vert.no.y, vert.no.z))
out.write('/*c:*/{%f, %f, %f, %f}' % ( color.r / 255.0, color.g / 255.0, color.b / 255.0, color.a / 255.0) )
out.write('},\n')
out.write('};\n\n')
else:
out.write
out.write('static const VertexData3D %sVertexData[] = {\n' % basename)
for face in mesh.faces:
for vert in face.verts:
out.write('\t{/*v:*/{%f, %f, %f}, ' % (vert.co.x, vert.co.y, vert.co.z) )
out.write('/*n:*/{%f, %f, %f} ' % (vert.no.x, vert.no.y, vert.no.z))
out.write('},\n')
out.write('};\n\n')
if editmode: Window.EditMode(1)
out.write('#define k%sNumberOfVertices\t%i\n' % (basename, len(mesh.faces) * 3) )
out.write('// Drawing Code:\n')
out.write('// glEnableClientState(GL_VERTEX_ARRAY);\n')
if (mesh.faceUV):
out.write('// glEnableClientState(GL_TEXTURE_COORD_ARRAY);\n')
elif (mesh.vertexColors):
out.write('// glEnableClientState(GL_COLOR_ARRAY);\n')
out.write('// glEnable(GL_COLOR_MATERIAL)\n')
out.write('// glEnableClientState(GL_NORMAL_ARRAY);\n')
out.write('// glVertexPointer(3, GL_FLOAT, sizeof(TexturedVertexData3D), &%sVertexData[0].vertex);\n' % basename)
out.write('// glNormalPointer(GL_FLOAT, sizeof(TexturedVertexData3D), &%sVertexData[0].normal);\n' % basename)
if (mesh.faceUV):
out.write('// glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &%sVertexData[0].texCoord);\n' % basename)
elif (mesh.vertexColors):
out.write('// glColorPointer(4, GL_FLOAT, sizeof(ColoredVertexData3D), &%sVertexData[0].color);\n' % basename)
out.write('// glDrawArrays(GL_TRIANGLES, 0, k%sNumberOfVertices);\n' % basename)
out.write('// glDisableClientState(GL_VERTEX_ARRAY);\n')
if (mesh.faceUV):
out.write('// glDisableClientState(GL_TEXTURE_COORD_ARRAY);\n')
elif (mesh.vertexColors):
out.write('// glDisableClientState(GL_NORMAL_ARRAY);\n')
out.write('// glDisable(GL_COLOR_MATERIAL);\n')
out.write('// glDisableClientState(GL_NORMAL_ARRAY);\n\n\n')
out.close()
filename = os.path.splitext(Blender.Get('filename'))[0]
Blender.Window.FileSelector(write_obj, "Export", '%s.h' % filename)Merci à Scott Lyons et Dennis Ippel pour leur Python et Blender smarts API. Je n'aurais pas pu à ce point sans leur aide.
Aucun commentaire:
Enregistrer un commentaire