Panda3D/Manual/Pintar e colorir
Cores e o carregador de modelo
Quando voce cria um modelo 3d no Blender, Max, Maya ou semelhantes, voce pode colorir o modelo dentro do proprio programa. Eu nao estou falando de textura. Eu estou falando de simplesmente setar uma unica cor para o modelo como um todo. Isso e chamado "cor chata". Esses programas de arte tambem permitem que voce pinte cores de vertice: voce pode alterar cada vertice do modelo para uma cor diferente. É claro que as vezes voce nao faz nenhum dos dois, caso em que o modelo é simplesmente branco.
Cada modelo que voce carrega já vem com um atributo de cor. Atributos de cores nao sao usualmente criados pelo programador explicitamente, eles sao normalemnte criados pelo carregador de modelo apenas. Existem tres possiveis atributos de cor criados pelo carregador de modelo:
ColorAttrib.makeVertex() Usado pelo carregador de modelo para indicar que o modelo tem cores de vertice armazenadas em arrays de vertice. ColorAttrib.makeFlat(Vec4(R,G,B,A)) Usado pelo carregador de modelo para indicar que o modelo tem uma cor simples chata. ColorAttrib.makeOff() Usado pelo carregador de modelo para indicar que nenhuma cor particular foi especificada. Essencialmente o mesmo que branco chapado, mas possivelmente um pouco mais rapido para renderizar
Panda combina esses atributos de cores com as texturas. Se voce esta acostumado ao photoshop, voce pode pensar a cor do modelo como a camada do fundo, e as texturas ficam por cima dela. Por padrão cada textura é modulada (multiplicada) pela camada anterior, mas como no GIMP ou photoshop, isso pode ser mudado.
Recolorindo o modelo
Se voce desejar, voce pode manualmente sobrepor o atributo de cor que foi especificado pelo carregador de modelo.
nodePath.setColor(r,g,b,a)
Novamente, esta é uma sobreposição. Se o modelo já tem cores de vertice, elas vão desaparecer: o metodo setColor esta substituindo essas cores por novas. Se o modelo já tiver uma cor chapada, essa sera substituida por uma nova cor chapada.
Deve ser mencionado que o atributo de cor criado pelo carregador de modelo tem baixa prioridade. Isso significa que ate o setColor de prioridade padrao não é suficiente para a sobrepor.
Voce pode remover um setColor anterior usando clearColor
Matizando o Modelo
As vezes, voce nao quer substituir uma cor existente, as vezes, voce so quer matizar as cores existentes. Para isso, voce precisa do setColorScale:
nodePath.setColorScale(r,g,b,a)
essa cor vai ser multiplicad pela cor existente
Voce pode remover setColorScale previas usando clearColorScale Demonstração
Para ver a diferença entre setColor e setColorScale, tente o codigo de exemplo abaixo. Voce precisara do modelo nik-dragon do program de exemplo cartoon shading, uqe ja tem cores de vertice e nao tem texturas
import direct.directbase.DirectStart from pandac.PandaModules import ColorAttrib
- Carrega tres copiasa do dragao nik, que tem cores de vertice
modelo1 = loader.loadModel("nik-dragon") modelo2 = loader.loadModel("nik-dragon") modelo3 = loader.loadModel("nik-dragon")
- Coloca-os na mesma cena
modelo1.reparentTo(render) modelo2.reparentTo(render) modelo3.reparentTo(render)
- Os posiciona da esquerda para direita
modelo1.setPos(-10,50,0) modelo2.setPos( 0,50,0) modelo3.setPos( 10,50,0)
- Modelo 1 sera deixado intacto, para voce ver o original
- Modelo 2 sera recolorido de azul claro
- Modelo 3 sera matizado de azul claro
model2.setColor(0.6, 0.6, 1.0, 1.0) model3.setColorScale(0.6, 0.6, 1.0, 1.0)
run()
Isso produz o seguinte resultado:
O modelo á esquerda é o modelo original, não alterado. Nik usou cores de vertices. O amarelo da barriga, os olhos pretos, a boca vermelha, todas essas cores sao cores de vertices. O que esta no meio foi setColored para uma cor azul-media. Como voce pode ver, setColor completamente substitui as cores de vertice. O da direita foi setColorScaled ate a mesma cor azul-media, mas isso apenas matiza o modelo.
Classes relacionadas
* [ http://panda3d.net/apiref.php?page=ColorScaleAttrib ColorScaleAttrib] * [ http://panda3d.net/apiref.php?page=ColorAttrib ColorAttrib] * [ http://panda3d.net/apiref.php?page=NodePath NodePath]