Você está na página 1de 86

Panda3D Manual: Atributos Render

Render Atributos Bsicos


Depois de carregar um modelo , pode alterar sua aparncia , alterando a sua atributos. Por
exemplo, voc pode aplicar um cor para o modelo, voc pode iluminar com luzes, Voc pode
fazer com que seja obscurecido por nevoeiro, Voc pode faz-lo parcialmente transparenteE
assim por diante . Todos esses atributos so chamados de render.
Coletivamente, todos os atributos de um objeto so chamados de objeto Estado render, Ou s
vezes apenas o objeto do Estado.
Propagao de Atributos
Os atributos podem ser armazenados em qualquer n do grafo de cena , definindo um atributo
de um n automaticamente aplica a esse n , bem como a todos os filhos do n (a menos que
uma substituio , com efeito , mas isso um tpico mais avanado) .
possvel criar esses atributos e atribuir-lhes um n diretamente:

Mas em muitos casos , especialmente com os atributos mais comumente vez , voc no
precisa criar os atributos diretamente como existe uma funo de convenincia em
NodePath (por exemplo, nodePath.setFog ()) Que gerencia a criao de atributos
para voc, haver tambm uma funo correspondente claras sobre NodePath para
remover o atributo (nodePath.clearFog ()).
Atributo Prioridades Render
Cada atributo tem um prioridade. Por padro, que prioridade zero. Isso afeta o valor
de prioridade de herana de atributos.
Seco incompleta
Nota: esta seo est incompleta. Ele ser atualizado em breve .

Lista de todos os atributos
A seguir est uma lista concisa de todas as RenderAttribs apoiado por Panda3D .
documentao adicional pode ser encontrada clicando sobre o nome do RenderAttrib .
AlphaTestAttrib: Oculta parte do modelo , baseado no canal da textura alfa.

AntialiasAttrib: Controla o antialiasing em tela cheia e antialiasing borda do polgono
.
AudioVolumeAttrib: Aplica-se uma escala de volume de udio para sons posicionais.
AuxBitplaneAttrib: Causas shader gerador para produzir dados extra.
ClipPlaneAttrib: corta um pedao do modelo, usando um plano de corte.
ColorAttrib: Tons modelo. S funciona se o modelo no est iluminado.
ColorBlendAttrib: Especifica como as cores so misturadas com o frame buffer, para
efeitos especiais.
ColorScaleAttrib: Cores vrtice modula com uma cor plana.
ColorWriteAttrib: Faz com que o modelo no prejudicar a R, G , B, ou um canal de
framebuffer .
CullBinAttrib: Controla a ordem na qual a geometria torna Panda.
CullFaceAttrib: backfaces Causas ou frontfaces do modelo a ser visvel.
DepthOffsetAttrib: Faz com que o Z-buffer para tratar o objeto como se fosse mais
perto ou mais longe.
DepthTestAttrib: Altera a forma como o Z-buffer afeta o modelo.
DepthWriteAttrib: Controla se ou no o modelo afeta o Z-buffer.
DrawMaskAttrib: Controla quais cmeras podem ver os objetos .
FogAttrib: Faz com que o modelo a ser obscurecida pela nvoa se est longe da
cmera.
LightAttrib: Faz com que o modelo a ser iluminada pelas luzes certas .
LightRampAttrib: permite o mapeamento de tom HDR ou sombreamento de desenhos
animados.
MaterialAttrib: Altera a forma como o modelo reflete a luz .
RenderModeAttrib: Utilizado para permitir processamento wireframe.
RescaleNormalAttrib: possvel desativar a correo automtica de normals unidade
no .
ShadeModelAttrib: Pode causar o modelo aparea facetada , em vez de lisa.
ShaderAttrib: D um controle quase ilimitado, mas difcil de usar.
StencilAttrib: Faz com que o modelo de afectar o buffer estncil, ou ser afetado pelo
buffer estncil.
TexGenAttrib: Faz com que o sistema de sntese de coordenadas de textura para o
modelo.
TexMatrixAttrib: Altera a textura coordenadas existentes.
TextureAttrib: Aplica-se um mapa de textura para o modelo.
TransparencyAttrib: Faz com que o modelo fique parcialmente transparente .

Indocumentados
Infelizmente, o manual Panda3D ainda um trabalho em progresso : h muitos aspectos que
no so totalmente documentado. Esses atributos ainda no so documentadas:
AudioVolumeAttrib , CullBinAttrib , DepthOffsetAttrib , DrawMaskAttrib , RenderModeAttrib ,
RescaleNormalAttrib , ShadeModelAttrib
No entanto, embora o manual no documentar essas classes , a Referncia documentao
no .
Seco incompleta
Nota: esta seo est incompleta. Ele ser atualizado em breve .

Panda3D Manual: Luz

Noes bsicas de iluminao
No mundo real se voc colocar uma luz em um quarto , os objetos na sala so iluminados . Por
exemplo, se voc colocar um candeeiro de mesa em sua sala, a lmpada acende
automaticamente seu sof e sua cadeira. Em um motor 3D, como Panda3D , as luzes no
iluminam as coisas automaticamente. Em vez disso, voc deve dizer a cadeira e sof para ser
iluminado pela lmpada .
Ento, para reiterar , a iluminao de uma cena em Panda3D composto por duas etapas:
1. Criando luzes, e posicion-los dentro da cena .
2. Contando a outros objetos para ser iluminado pelas luzes .
Panda3D define quatro tipos diferentes de objetos de luz : ponto, direcional, ambiente e
holofotes. Cada um desses um n que deve ser dada em algum lugar dentro do grfico da
cena . Como qualquer coisa que voc pe em cena , as luzes tm uma posio e orientao ,
que determinado pelas operaes bsicas grfico cena como setPos (), setHpr (), Etc A
lookAt () mtodo particularmente til para apontar holofotes e das luzes direcionais em
um objeto especfico. O cdigo a seguir insere uma luz direcional cena :
dlight = DirectionalLight('my dlight')
dlnp = render.attachNewNode(dlight)
Note que, ao contrrio de um real, fsico bulbo de luz , os objetos de luz no visvel se
directamente . Embora voc no pode ver uma luz prpria Panda , voc pode ver o efeito que
tem sobre a geometria em torno dele. Se voc quiser fazer uma luz visvel, um truque simples
carregar um modelo simples (como uma esfera ), e me -lo diretamente para a prpria luz .
Criando a luz e coloc-lo no grafo de cena no , por si s , qualquer efeito visvel. Seu
prximo passo informar algum objeto a ser iluminado pela luz . Para fazer isso , use o
nodePath.setLight () mtodo, que acende a luz para o NodePath indicado e tudo abaixo
no grfico de cena.
No caso mais simples , voc quer todas as suas luzes para iluminar tudo o que podem , assim
que voc ativ-los na renda, no topo do grfico de cena:
No caso mais simples , voc quer todas as suas luzes para iluminar tudo o que podem , assim
que voc ativ-los na renda, no topo do grfico de cena:
render.SetLight(plnp)
Voc pode remover a definio de luz de render:
render.ClearLight(plnp)
Voc tambm pode aplicar o SetLight () chamada para um sub -n no grafo de cena, de
modo que uma luz que s afeta um determinado objeto ou grupo de objetos :
sof.SetLight(plnp)

Note que h duas (ou mais) NodePaths envolvidos aqui: a NodePath da luz prpria , que
define a posio e / ou da orientao da luz, e os NodePath (s) em que voc chamar
SetLight (), Que determina o subconjunto do grafo de cena a luz acende. No h nenhuma
exigncia para estes dois NodePaths estar relacionadas de alguma forma.
Lots of Lights : Implicaes Performance
Cada luz desacelera tornando um pouco. Usando uma meia dzia de luzes para iluminar um
objeto no problema de todos. No entanto , se voc usar uma centena de luzes para
iluminar um objeto , esse objeto tornaria lentamente.
Devido a isso, quando voc cria um grande mundo virtual , voc precisa escolher quais as
luzes que afetam objetos . Por exemplo, se voc tivesse um calabouo com cem tochas, no
seria prtico para dizer a cada objeto a ser iluminado por cada tocha. Em vez disso, para
cada objeto na masmorra, voc pode querer procurar o mais prximo de trs ou quatro
tochas, e dizer ao objeto a ser iluminado apenas por aqueles trs ou quatro tochas.
Quando a iluminao por pixel habilitado , luzes so consideravelmente mais caros.
Luzes coloridas
Todas as luzes tm uma cor , que especificado pelo light.setColor ( VBase4 (r, b g ,
a)). A cor padro o branco total : setColor ( VBase4 (1, 1 , 1, 1 )). O componente
alfa largamente irrelevante .
Nota: R, G, B os valores podem ser maiores do que 1 , se voc quiser luzes brilhantes ! No
entanto, voc no pode usar para fazer uma iluminao mais brilhante do que o seu modelo
de cor, textura .
Ponto luzes
Ponto luzes so o tipo de luz mais fcil de entender: um ponto de luz simula a luz que emana
de um nico ponto no espao e brilhando em todas as direes , como uma lmpada muito
pequena luz. A posio de um ponto de luz importante , mas a sua orientao no importa.
plight = PointLight('plight')
plight.setColor(VBase4(0.2, 0.2, 0.2, 1))
plnp = render.attachNewNode(plight)
plnp.setPos(10, 20, 0)
render.setLight(plnp)
Atenuao
Voc pode definir os coeficientes de atenuao , o que faz com que a luz a cair gradualmente
com a distncia. H trs coeficientes de atenuao : A, B , C.
plight.setAttenuation(Point3(A, B, C))
Definir obras coeficientes A e B e C para 0 entre 0 e 1 poo .
plight.setAttenuation(Point3(0, 0, 0.5))
Luzes direcionais
A luz direcional uma onda infinita de luz, sempre na mesma direo , como a luz solar . A
posio da luz direcional no importa, mas sua orientao importante. O padro de luz
direcional est brilhando para a frente (+ Y) , voc pode usar nodePath.setHpr () ou
nodePath.lookAt () gir-lo para enfrentar em uma direo diferente .
dlight = DirectionalLight('dlight')
dlight.setColor(VBase4(0.8, 0.8, 0.5, 1))
dlnp = render.attachNewNode(dlight)
dlnp.setHpr(0, -60, 0)
render.setLight(dlnp)
Luzes Ambient
Uma luz ambiente utilizado para preencher as sombras no lado escuro de um objeto , de
modo que no parece completamente preto. A luz de uma luz ambiente uniformemente
distribuda em todo o mundo , por isso a posio da luz ambiente e orientao so
irrelevantes.
Normalmente voc no deseja criar um ambiente sem luz tambm a criao de um dos outros
tipos de luzes, uma vez que o objeto iluminado apenas pela luz ambiente ser totalmente
plana sombreadas e voc no ser capaz de ver qualquer um dos seus detalhes. Normalmente
, as luzes do ambiente so dadas uma cor bastante cinza escuro, para que eles no dominam
as outras luzes na cena.
alight = AmbientLight('alight')
alight.setColor(VBase4(0.2, 0.2, 0.2, 1))
alnp = render.attachNewNode(alight)
render.setLight(alnp)
Holofotes
Focos representam o tipo mais sofisticado de luz. Um holofote tem tanto um ponto e uma
direo , e um campo de viso . De fato, um holofote contm uma lente , tal como uma
cmara que , a lente deve ser um PerspectiveLens e usado para definir a rea de efeito da
luz (a luz ilumina tudo dentro do campo de viso da lente ).
Note que a palavra Ingls holofotes " uma palavra , ao contrrio de outros tipos de luzes ,
que so duas palavras. Assim, o nome da classe est correctamente escrito " Spotlight ", no"
Spotlight " .
slight = Spotlight('slight')
slight.setColor(VBase4(1, 1, 1, 1))
lens = PerspectiveLens()
slight.setLens(lens)
slnp = render.attachNewNode(slight)
slnp.setPos(10, 20, 0)
slnp.lookAt(myObject)
render.setLight(slnp)
Juntando Tudo
Aqui est um exemplo de iluminao. H uma luz ambiente e duas luzes direcionais
iluminao da cena, e uma luz verde ambiental que afeta apenas um dos pandas.
import direct.directbase.DirectStart
from pandac.PandaModules import *

# Put two pandas in the scene, panda x and panda y.
x = loader.loadModel('panda')
x.reparentTo(render)
x.setPos(10,0,-6)

y = loader.loadModel('panda')
y.reparentTo(render)
y.setPos(-10,0,-6)

# Position the camera to view the two pandas.
base.trackball.node().setPos(0, 60, 0)

# Now create some lights to apply to everything in the scene.

# Create Ambient Light
ambientLight = AmbientLight('ambientLight')
ambientLight.setColor(Vec4(0.1, 0.1, 0.1, 1))
ambientLightNP = render.attachNewNode(ambientLight)
render.setLight(ambientLightNP)

# Directional light 01
directionalLight = DirectionalLight('directionalLight')
directionalLight.setColor(Vec4(0.8, 0.2, 0.2, 1))
directionalLightNP = render.attachNewNode(directionalLight)
# This light is facing backwards, towards the camera.
directionalLightNP.setHpr(180, -20, 0)
render.setLight(directionalLightNP)

# Directional light 02
directionalLight = DirectionalLight('directionalLight')
directionalLight.setColor(Vec4(0.2, 0.2, 0.8, 1))
directionalLightNP = render.attachNewNode(directionalLight)
# This light is facing forwards, away from the camera.
directionalLightNP.setHpr(0, -20, 0)
render.setLight(directionalLightNP)

# Now attach a green light only to object x.
ambient = AmbientLight('ambient')
ambient.setColor(Vec4(0.5, 1, 0.5, 1))
ambientNP = x.attachNewNode(ambient)

# If we did not call setLightOff() first, the green light would add to
# the total set of lights on this object. Since we do call
# setLightOff(), we are turning off all the other lights on this
# object first, and then turning on only the green light.
x.setLightOff()
x.setLight(ambientNP)

#run the example
run()
Shadow Mapping
Quanto verso 1.7.0 , Panda3D oferece suporte mapeamento totalmente automtico sombra
de holofotes e luzes direccionais . Voc pode habilitar sombras chamando setShadowCaster
(). Os ns que recebem sombras precisar ter o Shader Generator ativado , caso contrrio
nenhuma sombra vai aparecer.
# Use a 512x512 resolution shadow map
light.setShadowCaster(True, 512, 512)
# Enable the shader generator for the receiving nodes
render.setShaderAuto()
Note que, embora em geral sombreamento fcil de configurar , voc vai querer ajustar as
configuraes de luz da lente para obter a melhor preciso buffer de profundidade. Use o
setNearFar () mtodo na lente para obter um ajuste perfeito do que est sendo processado
. Alm disso, para luzes direcionais , voc vai precisar ligar para setFilmSize () na lente e
da posio da luz corretamente para que a cmara ir receber uma luz ptima vista da cena.
Alm disso, note que todas as luzes , na verdade tambm uma cmera , assim voc pode
facilmente excluir objetos sendo sombreado (por exemplo, por razes de performance ) por
uso de mscaras cmera.
Se voc tem objetos muito fino, voc pode executar em self-shadowing problemas se a parte
traseira do objeto lana sombras sobre o seu frontside . Voc pode facilmente corrigir isso
atravs da aplicao de uma profundidade de deslocamento para o objeto em questo. A
profundidade de deslocamento de um meio de utilizar um desvio to pequeno quanto
possvel, mas grande o suficiente para fazer a diferena. Isso geralmente deve ser suficiente.
Voc pode chamar setDepthOffset () no NodePath ou usar o profundidade de
compensao escalar no arquivo do ovo. .
leaves.setDepthOffset(1)
Panda3D Manual : Materiais
Prev Topo
Prximo

Pito/C + +

Materiais
Materiais afetam as superfcies dos modelos aparecem quando as luzes so ativadas no Panda.
Estas tm efeitos diversos, tais como a forma como um objeto brilhante aparece , o brilho de
suas cores , etc propriedades do material so combinadas com texturas e iluminao para
obter a aparncia final de um objeto.
Deve ser enfatizado que somente os materiais de trabalho quando as luzes so aplicados a um
objeto. Caso contrrio , os materiais no tm nenhum efeito .
Explicao da Luz
Quando a luz atinge um modelo 3D , a luz reflete fora do modelo. Se no houvesse nenhuma
luz, refletindo o modelo , o modelo parece escuro. A luz, refletindo o modelo o que ele faz
para ter uma tela de cor no-negros. No mundo real , a luz incrivelmente complicado --- to
complicado, que invivel para fazer clculos realistas. Em vez disso, Panda3D deixa em suas
mos, dando-lhe algumas ferramentas bsicas para expressar a quantidade de luz que voc
quer reflectindo em cada superfcie.
As ferramentas fornecidas so luzes e materiais. As luzes so utilizadas para expressar o
quanto a luz impressionante o modelo. Os materiais so utilizados para expressar o quanto
de luz que atinge o modelo refletido.
Panda3D separa a luz que atinge o modelo em duas categorias gerais : no direccional e
direccional. Direcionais de luz a luz que vem diretamente de uma lmpada especial .
Porque ns sabemos onde ele est vindo , ns tambm sabemos que direo ele est vindo.
luz no direcional a luz que talvez veio de algum lugar, saltou -se um pouco , e depois ,
eventualmente, acertar o modelo. Porque ns no sabemos exatamente de onde veio , no
sabemos em que direo ele est vindo. Panda3D alas luz direcional e no direcional
separadamente.
Existem quatro tipos de luzes no Panda3D : ponto, ambiente , difuso e direcional. A luz
ambiente s cria a luz no direcional . As outras trs criam a luz direcional.
Quando a luz atinge a superfcie do modelo, o material que regula a quantidade de que ela
reflete. O material consiste de quatro valores:
Ambient Scattering: regula o quanto a luz refletida no direcional . luz no
direcional sempre assumida a vir de todas as direes, e ele sempre se reflete em
todas as direes igualmente.
Espalhamento difuso: regula a quantidade de luz direcional dispersa. Espalhamento
significa que a luz pode ter chegado a partir de uma determinada direo , mas ele
rebate o modelo em todas as direes . Espalhamento de luz parece bater uma
parede pintada de branco.
Reflexo Especular: regula o quanto de luz direcional refletida. Reflexo especular
se parece com a luz que atinge um pedao de plstico brilhante : voc pode ver
vagamente uma reflexo da luz do plstico , mas a reflexo parece apenas um ponto
brilhante .
Emissividade: regula a quantidade de luz na superfcie produz a si mesmo , para
superfcies brilhantes como o brilho de non ou varas.
O comportamento padro de comportamento e explicito
Se o modelo no tem um material explcito, no tem uma cor lisa, e no tem as cores de
vrtice, o comportamento o seguinte:
1. Toda a luz refletida no direcional sem cor .
2. Toda a luz direcional espalhada sem cor .
3. Nenhum reflexo especular ocorre.
4. Nenhum emissivity ocorre.
Se o modelo no tem um material explcito, mas ele tem uma cor lisa ou uma cor de vrtice ,
o comportamento o seguinte:
1. Toda a luz refletida no direcional aps ser modulada pela cor do modelo.
2. Toda a luz direcional dispersado aps ser modulada pela cor do modelo.
3. Nenhum reflexo especular ocorre.
4. Nenhum emissividade ocorre.
Quando voc define um material explcita em um objeto, o comportamento o seguinte:
1. Toda a luz refletida no direcional aps ser modulada pela cor explcita ambiente.
2. Toda a luz direcional dispersado aps ser modulada pela cor difusa explcito.
3. Toda a luz direcional refletida especularmente aps ser modulada pela cor explcita
especular.
4. A cor emissiva explcito adicionado luz.
possvel misturar e combinar explcita com o comportamento padro. Por exemplo , voc
pode especificar uma cor especular explcito , mas no especificar um ambiente explcita,
difusa, ou a cor emissiva. Se voc fizer isso , o comportamento seria:
1. Toda a luz refletida no direcional aps ser modulada pela cor do modelo.
2. Toda a luz direcional dispersado aps ser modulada pela cor do modelo.
3. Toda a luz direcional refletida especularmente aps ser modulada pela cor explcita
especular.
4. Nenhum emissividade ocorre.
Criao e utilizao de materiais
Para utilizar materiais explcitos, importar as matrias do mdulo quando voc comear o seu
primeiro script. Ento, a criao de materiais uma questo de criar instncias da classe de
Material e definindo as propriedades relevantes:
from pandac.PandaModules import Material
from pandac.PandaModules import VBase4
#VBase4 has to be imported in order to set colors in the methods

myMaterial = Material()
myMaterial.setShininess(5.0) #Make this material shiny
myMaterial.setAmbient(VBase4(0,0,1,1)) #Make this material blue

myNode = loader.loadModel("panda") #Load the model to apply the material to
myNode.setMaterial(myMaterial) #Apply the material to this nodePath
Material Properties
A tabela a seguir detalhes as propriedades disponveis em um material, seus efeitos , bem
como o mtodo setter relevantes. A maioria destas propriedades tm adicional obter e claro
os mtodos tambm.
Propriedade Efeitos Setter Mtodo
Ambiente
Esta a cor do objeto como ele aparece na
ausncia de luz direta. Esta ser a
multiplicado por todas as luzes do ambiente
em vigor sobre a matria para definir a cor
base.
material.setAmbient (
VBase4 (R , G , B, A))
Difuso
Esta a cor principal de um objeto , a cor do
objeto como ele aparece na luz directa, na
ausncia de destaques. Esta ser
multiplicado por todas as luzes em vigor
sobre a matria para obter a cor de partes do
objeto iluminado pelas luzes .
material.setDiffuse (
VBase4 (R , G , B, A))
Emisso
Esta a cor do objeto como ele aparece na
ausncia de qualquer whatsover luz, incluindo
luz ambiente. como se o objeto est
brilhando por essa cor (mas claro que no
vai iluminar objetos vizinhos)
material.setEmission (
VBase4 (R , G , B, A))
Brilho
Este controla o tamanho da mancha realce
especular. Em geral, maior nmero de
produzir um menor realce especular , o que
torna o objeto aparecer mais brilhante .
Nmeros menores produzem um maior
destaque , o que torna o objeto parece menos
brilhante.
material.setShininess (
<float> )
Especular Esta a cor de realce de um objeto : a cor material.setSpecular (
das reflexes pequeno destaque . VBase4 (R , G , B, O ))

Em ingls:
Property Effects Setter Method
Ambient
This is the color of the object as
it appears in the absence of
direct light. This will be the
multiplied by any ambient lights
in effect on the material to set its
base color.
material.setAmbient(VBase4(R,G,B,A))
Diffuse
This is the primary color of an
object; the color of the object as
it appears in direct light, in the
absence of highlights. This will
be multiplied by any lights in
effect on the material to get the
color in the parts of the object
illuminated by the lights.
material.setDiffuse(VBase4(R,G,B,A))
Emission
This is the color of the object as
it appears in the absence of any
light whatsover, including
ambient light. It is as if the
object is glowing by this color
(although of course it will not
illuminate neighboring objects)
material.setEmission(VBase4(R,G,B,A))
Shininess
This controls the size of the
specular highlight spot. In
general, larger number produce
a smaller specular highlight,
which makes the object appear
shinier. Smaller numbers
produce a larger highlight, which
makes the object appear less
shiny.
material.setShininess(<float>)
Specular
This is the highlight color of an
object: the color of small
highlight reflections.
material.setSpecular(VBase4(R,G,B,A))
Other Material Methods
Alm dos mtodos setter indicado acima, voc tambm pode obter as propriedades dos
materiais com os seus mtodos get , como material.getShininess () ,
material.getDiffuse (), Etc
Propriedades tambm podem ser redefinido usando os mtodos claros:
material.clearAmbient (),material.clearSpecular (), Brilho , etc no tem um mtodo
claro .
Alm disso, voc pode verificar se um material tem uma propriedade com o tem mtodos :
material.hasAmbient () , material.hasEmission (), Etc
Os materiais tm dois outros mtodos que no foram cobertos ainda, SETLOCAL () e
setTwoside (). controles SETLOCAL se usar cmera em relao especulares ou especular
ortogonais destaques. Isso deve ser definido como True , a menos de uma cmera de projeo
ortogonal est em uso. controles setTwoside se a iluminao deve aparecer em ambos os
lados de um polgono. Ambos os mtodos tm obter mtodos equivalentes .
Classes relacionadas
Material
MaterialCollection
Panda3D Manual: Teste de profundidade e de
profundidade Escrever
Prev Topo
Prximo

Pito/C + +

Ativar ou desativar o buffer de profundidade
Por padro, o buffer de profundidade habilitado e funciona normalmente. possvel
desativar o uso do buffer de profundidade. Tambm possvel alterar o
comportamento do buffer de profundidade.
A coisa mais comum que queremos fazer desativar a profundidade escrever. Isto
significa que a geometria ainda ser testado contra o buffer de profundidade , mas
isso no afetar o buffer de profundidade . Isto frequentemente usado na
renderizao objetos como estas partculas que so transparentes. Para ativar ou
desativar a profundidade escrever , use:

nodePath.setDepthWrite(False) # Disable
nodePath.setDepthWrite(True) # Enable
Tambm pode ser desejvel para desativar o teste de profundidade . Isto significa que a
geometria paga qualquer tipo de ateno para o contedo do buffer de profundidade . Isto
usado frequentemente para tornar as coisas como displays "heads -up , que no tm relao
com a profundidade em 3D da cena. Para ativar ou desativar a profundidade de teste , use:

nodePath.setDepthTest(False) # Disable
nodePath.setDepthTest(True) # Enable
Alterando o buffer de profundidade
Ocasionalmente, desejvel alterar a funcionalidade do buffer de profundidade.
Normalmente, o buffer de profundidade s torna as coisas que esto na frente, mas pode ser
feito para tornar as coisas que esto em volta, ou igual . Isto raramente utilizado , mas
pode ser importante para determinados algoritmos incomuns como volumes de sombra.
Para fazer isso , voc precisar usar o DepthTestAttrib diretamente, em uma das seguintes
variantes :
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MNone))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MNever))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MLess))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MEqual))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MLessEqual))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MGreater))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MGreaterEqual))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MNotEqual))
nodePath.setAttrib(DepthTestAttrib.make(RenderAttrib.MAlways))
Profundidade Seleo
Ao virar teste profundidade fora, s vezes desejvel usar a classificao de profundidade
em seu lugar. Classificando a profundidade controlada pelo sistema de abate , o que pode
ser controlado pelo CullBinAttrib .
Transparncia
Algumas definies do TransparencyAttrib tambm pode afetar o teste de profundidade .
Panda3D Manual: Nevoeiro

Nevoeiro Basic
Para ativar a neblina, criar um objeto da classe Nevoeiro, E depois aplic-lo usando o
setFog operador:
myFog = Fog("Fog Name")
myFog.setColor(R,G,B)
myFog.setExpDensity(Float 0 to 1)
render.setFog(myFog)
No entanto, h mais aqui do que aparenta. Ns criamos uma n de nevoeiro, Que vai para o
grafo de cena. Portanto, o nevoeiro de uma posio , um lugar onde a neblina (
conceitualmente) mais grossa .
Se o objeto de nevoeiro , no pai no grafo de cena ( no exemplo anterior , por exemplo ),
ento a posio do nevoeiro ignorado, eo nevoeiro cmera relativa. Da mesma forma, se o
nevoeiro exponencial , a posio do nevoeiro ignorado, eo nevoeiro cmera relativa.
O setFog directiva cria um objeto atributo nevoeiro. Como em qualquer Render Attribute, O
atributo de nevoeiro afeta o n que est ligado a ela e todos os ns abaixo dele no grafo de
cena. Assim, voc pode facilmente causar apenas um subconjunto dos objetos (ou apenas um
modelo nico ) a ser afetado pela nvoa , chamando setFog na raiz do subgrafo que voc
quer ser afetados. Para remover o atributo de nevoeiro depois, usar o clearFog directiva:
render.clearFog()
Quando voc tiver neblina na verdade, muitas vezes desejvel definir a cor de fundo para
coincidir com o nevoeiro :
base.setBackgroundColor( myFogColor )
Modos de Nevoeiro
Existem dois modos de nevoeiro em Panda: Fog.MExponential e Fog.MLinear. Voc pode
alternar o modo de um Nevoeiro objeto usando fog.getMode () e fog.setMode (
Fog.Mode ). Esta troca de modo explcito , no normalmente necessrio , como Nevoeiro
mtodos implicitamente mudar o modo para voc.
A Nevoeiro objeto em um Panda3D n que pode ser pai no grafo de cena com uma posio ,
cor e orientao , como qualquer outro n ( importante, Nevoeiro uma subclasse de
PandaNode, E no de NodePath) (No Nevoeiro ns temos uma escala ?).
A posio de um Nevoeiro n do grafo de cena no determina quais objetos neblina afeta,
Determina a origem e direo da nvoa quando ele est em modo linear. Quando um n est
no modo de nevoeiro exponencial a sua posio e orientao no grafo de cena so
irrelevantes. De qualquer maneira , um Nevoeiro n deve ser ativado pelo telefone
nodePath.setFog ( fogNode ) em alguns NodePath no grafo de cena. Que NodePath
chamar o setFog mtodo em determinar quais partes da cena ser fogged : que NodePath e
todos os seus filhos .
Nevoeiro Linear
Este o modo padro. Neste modo, o posio e orientao de um Nevoeiro n so
importantes. Um modo linear Nevoeiro n deve primeiro ser pai no grafo de cena, ento
ativado ligando setFog ( fogNode ) em alguns NodePath no grafo de cena.
Instalao de um n de nevoeiro lineares na origem :
colour = (0.5,0.8,0.8)
linfog = Fog("A linear-mode Fog node")
linfog.setColor(*colour)
linfog.setLinearRange(0,320)
linfog.setLinearFallback(45,160,320)
render.attachNewNode(linfog)
render.setFog(linfog)
No modo linear , o comeo e opaco distncias do nevoeiro so definidos como desvios ao
longo da frente local ( + Y) do n de nevoeiro. O incio distncia a distncia entre o n de
nevoeiro em que o fog comear a ter efeito, e opaco da distncia a distncia entre o n de
nevoeiro em que o nevoeiro ser totalmente opaco . Da leitura da pgina API para o
Nevoeiro class, it sounds as if beyond this opaque point there is no fog (rather than
continuing opaque fog up to the location of the fog node as you might expect): "the fog will
be rendered as if it extended along the vector from the onset ponto a ponto opaco ".
Estas configuraes podem ser modificadas utilizando os mtodos getLinearOnsetPoint (),
getLinearOpaquePoint (), setLinearOnsetPoint (float x , y, z),
setLinearOpaquePoint (pos Point3D ) e setLinearRange (float incio , float
opaco) de Nevoeiro.
H um problema com hardware de processamento de nevoeiro , o que significa que o nevoeiro
linear repartio pode desaparecer e , dependendo do ngulo a partir do qual ele visto :
"O efeito de nvoa subjacente apoiado por hardware geralmente apenas uma dimenso, e
devem ser prestados com base na distncia linear em relao ao plano da cmera. Assim, o
efeito no-mundo - mais eficaz quando o vetor de nevoeiro do ponto de incio para opaco
ponto mais quase paralelo ao vetor da cmara ocular. Como o ngulo entre o vetor de
nevoeiro e os aumentos vetor olho , a preciso do efeito diminui, at um colapso total do
efeito em um ngulo de 90 graus. "
O Nevoeiro mtodo setLinearFallback (float ngulo, incio float , float opaco)
define como a neblina deve ser tomada quando os efeitos de nevoeiro diminui dessa forma.
ngulo o ngulo de viso mnimo ( ngulo entre a direo da cmera e direo de nevoeiro
) na qual o efeito de recurso ser empregado. comeo e opaco especificar cmera em relao
aparecimento e as distncias opaco , que ser cado novamente, substituindo o Nevoeiro
incio prprio n e as distncias opaco.
O setLinearFallback (float ngulo, incio float , float opaco) soluo s ficam
bem em determinadas situaes, por exemplo, quando o nevoeiro profundo dentro de uma
caverna escura. Portanto, em geral , neblina modo exponencial mais til do que o padro
de nevoeiro modo linear.
Nevoeiro Exponencial
No modo de nevoeiro exponencial a posio e orientao do seu n de nevoeiro no grafo de
cena eo incio e pontos opacos so ignorados (na verdade voc nem precisa colocar o n de
nevoeiro no grafo de cena ). Instead, fog is rendered camera relative according to a density
factor: the fog begins at the camera and continues to infinity, with an exponentially
increasing density determined by the density factor. Os movimentos de nevoeiro com a
cmera, a posio da cmera e as mudanas de orientao:
"O ponto de incio eo ponto opaco no so usados , eo efeito de nevoeiro baseado no valor
especificado para set_exp_density (), E isso no importa para qual objeto o n do
nevoeiro pai , ou se ele pai em qualquer lugar em todos ".
O fog.setExpDensity (float) mtodo determina o valor da densidade utilizada para
clculos de nevoeiro exponenciais.
Voc ativar um efeito de nvoa exponencial chamando o setFog ( Fog ) mtodo de
NodePath, Por exemplo: render.setFog ( myFog ):
Instalao alguns nevoeiro cena escala exponencial:
colour = (0.5,0.8,0.8)
expfog = Fog("Scene-wide exponential Fog object")
expfog.setColor(*colour)
expfog.setExpDensity(0.005)
render.setFog(expfog)
base.setBackgroundColor(*colour)
A ltima linha no exemplo acima no realmente afetar o nevoeiro , no entanto, que
geralmente fica melhor se a cor de fundo de cena coincide com a cor do nevoeiro.
Desde setFog chamado render que os efeitos da cena inteira. setFog pode to facilmente
ser chamado em alguns outros NodePath eo nico efeito que ser NodePath e seus filhos.
O efeito nevoeiro expontential pode ser desligado usando novamente clearFog:
render.clearFog()
Alpha Testing
O teste alfa atributo determina se ou no parte de um n ser processado com base no valor
alfa de sua textura. Isso particularmente til para a renderizao de geometria complexa
em profundidade ou stencil buffer com um carto de textura ao invs de criar explicitamente
as formas.
Este teste diferente do processamento em relao ao valor de transparncia alfa. Caso voc
defina um teste alpha atributo em um n que renderizao para o buffer de cor, voc pode
ser surpreendido com o resultado. Todos os pixels que passar no teste alfa ser processado
como se nenhum teste havia sido realizado , incluindo a sua transparncia e adequada pixels
que falhar no teste no sero prestados a todos.
Lembre-se de definir a prioridade do seu atributo para substituir qualquer teste alfa outros
atributos herdados maior no grafo de cena.
No exemplo abaixo , criamos um atributo que causaria objetos para renderizar somente se o
seu valor alfa inferior a um quarto intensidade .
lowPassFilter = AlphaTestAttrib.make(RenderAttrib.MLess,0.25)
E agora , esse atributo pode ser adicionado a um n para permitir a ao.
nodePath.setAttrib(lowPassFilter)
Seco incompleta
Nota: esta seo est incompleta. Ele ser atualizado em breve .
Cor Escrever Mscaras
Cor escrever mscaras permitem que voc escreve para o bloco vermelho, verde, azul, ou
canais alfa do framebuffer . Isto no um recurso freqentemente usado, mas tem algumas
aplicaes :
Ao usar vermelho-azul culos 3D , voc pode querer processar a imagem vermelha ,
ento a imagem azul. (Na verdade , o Panda utiliza esta tcnica automaticamente
quando voc definir vermelho-azul- estreo 1 em seu arquivo Config.prc ).
Battletech Battle Pods ligar 3 monitores em preto-e - branco para um nico R , G, B
sada da placa de vdeo ( muito !) Com a ajuda de mscaras escrever cor , voc pode
atualizar um monitor individual.
s vezes, se quer armazenar os dados no canal alfa do framebuffer . Usando uma
mscara de cor pode evitar acidentalmente sobrescrever os dados.
Usando uma mscara cor - escrever no livre. Durante o processamento normal, cada pixel
de escrita para o buffer de quadro exige uma memria escrever. Com uma mscara cor -
activa , uma memria de leitura -modificao-gravao do ciclo necessrio, que mais caro
.
Por padro , a cor escrever mscaras esto desligados.
Ligar a Mscara de Cor
Para habilitar escreve a todos os canais do framebuffer , use isto:
bits = ColorWriteAttrib.CAlpha
bits |= ColorWriteAttrib.CRed
bits |= ColorWriteAttrib.CGreen
bits |= ColorWriteAttrib.CBlue
nodePath.setAttrib(ColorWriteAttrib.make(bits))
Para desativar escreve para um ou mais canais , omita esse bocado . Voc tambm pode usar:
nodePath.setAttrib(ColorWriteAttrib.make(ColorWriteAttrib.CAll))

Para permitir que todos os bits.
Antialiasing
O antialias atributo de um n controla o tipo de suavizao aplicada para esse n. Para
escolher uma das vrias formas de anti-aliasing , invocar uma das seguintes variantes :
np.setAntialias(AntialiasAttrib.MNone)
np.setAntialias(AntialiasAttrib.MPoint)
np.setAntialias(AntialiasAttrib.MLine)
np.setAntialias(AntialiasAttrib.MPolygon)
np.setAntialias(AntialiasAttrib.MMultisample)
np.setAntialias(AntialiasAttrib.MAuto)
Em geral, quando tornar modelos poligonais , antialiasing multisample parece melhor . No
entanto, quando as linhas e pontos de prestao , que geralmente fica melhor para escolher
um dos modos de antialiasing especializados. O Mauto configurao seleciona
automaticamente o tipo que geralmente funciona melhor para a geometria em questo.
Assim, se voc quiser ativar antialiasing em toda a cena , basta usar:
render.setAntialias(AntialiasAttrib.MAuto)

render.setAntialias(AntialiasAttrib .Mauto)
Para que multisample antialiasing para o trabalho, voc tem que ter multisample bits
disponvel na sua framebuffer . Para solicitar este , acrescentar:
multisample framebuffer -1
multisamples 2
ao seu arquivo Config.prc . Note que nem todas as placas grficas tm esta capacidade. Voc
tambm pode solicitar multisamples mais , como 4 ou 8 , dependendo da sua placa grfica. Se
o seu carto pode fornecer amostras adicionais , que produz um anti-aliasing de alta
qualidade , a um custo pequeno para tornar o tempo.
A funo clearAntialias pode ser usado para remover a antialias configurao. A funo
setAntialias tem um parmetro de prioridade opcional, para controlar substitui atributo.
Aviso geral sobre Clip Planes
A maioria dos motoristas faz um trabalho muito pobre de planos de execuo do grampo.
Alm disso , a maneira que os avies clip combinar com shaders podem ser imprevisveis . O
uso de avies clipe no recomendado. possvel emular avies clip em um sombreador
usando o descartar instruo.
Seco incompleta
Nota: esta seo est incompleta. Ele ser atualizado em breve .
Cor e modelo do Loader
Quando voc cria um modelo em 3D Max, Maya , ou algo parecido , voc pode colorir o
modelo certo no programa de modelagem. Eu no estou falando sobre o uso de uma textura.
Estou falando apenas definir uma cor nica para o modelo como um todo. Isso chamado de
cores "flat ". Estes programas tambm permitem a arte de " pintar cores vrtice ": voc pode
colorir cada vrtice do modelo de uma cor diferente. Claro que, s vezes voc nem , caso em
que o modelo apenas um branco.
Cada modelo de carregar j tem um atributo de cor . Atributos de cor normalmente no so
criados explicitamente pelo programador , que so normalmente criados pelo gestor nico
modelo . Existem trs cores possveis atributos criado pelo gestor de modelo:
Mtodo Explicao
ColorAttrib.makeVertex ()
Usada pelo gerenciador de modelo para indicar que o
modelo tem cores vrtice armazenados em seus painis
de vrtice.
ColorAttrib.makeFlat (
Vec4 (R , B G , A))
Usada pelo gerenciador de modelo para indicar que o
modelo tem uma cor plana.
ColorAttrib.makeOff () Usada pelo gerenciador de modelo para indicar que
nenhuma cor em particular foi especificado.
Essencialmente o mesmo em branco liso, mas
possivelmente um pouco mais rpido para processar.
Panda combina os atributos de cor com as texturas . Se voc est acostumado a photoshop,
voc deve pensar o modelo de cor como fundo (background) da camada, e as texturas que vo
acima . Por padro, cada textura modulada (multiplicado ) com a camada anterior, mas
como no photoshop, que pode ser mudado .

Recolorir Modelo
Se desejar, voc pode substituir manualmente o atributo de cor que foi especificada pelo
gestor do modelo.
nodePath.setColor (r, b g , a)
Novamente, esta uma substituir. Se o modelo j tinha cores vrtice , estes vo desaparecer
: o setColor mtodo substituir as cores com um novo. Se o modelo j tinha uma cor lisa,
que ser substitudo com a nova cor lisa.
Refira-se que o atributo cor criado pelo carregador modelo tem baixa prioridade. Isso
significa que mesmo um padro de prioridades setColor o suficiente para substitu-lo .
Voc pode remover uma verso anterior setColor uso clearColor.
Matizar o modelo
s vezes, voc no quer substituir a cor existente , s vezes , voc quer matiz as cores
existentes. Para isso, voc precisa setColorScale:
import direct.directbase.DirectStart
from pandac.PandaModules import ColorAttrib

# Load three copies of Nik's dragon, which has vertex colors.
model1 = loader.loadModel("nik-dragon")
model2 = loader.loadModel("nik-dragon")
model3 = loader.loadModel("nik-dragon")

# Put them in the scene.
model1.reparentTo(render)
model2.reparentTo(render)
model3.reparentTo(render)

# Arrange them left-to-right
model1.setPos(-10,50,0)
model2.setPos( 0,50,0)
model3.setPos( 10,50,0)

# Model 1 will be left alone, so you can see the original.
# Model 2 will be recolored light blue.
# Model 3 will be tinted light blue.
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 da esquerda o modelo original, inalterado. Nik usou cores vrtice todo . O
amarelo da barriga , os olhos negros, boca vermelha , estas so todas as cores de vrtice. O
do meio tem sido setColored uma cor meio azul. Como voc pode ver , o setColor substitui
totalmente a cores de vrtice. A da direita foi bas setColorScaleed para a mesma cor azul-
mdio , mas apenas o modelo de matizes .
Classes relacionadas
ColorScaleAttrib
ColorAttrib
NodePath
Backface e Frontface Abate
Por padro, o Panda3D automaticamente abates (no processar ) backfaces de
polgonos. Em outras palavras, o polgono age como um espelho : voc pode v-lo de
um lado , mas do outro lado , ver -through. backface abate uma otimizao de
performance muito til. Sem ele , o motor 3D teria para tornar o dentro da superfcie
de modelos 3D. Uma vez que esta superfcie no visvel qualquer forma , isso
totalmente desperdiado trabalho. Desde que a superfcie do interior igual
superfcie da parte externa , isto aproximadamente o dobro da quantidade de
trabalho da placa de vdeo tem que fazer. por isso que backface abate ativado por
padro .
Curiosamente, isso significa que se voc mover a cmera dentro de um modelo
fechado em 3D, normalmente voc pode ver para fora. Isso realmente muito mais
conveniente do tempo.
No entanto, existem casos em que voc quer ser capaz de ver backfaces . H tambm
casos muito raros, quando voc no quero ver front- faces. Portanto, backface e
abate frontface pode ser controlado.
Ateno: inexperiente modeladores 3D , por vezes, criar modelos com os polgonos
que enfrentam interior, Ou seja , o lado visvel do polgono est no interior do
modelo 3D e ver o lado atravs do lado de fora . Como resultado, o modelo 3D pode
parecer muito estranho - que pode ter buracos, ou ele pode olhar de dentro para fora
. Desligar backface abate pode classificar de "corrigir" estes modelos, a um alto custo
: em primeiro lugar , faz-lhes render um meia mais rpido, e segundo , faz com que
os artefatos de iluminao estranho (porque a placa de vdeo o clculo da
iluminao para o interior do modelo, no de fora ). Esta no uma soluo real para
a modelagem 3D ruim: a correo s real para fazer os modelos 3D corretamente
em primeiro lugar.
Em outras palavras, no alteram a backface frontface abate ou menos que voc
esteja usando um algoritmo que exige, como sombras stencil.
Rendering Dupla Face
H uma maneira rpida de tornar um determinado NodePath em sua cena de dupla
face, o que significa que no o abate realizado em todos e os dois lados so visveis
, sem hassling com attribs :
nodePath.setTwoSided(True)
Se voc quiser um controle mais avanado sobre o sacrifcio que voc pode querer
olhar para o CullFaceAttrib :
Controlando Backface e Frontface Abate
Existem trs definies vlidas para abate :
nodePath.setAttrib(CullFaceAttrib.make(CullFaceAttrib.MCullNone))
nodePath.setAttrib(CullFaceAttrib.make(CullFaceAttrib.MCullClockwise))
nodePath.setAttrib(CullFaceAttrib.make(CullFaceAttrib.MCullCounterClockwise))
Nenhum significa que todas as faces so visveis , tanto para trs e da frente. No sentido
horrio, a configurao padro , ele faz backfaces de ser abatidos. Sentido anti-horrio o
cenrio inverso , provoca frontfaces de ser abatidos.
Panda3D Manual: Luz Rampas
Prev Topo
Prximo

Pito/C + +

Light Rampas
No padro OpenGL e DirectX de iluminao , os clculos que se seguem so realizadas:
o valor calculado de iluminao
fixada ao intervalo 0-1
combinado com as texturas
fixada ao intervalo 0-1 novamente
ele escrito para o frame buffer
Este processo contm dois grampos. O LightRampAttrib um meio de especificar que voc
deseja substituir esses dois operadores de aperto com algo um pouco mais esperto. Isto
particularmente relevante para dois algoritmos principais grficos : HDR de mapeamento de
tom e de sombreamento de desenhos animados.
Deve ser enfatizado que as rampas de luz tem efeito a menos que a iluminao por pixel
ativado via o gerador de shader.
HDR de mapeamento de tom
Em HDR mapeamento de tom , a braadeira primeiro totalmente removido , eo segundo
substitudo pelo operador de mapeamento de tom . O tom mapas mapeamento operador
valores de brilho na faixa de 0 a infinito novos valores de brilho na gama 0-1, no entanto, f-
lo sem aperto. Para ativar o HDR mapeamento de tom , use um dos seguintes procedimentos:
np.setAttrib(LightRampAttrib.makeHdr0())
np.setAttrib(LightRampAttrib.makeHdr1())
np.setAttrib(LightRampAttrib.makeHdr2())
O mapeamento de tom HDR2 operador um operador familiar que usado em muitos
sistemas. Tem a desvantagem de que tende a reduzir o contraste muito:
FINAL_RGB = RGB () / (RGB + 1)
O operador de mapeamento HDR1 tom similar , mas atribui o intervalo de mais de contraste
com brilhos no intervalo 0-1, e menos de brilho na faixa de 1 at infinito . Isso rende uma
cena de alto contraste , mas com mais washout :
FINAL_RGB = (RGB ^ 2 + RGB) / (RGB ^ 2 + RGB + 1)
O operador de mapeamento de tom HDR0 atribui ainda mais a gama de contraste disponvel
para brilhos na faixa de 0-1. Isto ainda mais contrastantes , mas com ainda mais washout :
FINAL_RGB = (RGB ^ 3 + 2 + ^ RGB RGB) / (RGB + RGB ^ 3 ^ 2 + RGB + 1)
Cartoon sombreado ( iluminao Quantized )
Na sombra dos desenhos animados, o primeiro grampo removido por completo, eo segundo
substitudo por uma funo de quantizao. Isso substitui um gradiente contnuo de valores de
brilho com um conjunto discreto de nveis de luz. Esta funo s se aplica a quantizao luzes
direcionais , no os ambientes.
Para ativar a iluminao quantizado, use um dos seguintes :
np.setAttrib(LightRampAttrib.makeSingleThreshold(t0, l0))
np.setAttrib(LightRampAttrib.makeDoubleThreshold(t0, l0, t1, l1))
Em um sistema de limite nico, o brilho da contribuio de iluminao difusa comparada
com o limiar t0. Se o limite no for cumprido , a contribuio da luz difusa eliminado. Se
ela for cumprida , o brilho do pixel normalizado ao nvel especificado l0.
Em um sistema de limite de duas vezes , o brilho da contribuio de iluminao difusa
comparado com os limiares t0 e t1. Se no for atingido, a contribuio luz difusa
eliminado. Se ela for cumprida , o brilho do pixel normalizada , quer l0 ou l1, Dependendo
do limiar foi aprovada.
Futuro rampas Light
Estamos interessados em saber se existem outras rampas luz que voc gostaria de ver . Em
caso afirmativo , informe-nos sobre os fruns.
Auxiliar de Controle bitplane
O framebuffer contm sempre uma cor e um bitplane bitplane profundidade. Ela tambm
pode ter um estncil ou bitplane bitplane acumulao. Alm disso, se um framebuffer
render a textura , pode ter bitplanos auxiliar. Estes bitplanos auxiliar pode ser usado para
armazenar mais ou menos arbitrria de dados definidos pelo usurio.
Quando a iluminao por pixel ativado via o gerador de shader, O gerador de
sombreamento podem ser feitas para produzir dados extra no bitplanos auxiliares. Isto feito
definindo uma AuxBitplaneAttrib :
np.setAttrib(AuxBitplaneAttrib.make(bits))
Onde bits um conjunto de bits que indica o que deve ser escrito no bitplanos auxiliares.
Embora o canal framebuffer do alfa no tecnicamente um bitplane auxiliares. No entanto,
uma vez que no geralmente usado para armazenar todos os dados de valor, tambm pode
ser pensado como uma bitplane auxiliares: um lugar para armazenar dados definidos pelo
usurio .
Quando o gerador de shader no est ativado, este attrib no tem efeito.
Valores que podem ser solicitadas
The following is a list of bits that can be passed to AuxBitplaneAttrib.make:
AuxBitplaneAttrib.ABOGlow: cpia do mapa brilho (aka mapa de auto-iluminao )
para o canal alfa do framebuffer . Geralmente este um preldio para a execuo de
um filtro de flor sobre a cena.
AuxBitplaneAttrib.ABOAuxNormal: Loja da cmara espao normal da superfcie do
polgono nos canais RGB da bitplane primeiro auxiliar. Isto frequentemente usado
para ajudar a detectar arestas em um filtro de tinta cartoon.
AuxBitplaneAttrib.ABOAuxGlow: cpia do mapa brilho (aka mapa de auto-iluminao
) para o canal alfa do bitplane primeiro auxiliar.
Panda3D Manual: Teste Stencil / Write Attribute
Prev Topo
Prximo

Pito/C + +

O StencilAttrib usado para testar e gravar o buffer estncil. Note-se que ambas as
aes podem ser realizadas em simultneo com um nico StencilAttrib .
O buffer de estncil um buffer de grficos auxiliares, alm da cor mais conhecidos e
buffers de profundidade. Ele fornece uma mscara per- pixel para o pipeline de
processamento que pode ser explorada seletivamente tornar objetos ou partes de
objetos . As aplicaes tpicas do stencil buffer incluem mscara binria,
sombreamento e reflexes planar.
Geralmente, usando o buffer estncil envolve a criao de alguns objetos que no so
prestados para o buffer de cor. Sua contribuio para a cena renderizada
proporcionar uma fronteira invisvel que pode ser usado para ligar o buffer de cores
de processamento e fora de outros objetos na cena. Pense nisso como um carto de
corte por meio do qual o mundo visto .
Durante uma comparao stencil, o valor de referncia StencilAttrib comparado
com o valor armazenado no buffer de estncil. A ordem importa aqui. Por exemplo,
considere a funo StencilAttrib.SCFGreaterThan comparao com o valor de
referncia r = 1. Um pixel passa o teste de estncil , se r> S
p
, Onde S
p
o valor no
buffer de estncil em pixel p. Objetos de valores que contribuem para o buffer
estncil que sero lidos por funes StencilAttributes outros comparao deve ser
processado em primeiro lugar, ou resultados inesperados ir ocorrer. Ver Como
controlar Ordem Render.
O buffer de estncil desativado por padro. Para poder utilizar StencilAttribs , voc
deve adicionar a seguinte linha ao seu arquivo config.prc :
framebuffer-stencil #t
StencilAttribs so definidos exclusivamente por suas funes de construtor , por isso vamos
analisar a entender o que cada parte faz. O seguinte cdigo cria um atributo que indica um
objeto para se tornar o stencil buffer exatamente 1, e no se modificar o buffer estncil.
stencilReader =
StencilAttrib.make(1,StencilAttrib.SCFEqual,StencilAttrib.SOKeep,
StencilAttrib.SOKeep,StencilAttrib.SOKeep,1,1,0)
O primeiro parmetro um boolean. Se este parmetro for zero , o StencilAttrib no
processado. Em seguida a funo de comparao usa esse atributo , neste caso, Equal. Os
prximos trs fatores determinam o que acontece com o stencil buffer , dependendo do
resultado da comparao. Ns vamos chegar a estes em um minuto. Os trs Manter os valores
deste atributo dizer nunca para modificar os valores no buffer. Prximo o valor de
referncia para a funo de comparao. Antes o valor de referncia passado para a funo
de comparao , no entanto , bitwise ANDed com uma mscara. No nosso caso, estamos
interessados na leitura , mas no por escrito, o stencil buffer , ento passamos 1 e 0 para o
ler e escrever mscaras, respectivamente. Estas mscaras so os dois ltimos parmetros para
a StencilAttrib .
Em seguida, vamos olhar para um atributo que escreve o stencil buffer estncil.
Presumivelmente, estas duas funes ir trabalhar em conjunto para criar um efeito .
constantOneStencil =
StencilAttrib.make(1,StencilAttrib.SCFAlways,StencilAttrib.SOZero,
StencilAttrib.SOReplace,StencilAttrib.SOReplace,1,0,1)
Novamente vamos comear por permitir o atributo. A funo de comparao aqui sempre ,
o que significa que o teste passa , no importa os parmetros. Em seguida a operao a ser
realizada no stencil buffer , se o teste falhar (o que neste caso nunca vai acontecer) - que
define o valor stencil buffer para zero. O prximo parmetro determina o que deve acontecer
se a funo de stencil passes, mas o teste de profundidade falhar, e, finalmente, o que deve
acontecer se os dois testes de stencil e profundidade passar. No nosso caso, queremos definir
o valor do buffer de estncil quer passar o teste de profundidade ou no, assim que ambos
so definidos para substituir. O valor de referncia fixado no stencil buffer 1. Estamos
escrevendo , independentemente do que est na reserva j , ento vamos definir a ler e
escrever mscaras para 0 e 1 , respectivamente.

Agora ns podemos adicionar esses atributos para ns em cena para explorar o efeito. Aqui
est o script inteiro.
from pandac.PandaModules import *

## Do this before the next import:
loadPrcFileData("", "framebuffer-stencil #t")

import direct.directbase.DirectStart

constantOneStencil = StencilAttrib.make(1,StencilAttrib.SCFAlways,
StencilAttrib.SOZero,StencilAttrib.SOReplace,
StencilAttrib.SOReplace,1,0,1)

stencilReader = StencilAttrib.make(1,StencilAttrib.SCFEqual,
StencilAttrib.SOKeep, StencilAttrib.SOKeep,
StencilAttrib.SOKeep,1,1,0)

cm = CardMaker("cardmaker")
cm.setFrame(-.5,.5,-.5,.5)

## To rotate the card to face the camera, we create
## it and then parent it to the camera.
viewingSquare = render.attachNewNode(cm.generate())
viewingSquare.reparentTo(base.camera)
viewingSquare.setPos(0, 5, 0)

viewingSquare.node().setAttrib(constantOneStencil)
viewingSquare.node().setAttrib(ColorWriteAttrib.make(0))
viewingSquare.setBin('background',0)
viewingSquare.setDepthWrite(0)

view = loader.loadModel("models/Panda")
view.reparentTo(render)
view.setScale(3)
view.setY(150)
view.node().setAttrib(stencilReader)
Voc pode obter uma viso um pouco mais em estnceis neste tpico no frum:
http://www.panda3d.org/phpbb2/viewtopic.php?p=48451 # 48451
Panda3D Manual: Texturizao

Na sua forma mais simples , texturizao consiste meramente em aplicar uma textura em seu
programa de modelagem. Quando voc exportar o modelo , o caminho para a textura e
algumas opes para ele , como filtragem ou mtodo de repetio (ver pginas seguintes )
esto guardados no arquivo do ovo. Os caminhos de textura pode ser relativo ( como pode ser
visto a partir do arquivo de ovo) ou absoluta ( caminho completo ). Ver Carregando Models
Para obter mais informaes sobre Filename Panda Syntax. Na maioria dos casos, o caminho
relativo faz mais sentido.
Panda pode carregar JPG , PNG , TIF, e uma srie de outros formatos de arquivo .
Mais avanados mtodos de texturizao so descritos nas seces seguintes .
A mapa de textura ou imagem de textura um arquivo de imagem bidimensional , como um
JPEG ou um arquivo do Windows BMP, que usado para aplicar a cor de um modelo 3 -D.
chamado de "textura" , porque um dos primeiros usos dessa tcnica consiste em aplicar uma
textura interessante para paredes e pisos que seria uma cor, plano de plstico para o futuro.
texturizao Hoje to comum em aplicaes 3-D que muitas vezes a nica coisa usada
para aplicar a cor para modelos - sem mapas de textura , muitos modelos seriam
simplesmente branco.
H uma vasta gama de efeitos de renderizao que podem ser alcanados com diferentes
variantes de texturizao. Antes que voc pode aprender sobre eles, importante
compreender as noes bsicas de texturizao em primeiro lugar.
Na texturizao simples - de longe a forma mais comum - que voc pode pensar o mapa de
textura como uma camada de tinta que aplicada ao modelo. Para que o hardware de
grficos para saber em que direo a tinta deve ser aplicada , o modelo deve ter sido criado
com coordenadas de textura- Um especial (u, v) par de coordenadas que est associado a
cada vrtice do modelo. Cada vrtice (u, v) as coordenadas da textura colocar o vrtice em
um ponto especfico dentro do mapa de textura, da mesma forma que o vrtice (x , y, z)
coordenadas local do vrtice em um determinado ponto no espao 3-D.
textura Essas coordenadas so chamados UV's devido ao (u, v ) nome do par de coordenadas .
Quase qualquer pacote de modelagem que voc pode usar para criar um modelo de
coordenadas de textura pode criar ao mesmo tempo , e muitas faz-lo sem sequer perguntar.
Por conveno, cada mapa de textura atribuda a ( u, v) coordenar o alcance de tal forma
que u coordenar intervalos 0-1 , da esquerda para a direita, e vai coordenar o v 0-1 de baixo
para cima . Isso significa que o canto inferior esquerdo da textura a coordenada ( 0, 0 ), e
no canto superior direito est em (1, 1). Por exemplo, d uma olhada em alguns mapas de
textura tpica:

a (u, v) as coordenadas da textura que voc atribui os vrtices que determinam como a
textura ser aplicada ao seu modelo. Quando cada tringulo do seu modelo desenhado ,
desenhada com as cores do seu mapa de textura que se inserem no mesmo tringulo de
vrtices (u, v) espao de textura . Por exemplo , a amostra smiley.egg modelo que vem com o
Panda tem seus vrtices definidos, tais que a u coordenar os aumentos de 0-1 em torno de
seu dimetro, e os v coordenar os aumentos de 0 na parte inferior a 1 em cima. Isso faz com
que a imagem de textura para ser envolvido na horizontal em torno da esfera :

Note que a (u, v intervalo) para uma imagem de textura sempre o mesmo, 0-1 ,
independentemente do tamanho da textura.
Textura tamanhos Standard
A maioria dos grficos hardware requer que as imagens de sua textura ser sempre um
tamanho que uma potncia de dois em cada dimenso. Isso significa que voc pode usar
qualquer uma das seguintes opes de tamanho de textura : 1, 2 , 4, 8 , 16, 32 , 64, 128 ,
256, 512, 1024 , 2048, ou assim por diante (mas se voc tiver um realmente placa high-end,
voc provavelmente precisar parar por a ).
As texturas normalmente no tm de ser quadrado: eles no tm que ter o mesmo tamanho
em ambas as dimenses . Mas cada dimenso tem geralmente de ser uma potncia de dois .
Assim, 64 128 certo, por exemplo, ou 512 32 ou 256 256 . Mas voc no pode fazer
uma imagem de textura que de 200 200 pixels , j que 200 no uma potncia de dois.
Por padro, o Panda3D redimensionar automaticamente qualquer imagem de textura at a
prxima potncia de dois menores , quando voc ler a partir do disco , assim que voc
normalmente no tem que pensar sobre isso - mas a sua aplicao ir carregar mais rpido se
voc dimensionar corretamente suas texturas em primeiro lugar.
Se voc gostaria Panda3D para redimensionar suas imagens at a prxima potncia maior das
duas em vez de descer para a prxima potncia de dois menores , use:
textures-power-2 up
No seu arquivo config. O padro :
textures-power-2 down
Observe que o tamanho que voc escolhe para a imagem de textura no tem nada a ver com
o tamanho ou a forma da imagem de textura na tela - que controlada pelo tamanho e forma
do polgono de aplic-lo para . Fazendo uma imagem de textura mais no faz-lo faz-lo
parecer maior na tela , mas tender a tornar mais ntidas e mais detalhadas. Da mesma forma
, fazendo uma textura mais pequenos tendem a torn-lo mais distorcido .
Padded Texturas
s vezes , voc precisa carregar dados em uma textura de cada frame. O exemplo mais
comum quando voc est jogando um filme. Digamos , por exemplo, que o filme est
codificado em 640x480 a 30 fps. Nenhuma destas dimenses uma potncia de dois. Seria
teoricamente possvel para Panda3D para redimensionar a imagem para 512x512 , mas teria
de faz-lo 30 vezes por segundo , que demasiado caro para ser prtico.
Em vez disso panda, almofadas os dados. Panda cria uma textura de 1024x512 , que a
menor potncia de duas dimenses que pode conter um filme de 640x480. Fura o filme
640x480 no canto inferior esquerdo da textura. Em seguida, ele adiciona uma borda preta
para a borda direita ea borda superior do filme estofamento, fora de 1024x512 .
Desse ponto em diante , s uma textura com um filme no canto inferior esquerdo, e barras
pretas nos lados superior e direito. No entanto , se voc usar coordenadas UV com cuidado,
voc pode fazer apenas um filme a ser exibido . Para fazer isso , voc precisa saber como os
grandes barras pretas so:
padx = texture.getPadXSize()
pady = texture.getPadYSize()
Panda3D s usa texturas acolchoado em alguns casos muito especiais: 1. Ao reproduzir um
poder no- de-dois filmes. 2. Ao utilizar tornar a textura , e uma potncia no- de-dois
buffer.
Textura tamanhos no padronizados
Algumas placas grficas mais recentes podem processar as texturas que no so uma potncia
de dois . Isso geralmente no muito til para carregar a arte do disco : afinal , a arte do
jogo criado em potncia de dois tamanhos , no importa o qu. No entanto, til para
evitar o desperdcio de preenchimento filme do tipo descrito acima. Se voc tiver um destes
cartes e voc deseja habilitar o uso de energia no- de - duas texturas , voc pode colocar a
seguinte linha no seu Config.prc :
textures-power-2 none
Voc tambm pode tentar ter panda detectar as suas capacidades de placa de vdeo
automaticamente, usando o seguinte comando:
textures-auto-power-2 #t
Se esta varivel verdadeira, ento panda vai esperar at abrir uma janela, e depois pedir o
driver da janela , se o driver no suporta a potncia de duas texturas . Se assim for, ento a
varivel de configurao textures_power_2 ser automaticamente ajustado. Desta forma ,
voc pode configurar Panda3D usar o poder de no -de- duas texturas se eles estiverem
disponveis .
Ateno: existe uma armadilha potencial uso texturas auto - poder -2. Se voc abrir uma
janela que no suporta a potncia de duas texturas , panda vai mudar em texturas , poder
-2 none modo. Se voc abra uma segundo janela usando uma placa de vdeo diferentes, que
no suporta ou no-poder -de- duas texturas , ento panda no tero nenhuma escolha mas
para imprimir uma mensagem de erro.
Note que alguns cartes aparecer ser capaz de processar ou no-poder -de- duas texturas ,
mas o motorista realmente apenas escalar as texturas em tempo de carga. Com os cartes
como estes, melhor voc deixar Panda fazer o escalonamento, ou texturas dinmica pode
render muito lentamente.

Panda3D Manual: Modos Wrap Textura
Prev Topo
Prximo

Pito/C + +

Conforme descrito anteriormente , o (U, v) coordenadas de textura que voc atribui a sua
vrtices so o que determina como a textura se encaixa em sua geometria. Muitas vezes, voc
ir usar coordenadas de textura , que sempre esto dentro do intervalo [0 , 1] , que a gama
completa dos pixels da imagem de textura. No entanto , tambm legal de usar textura
coordenadas que ir para fora deste intervalo , voc pode ter valores negativos , por exemplo,
nmeros ou superior a 1.
Portanto, se a imagem da textura definida somente no intervalo [0, 1], o que faz o olhar de
textura como fora deste intervalo ? Voc pode especificar isso com o Modo de embrulhar
textura.
texture.setWrapU(wrapMode)
texture.setWrapV(wrapMode)
O parmetro wrapMode especificada separadamente para os u e v direces ( tambm h
uma setWrapW () para texturas em 3-D, Mas isso um tpico avanado ). O wrapMode pode
ser qualquer um dos seguintes valores:
Texture.WMRepeat A imagem da textura se repete at ao infinito.
Texture.WMClamp O ltimo pixel da imagem da textura se estende ao infinito.
Texture.WMBorderColor
A cor especificada pela texture.setBorderColor () usado
para preencher o espao.
Texture.WMMirror A imagem de textura vira -e-volta por diante at o infinito.
Texture.WMMirrorOnce
A imagem de textura vira para trs, uma vez, e ento o "limite de
cor " usada.

Considere a imagem da textura simples a seguir :

Vamos aplicar essa textura no centro de um polgono cuja textura coordenadas grande gama
consideravelmente mais distante do que [0, 1], em ambos os sentidos.
WMRepeat
texture.setWrapU(Texture.WMRepeat)
texture.setWrapV(Texture.WMRepeat)

WMRepeat modo frequentemente usado para a telha de textura relativamente pequeno
sobre uma grande superfcie.
WMClamp

texture.setWrapU(Texture.WMClamp)
texture.setWrapV(Texture.WMClamp)

WMClamp modo raramente usado em grandes polgonos , porque, francamente , parece
terrvel quando os pixels estendem ao infinito como este , mas este modo geralmente a
escolha certa quando a textura exatamente preenche o polgono (ver Um cuidado sobre um
erro comum embrulhar , abaixo).
WMBorderColor
texture.setWrapU(Texture.WMBorderColor)
texture.setWrapV(Texture.WMBorderColor)
texture.setBorderColor(VBase4(0.4, 0.5, 1, 1))

A cor azul foi escolhida anteriormente para fins de ilustrao , voc pode usar qualquer cor
que voc quiser para a cor da borda . Normalmente, voc usaria a cor de fundo da textura
como a cor da borda , como este:
texture.setWrapU(Texture.WMBorderColor)
texture.setWrapV(Texture.WMBorderColor)

Alguns drivers muito antigos grficos no suportam WMBorderColor. Neste caso, Panda3D vai
cair de volta para WMClamp, Que ser semelhante enquanto existir uma margem suficiente de
cor de fundo em torno da borda de sua textura ( textura ao contrrio do nosso exemplo , que
vai toda a maneira para fora da borda).
WMMirror

texture.setWrapU(Texture.WMMirror)
texture.setWrapV(Texture.WMMirror)

Muitos drivers grficos mais velhos no suportam WMMirror. Neste caso, Panda3D vai cair de
volta para WMRepeat.
WMMirrorOnce
texture.setWrapU(Texture.WMMirrorOnce)
texture.setWrapV(Texture.WMMirrorOnce)
texture.setBorderColor(VBase4(0.4, 0.5, 1, 1))

Poucos drivers grficos de apoio WMMirrorOnce. Neste caso, Panda3D vai cair de volta para
WMBorderColor.
Definir os modos de envolver diferentes
possvel definir os modos de envolver diferentes na u e v direes:
texture.setWrapU(Texture.WMRepeat)
texture.setWrapV(Texture.WMClamp)


Um cuidado sobre o modo envoltrio de erros comuns
Quando voc aplica uma textura que se pretende exatamente preencher um polgono - isto ,
a textura coordenadas intervalo 0-1 , mas no ainda - voc geralmente deve definir o seu
modo de envolver a braadeira. Isto porque se voc deix-lo manter o valor padro de
repetir, A cor pode sangrar a partir do lado oposto , produzindo uma fina linha ao longo da
borda de seu polgono , como este:

Este um erro particularmente comum com uma textura que pintado como um recorte alfa
, onde h uma imagem com um fundo totalmente transparente : voc vai ver muitas vezes um
fino, borda visvel mal - flutuante ao longo do topo (por exemplo) do polgono . Esta
vantagem realmente a borda inferior da textura sangramento na parte superior , pois o
designer especificado WMRepeat ao invs do modo correto, WMClamp.


Panda3D Manual: Tipos de filtro de textura
raro que os pixels de uma imagem de textura correspondncia um-para- um com tela de
pixels reais , quando a textura visvel na tela . Normalmente, o caso de que seja um nico
pixel da textura esticada sobre vrios pixels da tela (ampliao textura- A imagem da
textura esticada maior ), ou o contrrio, que vrios pixels de uma textura de contribuir para
a cor de um pixel da tela nica (minification textura- A imagem de textura squished
menor). Muitas vezes, um nico polgono ter alguns pixels de textura que precisam ser
ampliados e alguns pixels que precisam ser minified ( a placa grfica pode lidar com dois
processos em um nico polgono ).
Voc pode controlar como a textura olha quando ela for ampliada ou minified definindo sua
tipo de filtro.
texture.setMagfilter(filterType)
texture.setMinfilter(filterType)
H uma configurao separada FilterType para ampliao e minimizao . Para tanto a
ampliao e minimizao, o FilterType podem ser:
Texture.FTNearest Prove o pixel mais prximo.
Texture.FTLinear Exemplo mais prximo dos quatro pixels e interpolao linear deles.
Para minification apenas , para alm das duas opes acima , voc tambm pode escolher
entre:
Texture.FTNearestMipmapNearest
Ponto de amostra do pixel em relao ao nvel mais
prximo mipmap .
Texture.FTLinearMipmapNearest Bilinear filtrar o pixel mais prximo do nvel mipmap .
Texture.FTNearestMipmapLinear
Ponto de amostra do pixel a partir de dois nveis mipmap
e linearmente mistura.
Texture.FTLinearMipmapLinear
Bi-linearmente o filtro de pixel a partir de dois nveis
mipmap e linearmente misturar os resultados. Isto
tambm chamado filtragem trilinear.
O tipo de filtro padro para ambos a ampliao e minification FTLinear.
Considere os efeitos visuais dos diversos tipos de filtros na ampliao e minimizao da
textura que se segue:

FTNearest
texture.setMagfilter ( Texture.FTNearest )
texture.setMinfilter ( Texture.FTNearest )

Normalmente, FTNearest usado apenas para conseguir um efeito pixelly especial.
FTLinear
texture.setMagfilter ( Texture.FTLinear )
texture.setMinfilter ( Texture.FTLinear )

FTLinear uma boa opo de uso geral, embora no seja perfeito.
Mipmaps
Muitos tutoriais grficos vai continuar por pginas e pginas sobre o que exatamente significa
mipmapping e como tudo funciona por dentro. Vamos poup-lo dos detalhes aqui , mas voc
deve compreender as seguintes coisas sobre mipmapping :
(1) requer 33% mais memria de textura (por mipmapped textura ), mas ele processa
rapidamente.
(2) ajuda a olhar de textura muito suave do que filtrar apenas quando minified .
(3) Mipmapping no tem nada a ver com a ampliao.
(4) tem uma tendncia a diluir-se texturas minified um pouco demais, principalmente quando
a textura aplicada a um polgono que est quase de lado para a cmera.
Existem quatro tipos de filtros diferentes, que envolvem mipmapping , mas quase sempre
quer usar apenas a ltima, FTLinearMipmapLinear. Os outros modos so para usurios
avanados, e s vezes pode ser usado para ajustar os artefatos mipmap um pouco
(especialmente para reduzir o ponto 4 , acima). Se voc no entender a descrio na tabela
acima , no vale a pena se preocupar .
texture.setMinfilter ( Texture.FTLinearMipmapLinear )

Filtragem anisotrpica
H um acrscimo final a textura filtragem equao: voc pode habilitar a filtragem
anisotrpica em cima de qualquer um dos modos de filtro acima , o que permite um mais caro
, o modo de tornar um pouco mais lento que geralmente produz efeitos superior. Em
particular, a filtragem anisotrpica geralmente melhor no tratamento minification textura
que mipmapping, e no tendem a borrar as textura muito.
Para habilitar a filtragem anisotrpica, voc pode especificar o grau :
texture.setAnisotropicDegree(degree)
O grau deve ser um nmero inteiro. O valor padro 1, que indica a ausncia de filtragem
anisotrpica , configur-lo para um maior nmero para indicar a quantidade de filtragem que
voc necessita. Nmeros maiores so mais caros , mas produzem um resultado melhor , at a
capacidade de sua placa grfica. Muitas placas grficas no suportam qualquer grau diferente
de 2, que geralmente suficiente de qualquer maneira.
degree other than 2, which is usually sufficient anyway.
texture.setAnisotropicDegree(2)


Algumas placas mais antigas no possvel executar a filtragem anisotrpica .
Panda3D Manual : Substituio simples da textura
Embora normalmente voc vai carregar e exibir modelos que j esto texturizados, voc
tambm pode aplicar ou substituir uma imagem de textura de um modelo em tempo de
execuo . Para fazer isso, voc deve primeiro obter um identificador para a textura , por
exemplo, carreg-lo diretamente:
myTexture = loader.loadTexture("myTexture.png")
LoadTexture acima ( ) chamada pesquisa ao longo do actual modelo de caminho para o
arquivo de imagem nomeado ( neste exemplo, um arquivo chamado " myTexture.png "). Se a
textura no for encontrado ou no pode ser lido por alguma razo, nenhum retornado.
Assim que tiver uma textura, voc pode aplic-la a um modelo com o SetTexture ()
chamada. Por exemplo , suponha que voc usou a classe CardMaker para gerar um carto
simples branco:
cm = CardMaker('card')
card = render.attachNewNode(cm.generate())
Depois, voc pode carregar uma textura e aplic-lo para o carto como este:
tex = loader.loadTexture('maps/noise.rgb')
card.setTexture(tex)
(Note que no necessrio usar o parmetro override ao SetTexture () call - ou seja, voc
no precisa fazer card.setTexture ( tex, 1) - porque neste caso , o carto j no tem qualquer
outra textura aplicada a ele , assim que sua textura ser visvel mesmo sem o substituir .)
Para que isso funcione, o modelo que voc deve aplic-lo j coordenadas de textura
definidos (ver Simples Texturing). Quando isso acontece, o CardMaker gera coordenadas de
textura por padro quando ele gera um carto , por isso no h problema .
Voc tambm pode usar SetTexture () para substituir a textura de um modelo j com
textura . Neste caso, voc deve especificar um segundo parmetro para SetTexture , que o
mesmo parmetro override opcional Panda voc pode especificar em qualquer tipo de Panda
mudana de estado. Normalmente, voc simplesmente passar um como o segundo parmetro
para SetTexture (). Sem essa substituio, a textura que atribudo diretamente ao nvel
Geom ter precedncia sobre a mudana de estado que voc faz no n do modelo, ea
mudana de textura no ser feita.
Por exemplo, para alterar a aparncia do sorriso :
smiley = loader.loadModel('smiley.egg')
smiley.reparentTo(render)
tex = loader.loadTexture('maps/noise.rgb')
smiley.setTexture(tex, 1)

Muitas vezes, voc deseja substituir a textura em apenas um pedao de um modelo, em vez
de definir a textura de cada elemento . Para fazer isso , basta obter uma NodePath
identificador para a parte ou partes do modelo que voc deseja alterar , conforme descrito
na seo Manipulando um pedao de um modeloE fazer a SetTexture () exortar os
NodePaths .
Por exemplo , este modelo de automvel tem mltiplas texturas disponveis em diferentes
cores :

Para a maior parte , este carro foi pintado com uma imagem de textura grande, que se
parece com isto:

Mas tambm temos uma verso azul da mesma imagem da textura :

Embora seja tentador usar SetTexture ( ) para atribuir a textura do azul para o carro inteiro,
que tambm atribui a textura azul para os pneus do carro, que precisar usar um mapa de
textura diferente. Ento, ao invs , ns aplicamos a textura azul apenas para as peas que
queremos mudar :
car = loader.loadModel('bvw-f2004--carnsx/carnsx.egg')
blue = loader.loadTexture('bvw-f2004--carnsx/carnsx-blue.png')
car.find('**/body/body').setTexture(blue, 1)
car.find('**/body/polySurface1').setTexture(blue, 1)
car.find('**/body/polySurface2').setTexture(blue, 1)
E o resultado este:

Se voc est interessado em mudar a imagem de uma textura durante a execuo do
programa, dizer para ajustar alguns de seus pixels, ver Criao de novas texturas a partir do
zero.
Manual Panda3D : Introduo multitextura

Panda3D fornece a capacidade de aplicar mais de uma imagem de textura de uma vez para os
polgonos do modelo. As texturas so aplicadas em cima da outra , como camadas de tinta ,
muito parecida com as "camadas" de um programa de foto- pintura popular.
Para uma camada de textura segundo um modelo , voc tem que entender conceito Panda ,
de um TextureStage. Pense em um TextureStage como um slot para manter uma imagem de
textura nica. Voc pode ter tantos TextureStages diferentes como voc deseja em sua cena ,
e cada TextureStage pode ser usado em um, vrios ou todos os modelos.
Quando voc aplica uma textura a um modelo, por exemplo, com o SetTexture () chamada
, voc realmente obrigatrio a textura de um TextureStage particular. Se voc no
especificar um TextureStage de usar, Panda assume que quer dizer o "padro" TextureStage
objeto , que um ponteiro global que pode ser acessado como TextureStage.getDefault
().
Cada TextureStage pode conter uma imagem de textura para um determinado modelo . Se
voc atribuir uma textura para um TextureStage particular, e depois (ou uma menor n)
atribuir uma textura diferente ao TextureStage mesmo , a nova textura substitui
completamente o antigo. ( Dentro da cena global , uma TextureStage dado pode ser usado
para armazenar qualquer nmero de diferentes texturas diferentes para ns , mas ela s tem
uma textura para qualquer um n particular.)
No entanto, voc pode ter tantos TextureStages diferentes como voc deseja. Se criar um
novo TextureStage e us-lo para atribuir uma segunda textura de um n , o n tem agora duas
texturas que lhe so atribudas .
Embora no exista limite para o nmero de TextureStages voc atribui a esse propsito, a
placa grfica vai impor algum limite para o nmero que pode render em qualquer um n .
placas de vdeo modernas normalmente tm um limite de 4 ou 8 as texturas de uma vez ,
algumas placas antigas s pode fazer dois , e algumas placas muito antigas tm um limite de 1
(apenas uma textura de cada vez) . Voc pode descobrir o limite do seu carto de
multitexture particular com a chamada base.win.getGsg (). getMaxTextureStages ().
Lembre-se, no entanto, que este limite s restringe o nmero de TextureStages diferentes
voc pode ter em qualquer um n particular , voc ainda pode ter tantos TextureStages
diferentes como voc quiser, desde que todos eles esto em diferentes ns .
Vamos voltar ao exemplo de Substituio simples da textura, Onde substituiu a textura
normal em smiley.egg com uma imagem nova textura que contm um padro de cor
aleatria. Desta vez, em vez de atribuir a nova textura TextureStage padro, vamos criar
um TextureStage novo para ele , para que tanto as texturas ainda estar em vigor:

smiley = loader.loadModel('smiley.egg')
smiley.reparentTo(render)
tex = loader.loadTexture('maps/noise.rgb')
ts = TextureStage('ts')
smiley.setTexture(ts, tex)
Observe que podemos criar um objeto novo TextureStage on the fly , o nico parmetro
obrigatrio para o parmetro TextureStage um nome , que s significativa para ns.
Quando passamos a TextureStage como o primeiro parmetro para SetTexture (), que
significa atribuir a textura indicada a esse TextureStage . Observe tambm que no
precisamos mais para especificar uma substituio para o SetTexture () chamada, uma vez
que no est substituindo a textura especificada no nvel Geom , mas ns estamos
adicionando a ele.
E o resultado este:
E o resultado este:

Para desfazer um convite anterior para adicionar uma textura , use:
smiley.clearTexture (ts)
passando o TextureStage mesmo que voc usou antes. Ou , em alternativa , pode usar
simplesmente :
smiley.clearTexture ()
para remover todos especificaes textura que voc adicionou anteriormente ao smiley n.
Isso no remove as texturas originais que estavam no modelo quando voc carreg-la ; as
texturas so atribudos a um nvel diferente do n , sobre o Geom objetos que compem o
modelo.
Panda3D Manual: Modos de Textura

Existem vrios tipos de texturas : texturas de cor, mapas normais, gloss mapas, brilho, e
assim por diante . Para distinguir estas , utilize o TextureStage.setMode funo.
Alm disso , dentro da categoria geral das texturas da cor, h vrias maneiras de combinar as
cores : Mdulo , decalque, Blend, e assim sucessivamente. Estes , tambm, so controlados
usando o TextureStage.setMode funo.
O Bsico
Vamos voltar ao exemplo da aplicao de uma textura para o modelo de smiley. Neste caso,
vamos criar um novo TextureStage para aplicar a textura da imagem abaixo :

Para esta cena:

Note que a parte circular branca da imagem de amostra no realmente branca em tudo,
mas um recorte (alfa que voc est vendo atravs da imagem para o fundo da pgina branca
). Temos prestado smiley.egg contra um fundo colorido para que voc possa ver os efeitos de
alpha nos vrios modos abaixo , em alguns deles , o alfa propagado atravs da cor final,
assim smiley transparente nas partes da imagem, mas em outros modos , o alfa usado
para um propsito diferente, risonho e no transparente no .
Note tambm que, para fins de ilustrao , temos apenas aplicou a textura da imagem de
exemplo para uma parte do modelo sorridente , ao invs de todo o modelo . ( Isso foi feito
atravs da transformao das coordenadas de textura do estgio de textura , que coberto
em um tpico mais tarde.)
Modo Mdulo
Este o padro blend mode . Neste modo , a cor, textura superior multiplicado pela cor da
textura de fundo para produzir o resultado . Isto significa que a cor da textura resultante ser
escura (ou pelo menos , no brilhante ) do que de ambas as cores da textura original.
ts = TextureStage('ts')
ts.setMode(TextureStage.MModulate)
smiley.setTexture(ts, tex)

Note que neste modo, um corte alpha na textura top produz um recorte alpha na imagem
resultante.
Modo Adicionar
Neste modo , a cor, textura top adicionado cor, textura de fundo, e fixada a 1 ( branco).
Isto significa que a cor da textura resultante ser brilhante (ou pelo menos , no mais escuras
) do que de ambas as cores da textura original.
ts = TextureStage('ts')
ts.setMode(TextureStage.MAdd)
smiley.setTexture(ts, tex)

Note que nesta modalidade , como no modo modular , um recorte alpha na textura top
produz um recorte alpha na imagem resultante. Observe tambm que , salvo uma ou ambas
as texturas a sua fonte era bastante escuro, h uma tendncia para as cores para obter
lavadas em branco onde tudo braadeiras para 1.
Substituir modo
Neste modo, a textura top substitui completamente a textura de fundo. Este modo no
frequentemente utilizado.
ts = TextureStage('ts')
ts.setMode(TextureStage.MReplace)
smiley.setTexture(ts, tex)

Note-se que o recorte alfa preservado , mas os efeitos de iluminao (que so considerados
parte da textura subjacente) foram perdidos.
modo Decal
Neste modo, a textura top substitui completamente a textura de fundo, mas apenas quando
alfa = 1 no top de textura . Quando alfa = 0, mostra a textura de fundo atravs de , e h uma
mistura harmoniosa de valores de alfa entre 0 e 1 .
ts = TextureStage('ts')
ts.setMode(TextureStage.MDecal)
smiley.setTexture(ts, tex)

Note-se que o recorte alfa no mais preservada deste modo , porque o alfa usado para
determinar qual a textura deve ser visvel. Observe tambm que os efeitos de iluminao so
perdidos para a parte decalled da textura.
Panda3D tambm fornece um recurso interno de decalque, para a prestao de um polgono
coplanar com pequenas e incorporado dentro de um polgono maior , o que no est
relacionada com a textura de decalque blend mode .
Blend mode
Blend mode similar ao modo de decalque , exceto que voc pode especificar a cor do decal
como um parmetro em tempo de execuo . Voc pode variar a cor e voc no tem que ter
uma imagem de textura diferente para cada cor possvel. No entanto, o decalque vai ser
sempre monocromticas (que ser desenhado em tons diferentes de qualquer cor que voc
especificar).
modo de mistura pode ser usada apenas com uma textura em tons de cinza , e ele no usa
alpha. Uma vez que a textura do exemplo acima no uma textura em tons de cinza , vamos
usar uma textura diferente para este exemplo:

Esta textura no tem um canal alfa , simplesmente uma imagem em tons de cinza com um
grande branco " A " em um campo de preto. modo de Blend ir produzir a cor original , onde a
imagem preto, ea cor que especificar com TextureStage.setColor () onde a imagem
branca. Quando a imagem tons de cinza , haver uma mistura suave entre as cores.
ts = TextureStage('ts')
ts.setMode(TextureStage.MBlend)
ts.setColor(Vec4(1, 0, 0, 1))
smiley.setTexture(ts, tex)

E ns podemos mudar a cor do decalque vontade, simplesmente com:
ts.setColor(Vec4(0, 0, 1, 1))

Note que, como o exemplo acima do decalque , a informao iluminao perdida quando o
decalque aplicado.
Modo Normal Map
Normal mapas so mapas que causam superfcies parecem ter aumentado e reas rebaixadas .
Eles tambm so chamados mapas "bump ". Diferentemente da maioria dos mapas, normal
no afeta a cor do modelo - que afetam a iluminao. Quando a luz atinge um modelo de
mapeamento normal , a luz cria sombras e destaques ao longo desses sulcos e salincias. Se
no houver luzes so aplicados ao modelo , ento no haver sombras ou reflexos , eo mapa
normal ser invisvel . Atualmente, Panda3D permite apenas um mapa normal por polgono,
mapas adicionais normal ser ignorado.
ts = TextureStage('ts')
ts.setMode(TextureStage.MNormal)
smiley.setTexture(ts, tex)
Desde parallax mapping no parece muito bom, sem o mapeamento normal , eles so
freqentemente usados juntos . Como uma otimizao, a maioria das pessoas preferem
guardar o mapa de altura para o canal alfa do mapa normal. Se voc estiver usando como um
mapa de altura embalado normal / , voc precisa usar o modo MNormalHeight no Panda:
# The second parameter to loadTexture will be stored in the texture's alpha
channel.
tex = loader.loadTexture("normalmap.png", "heightmap.png")

ts = TextureStage('ts')
ts.setMode(TextureStage.MNormalHeight)
smiley.setTexture(ts, tex)
Por padro, o algoritmo de mapeamento de paralaxe usar trs amostras, eo efeito ser
dimensionada em 0,1 . Para alterar esses parmetros , use as seguintes linhas Config.prc :
parallax-mapping-samples 3
parallax-mapping-scale 0.1
A quantidade de amostras como exato o mapeamento de paralaxe ser. Os valores mais
baixos so mais baratos, mas o resultado ser menos precisas. A escala a magnitude do
efeito - com um valor menor diminui efeito , com um valor superior superfcie vai ter mais
profundidade aparente ( embora os artefatos devido falta de ocluso ser mais visvel). Use
um valor negativo para inverter o efeito (este tem o mesmo efeito de inverter o heightmap ).
Gloss Mode Map
Um gloss mapa uma imagem em preto -e-branco , indicando que o modelo suposto ser
brilhante e onde suposto ser maante. mapas Gloss no afetar a cor do modelo - que afetam
o grau em que o modelo reflete especulares . Ento, se no as luzes so aplicados ao modelo
e, portanto, no h reflexos especulares em tudo, ento o brilho do mapa ser invisvel.
Mais precisamente, o brilho mapa afeta o material cor especular do modelo. Se o modelo j
tem um material de cor especular , ento multiplicado pelo valor (0-1 ), no brilho do mapa.
Desta forma, o brilho pode mapear efetivamente ligar ou desligar a especularidade em uma
base per- pixel. Se o modelo j no tem uma cor especular material especificado, em
seguida, aplicar um brilho mapa faz com que o material de cor especular na faixa de fora a
branco brilhante.
Um gloss mapa deve ser um alpha da textura :
ts = TextureStage('ts')
ts.setMode(TextureStage.MGloss)
smiley.setTexture(ts, tex)
Se desejar, voc pode embalar um modular , textura e um brilho -mapa em uma textura
RGBA nico. Nesse caso , os componentes RGB so apenas valores de cor regulares que so
moduladas para o modelo, e os controles de brilho A :
ts = TextureStage('ts')
ts.setMode(TextureStage.MModulateGlow)
smiley.setTexture(ts, tex)
Atualmente, Panda3D s permite que um mapa brilho por polgono , mapas brilho adicional
ser ignorado.
Veja tambm: Programas de exemplo : filtro de brilho
Glow mapas so nova Panda3D a partir da verso 1.5.0. Eles s funcionam quando gerao
shader est habilitado.
Panda3D Manual : Ordem Textura

Quando h mltiplas texturas com efeito, dependendo do Textura Blend Mode em uso, ele
pode ser importante para controlar a ordem em que as texturas aplicadas. Por exemplo,
embora modula a modalidade e modo Adicionar ordem so independentes, a fim de textura
faz uma grande diferena no modo de Decal , o modo Replace, e modo Blend.
Para especificar a ordem de textura , use TextureStage.setSort () em um ou mais dos
seus TextureStages . Se voc no especificar um valor de classificao , o valor de
classificao padro 0. Quando a geometria processado , todas as texturas so
processados em ordem crescente de valor do tipo , de modo que o maior valor de
classificao processado por cima. Assim, se voc quiser usar o modo de Decal , por
exemplo, para aplicar uma textura em cima de um menor de textura, que seria uma boa idia
usar setSort () para dar um maior valor de classificao para a textura do decalque.
Alm disso, uma vez que alguns hardware pode no ser capaz de processar todos os
TextureStages que voc tenha definido em um n particular , o Panda oferece uma maneira
para que voc possa especificar quais s (textura) so os mais importantes . Utilizao
TextureStage.setPriority () para isso.
O valor de prioridade s consultado quando tiver aplicado TextureStages mais de um n
especfico do que o seu hardware atual pode render. Neste caso , a Panda ir selecionar as
texturas n com o valor de prioridade mais alta ( e , em seguida, classific-los em ordem pelo
setSort () valor). Entre duas texturas com a mesma prioridade , Panda ir preferir aquele com
o menor valor de classificao. A prioridade padro 0.
Panda3D Manual: Textura Combine Modos
Prev Topo
Prximo

Pito/C + +

Algumas das informaes nesta pgina podem no estar corretas.

Veja o Discusso para mais detalhes.
Alm dos vrios Textura Blend Modes descrito anteriormente , existe uma interface mais
avanada em TextureStage que permite um maior vocabulrio de opes de mistura de
texturas .
Embora vrias das seguintes opes ( CMReplace , CMModulate , CMAdd ) tem paralelos bvios
com a simples mistura modos descritos anteriormente , eles so de fato mais poderosa ,
porque com cada um dos seguintes voc pode especificar a fonte de particular ou de fontes a
serem utilizados para a funcionamento , voc no est limitado a simples aplicao da
operao para a textura superior e textura abaixo.
modos RGB
A seguir especificam o efeito da RGB (cor) canais. Um conjunto distinto de mtodos, a seguir,
especifica o efeito do canal alfa.
ts.setCombineRgb(TextureStage.CMReplace, source, operand)
Este modo semelhante ao " modo de substituio ". Seja qual for a cor especificada pelo
operando fonte e se torna a nova cor.
ts.setCombineRgb(TextureStage.CMModulate, source0, operand0, source1,
operand1)
Este modo similar ao " modula a modalidade ". A cor de source0/operand0 multiplicado
pela cor de source1/operand1.
ts.setCombineRgb(TextureStage.CMAdd, source0, operand0, source1, operand1)
Este modo semelhante ao "adicionar "mode. A cor de source0/operand0 adicionado cor
source1/operand1 , eo resultado fixada a 1 ( branco).
ts.setCombineRgb(TextureStage.CMAddSigned, source0, operand0, source1,
operand1)
Neste modo , as cores so adicionadas como assinado nmeros, eo resultado wraps.
ts.setCombineRgb(TextureStage.CMSubtract, source0, operand0, source1,
operand1)
Neste modo, source1/operand1 subtrado source0/operand0 .
ts.setCombineRgb(TextureStage.CMInterpolate,
source0, operand0, source1, operand1, source2, operand2)
Esta a nica modalidade que usa trs fontes. O valor da source2/operand2 usado para
selecionar entre source0/operand0 e source1/operand1 . Quando source2 0, Source0
selecionado, e quando source2 1, source1 selecionado. Quando source2 est entre 0 e 1, a
cor suave mistura entre Source0 e source1 .
Modos de Alpha
Os mtodos a seguir mais ou menos duplicar a funcionalidade do anterior, mas que eles
controlam o que acontece com o canal alfa. Assim, voc tem o controle explcito sobre a
possibilidade de um corte alpha na textura superior deve produzir um recorte alfa do objeto
resultante.
ts.setCombineAlpha(TextureStage.CMReplace, source, operand)
ts.setCombineAlpha(TextureStage.CMModulate, source0, operand0, source1,
operand1)
ts.setCombineAlpha(TextureStage.CMAdd, source0, operand0, source1, operand1)
ts.setCombineAlpha(TextureStage.CMAddSigned, source0, operand0, source1,
operand1)
ts.setCombineAlpha(TextureStage.CMSubtract, source0, operand0, source1,
operand1)
ts.setCombineAlpha(TextureStage.CMInterpolate, source0, operand0, source1,
operand1,
source2, operand2)
valores de origem
Esta tabela lista os valores vlidos para qualquer fonte, Source0 , source1 ou source2 , nas
chamadas acima. Esta ampla lhe d o controle sobre a qual duas (ou trs) texturas so usados
como insumos para o referido combinar os modos.
TextureStage.CSTexture A textura da imagem atual, ou "top".
TextureStage.CSConstant
A cor constante, especificado atravs
TextureStage.setColor ().
TextureStage.CSConstantColorScale
O mesmo que CSConstant , mas a cor ser alterada
pela NodePath.setColorScale ().
TextureStage.CSPrimaryColor
A "cor" principal do objeto , antes do primeiro estgio de
textura foi aplicada , incluindo os efeitos de iluminao.
TextureStage.CSPrevious
O resultado do estgio de textura anterior , ou seja, a
textura abaixo.
TextureStage.CSLastSavedResult
O resultado de qualquer uma das fases textura anterior
, mais especificamente, a ltima etapa para que
TextureStage.setSavedResult (verdadeiro) foi chamado.
Operandos
Esta tabela lista os valores vlidos para qualquer um operando, operand0 , operando1 ou
operando2 , nas chamadas acima. Isso afina o canal de dados que usado em cada entrada de
textura.
TextureStage.COSrcColor
Use a cor RGB. Quando usado em um
setCombineAlpha () chamada , RGB automaticamente
agregadas em tons de cinza.
TextureStage.COOneMinusSrcColor O complemento da cor RGB.
TextureStage.COSrcAlpha
Use o valor de alfa. Quando usado em um
setCombineRgb () chamada alfa automaticamente
expandido em RGB uniforme.
TextureStage.COOneMinusSrcAlpha O complemento do valor alfa.

Discusso relatada cima
Nas sees Operandos ele diz que " Quando usado em um setCombineAlpha () chamada , RGB
automaticamente agregadas em tons de cinza. " exceto que no de todo verdade . Em vez
disso, gera um erro que o operando no adequado para uso como um operando alfa. Que
muito ruim , pois eu realmente queria esse comportamento. Ser que o suporte de
renderizao subjacente a este comportamento e s verificar o parmetro precisa ser
relaxado? Ser que o processamento subjacente precisa ser melhorado para suportar esse
comportamento ( se possvel? )? Ou ser que a documentao s precisa corrigir para
refletir o comportamento real?
Panda3D Manual: Textura Transforma

possvel aplicar uma matriz para transformar a (u, v) as coordenadas da textura de um
modelo antes da renderizao. Desta forma , voc pode ajustar a posio , rotao ou escala
de uma textura , deslizando a textura ao redor para se adequar s suas necessidades
especficas.
Use os mtodos a seguir para NodePath fazer isso:
nodePath.setTexOffset(TextureStage, uOffset, vOffset);
nodePath.setTexScale(TextureStage, uScale, vScale);
nodePath.setTexRotate(TextureStage, degrees);
Se voc no tiver um TextureStage particular , use TextureStage.getDefault () como o
primeiro parmetro .
Note que a operao em cada caso, aplicada ao (u, v) as coordenadas da textura , e no
para a textura , assim ele vai ter o efeito oposto sobre a textura. Por exemplo , a chamada
nodePath.setTexScale (ts , 2, 2 ) efetivamente duplicar os valores das coordenadas de
textura sobre o modelo , que duplica o espao sobre o qual a textura aplicada e, portanto,
faz com que a textura aparea metade do tamanho .
Os mtodos aplicam-se a 2- d transformar a sua textura coordenadas, o que apropriado ,
pois geralmente so coordenadas de textura bidimensional. No entanto , s vezes voc est
trabalhando com 3- d textura coordenadas, E voc realmente deseja aplicar um 3-d
transformar. Para esses casos, existem os seguintes mtodos:
nodePath.setTexPos(TextureStage, uOffset, vOffset, wOffset);
nodePath.setTexScale(TextureStage, uScale, vScale, wScale);
nodePath.setTexHpr(TextureStage, h, p, r);
E h tambm uma forma genrica:
nodePath.setTexTransform(TextureStage, transform);
Este ltimo mtodo define um objeto TransformState genricos. Este o mesmo tipo de
matriz 4x4 transformar objeto que voc pode comear a partir de um NodePath atravs, por
exemplo , NodePath.getTransform (). Voc tambm pode construir uma nova
TransformState atravs de uma srie de mtodos como TransformState.makePos ( VBase3
(0, 1 , 0)). Se pretende candidatar-se a 2- d transformar s , voc deve restringir-se a
mtodos como TransformState.makePos2d ( VBase2 (0 , 1)), Usando apenas 2 -d podem
permitir que as operaes de back-end grfico para utilizar um clculo um pouco mais simples
.
Note que a textura transformar est associado a um TextureStage particular , no uma
propriedade fixa do modelo ou sua textura coordenadas. Voc pode, portanto, aplicar uma
textura diferente para transformar cada TextureStage diferentes, de modo que se voc tem
mltiplas texturas em vigor em um n particular, eles no precisam ser todos no mesmo lugar
, mesmo que todos usam a mesma textura coordenadas. Por exemplo, esta tcnica foi usada
para gerar as imagens da amostra no Textura Blend Modes seo. Na verdade, o cdigo a
seguir foi utilizado para colocar esta textura da amostra ( extrada ):
smiley = loader.loadModel('smiley.egg')
ts = TextureStage('ts')
pattern = loader.loadTexture('color_pattern.png')
smiley.setTexture(ts, pattern)
smiley.setTexScale(ts, 8, 4)
smiley.setTexOffset(ts, -4, -2)
e textura, o resultado :

No exemplo acima , ns aplicamos uma escala de (8, 4) para reduzir o tamanho da imagem
decalque substancialmente , e ento ns especificado um deslocamento de (-4 , -2 ) para
desliz-lo em torno da positiva (u, v ) em direco ao rosto sorridente (desde o (0 , 0)
coordenar acontece de estar na parte traseira do smiley ). No entanto , essas operaes
afetam somente a imagem do decalque , a textura smiley original mantm-se inalterada a
partir de sua posio normal , apesar de ambas as texturas esto usando a mesma textura
coordenadas.
Panda3D Manual: Textura vrios conjuntos de coordenadas

Alm disso, a textura simples transforma , tambm possvel ter mais de um conjunto de
coordenadas de textura de um modelo . Panda permite que voc defina como muitos
conjuntos diferentes de coordenadas de textura que voc quiser, e cada jogo pode ser
completamente alheios a todos os outros.
Quando voc tem textura vrios conjuntos de coordenadas (s vezes chamado vrios
conjuntos de UV) em um modelo , cada conjunto ter o seu prprio nome , que qualquer
seqncia arbitrria . A textura coordenadas padro definido no tem nome (seu nome uma
string vazia ).
Normalmente, voc criar vrios conjuntos de coordenadas de textura no pacote de
modelagem mesma que voc usa para criar o modelo. Nem todos os pacotes de modelagem, e
no todos os conversores Panda , suporte textura vrias coordenadas. De fato, a partir da
data desta escrita, apenas a verso 1.1 Panda3D (ou superior) do conversor maya2egg
conhecido por converter a textura em mltiplas coordenadas Panda.
Se acontecer de ter um modelo com vrios conjuntos de coordenadas de textura , voc pode
especificar que um conjunto de textura particular deve usar chamando
TextureStage.setTexcoordName ( "nome"). Lembre-se de um TextureStage usada para
aplicar uma textura a um modelo , e assim todos tero uma textura TextureStage associados (
embora a maioria das texturas s usar o TextureStage padro). Caso voc no chamar esse
mtodo para um TextureStage particular, o comportamento padro usar o padro, textura
unnamed conjunto de coordenadas .
O TextureStages diferente em um modelo podem compartilhar a mesma textura conjuntos
coordenados , ou eles podem usar uma textura de cada conjunto de coordenadas diferentes ,
ou qualquer combinao.
Panda3D Manual: Textura automtica Coordenadas
Prev Topo
Prximo

Pito/C + +

Alm de usar coordenadas de textura que so incorporadas ao modelo , tambm possvel
gerar coordenadas de textura em tempo de execuo . Normalmente voc usaria essa tcnica
para conseguir algum efeito especial , como texturizao projetiva ou mapeamento do
ambiente, mas s vezes voc pode simplesmente querer aplicar uma textura a um modelo que
j no tem coordenadas de textura , e esta a nica maneira de fazer isso .
As coordenadas de textura gerada por esta tcnica so geradas on- the-fly, e no so
armazenados no modelo. Quando voc desligar o modo de produo, a textura coordenadas
deixam de existir.
Use o mtodo NodePath a seguir para habilitar a gerao automtica de coordenadas de
textura :
nodePath.setTexGen(TextureStage, texGenMode)
O parmetro texGenMode especifica como as coordenadas de textura devem ser computados ,
e pode ser qualquer uma das seguintes opes. Na lista abaixo , "olho ", o espao de
coordenadas da cmera de observao, e " mundo " significa que as coordenadas do mundo ,
por exemplo, o espao de coordenadas render, a raiz do grafo de cena.
TexGenAttrib.MWorldPosition Copia o (x , y, z ) posio de cada vrtice , no espao do
mundo , ao (u, v , w) coordenadas de textura.
TexGenAttrib.MEyePosition Copia o (x , y, z ) posio de cada vrtice , no espao da
cmera, ao ( u, v , w) coordenadas de textura.
TexGenAttrib.MWorldNormal Copia o (x , y, z) de iluminao normal de cada vrtice , no
espao do mundo , ao (u, v , w) coordenadas de textura.
TexGenAttrib.MEyeNormal Copia o (x , y, z) de iluminao normal de cada vrtice , no
espao da cmera, ao ( u, v , w) coordenadas de textura.
TexGenAttrib.MEyeSphereMap Gera (u, v) as coordenadas da textura com base na
iluminao normal eo vetor para aplicar um mapa esfera
padro de reflexo .
TexGenAttrib.MEyeCubeMap Gera (u, v , w) coordenadas de textura com base na
iluminao normal eo vetor para aplicar um mapa de cubo
padro de reflexo .
TexGenAttrib.MWorldCubeMap Gera (u, v , w) coordenadas de textura com base na
iluminao normal eo vetor para aplicar um mapa de cubo
padro de reflexo .
TexGenAttrib.MPointSprite Gera (u, v) as coordenadas da textura no intervalo ( 0, 0)
para (1, 1 ) por pontos grandes de modo que a textura
cobre a praa. Este um modo especial que deve ser
aplicado apenas quando esto prestando sprites, geometria
da ponta especiais que so renderizados como quadrados.
No faz sentido aplicar este modo para qualquer outro tipo
de geometria. Normalmente voc no iria definir este modo
diretamente; deixar o SpriteParticleRenderer faz-lo para
voc.
TexGenAttrib.MLightVector Gera especiais ( u , v, w) textura coordenadas que
representam o vetor de cada vrtice a uma luz especial no
grafo de cena , no espao tangente a cada vrtice . Este
usado para implementar mapas normal. Este modo requer
que cada vrtice tem uma tangente e um binormal
computado para ele antes do tempo , voc tambm deve
especificar o NodePath que representa a direo da luz.
Normalmente, voc no definir esta modalidade , quer
directamente , uso NodePath.setNormalMap (), ou
implementar mapas normal usando shaders programveis.
Note-se que vrias das opes acima gerar textura coordenadas 3-D : ( u, v , w) em vez de
apenas (u, v). A terceira coordenada pode ser importante se voc tem uma textura 3-D ou um
mapa de cubo ( descrito posteriormente ), mas se voc s tem uma textura normal 2-D a
coordenar extra ignorado. (No entanto , mesmo com uma textura de 2-D , voc pode aplicar
um 3 -D para transformar a textura coordenadas , o que traria de volta a terceira coordenada
na equao. )
Alm disso, note que quase todas estas opes tm um efeito muito limitado, voc
geralmente usar a maioria desses s para executar o efeito especial que eles foram
projetados. Este manual ir discutir estes modos special-purpose TexGen em sees
posteriores , como cada um dos efeitos discutida , por agora, voc s precisa entender que
elas existem, e no se preocupar sobre o que exatamente eles fazem.
O modo que mais provvel que tenha utilidade geral o primeiro : MWorldPosition. Este
modo converte cada vrtice (x , y, z ) posio no espao mundial, e em seguida, copia esses
trs valores numricos para a ( u, v , w) coordenadas de textura. Isso significa, por exemplo,
que se voc aplicar uma textura normal 2-D para o objeto, o objeto ( x , y) a posio ser
utilizado para procurar cores na textura.
Por exemplo , o modelo de amostra teapot.egg que vem com o Panda no tem textura
coordenadas construda no modelo, de modo que voc normalmente no pode aplicar uma
textura a ele. Mas voc pode permitir a gerao automtica de coordenadas de textura e , em
seguida, aplicar uma textura :
teapot = loader.loadModel('teapot.egg')
tex = loader.loadTexture('maps/color-grid.rgb')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition)
teapot.setTexture(tex)
E voc acaba com algo como isto:

Voc pode usar isso em conjunto com uma textura de transformao para manipular as
coordenadas de textura. Por exemplo, para girar a textura de 90 graus , voc poderia fazer
algo como isto:
teapot.setTexTransform(TextureStage.getDefault(),
TransformState.makeHpr(VBase3(0, 90, 0)))

Finalmente, considere que as duas nicas opes para a armao de coordenar a textura
coordenar gerao so " mundo "e" olho "para a raiz e as NodePath NodePath cmera ,
respectivamente. Mas o que se pretende gerar a textura coordenadas em relao a algum
outro n, dizem que o bule de ch em si? As imagens acima so todas muito bem para um
bule de ch que acontece de estar situada na origem , mas suponho que ns queremos o bule
de ch para permanecer o mesmo quando passamos em outro lugar no mundo?
Se voc utilizar apenas MWorldPosition, Ento quando voc mudar a posio do bule de ch
, por exemplo, por pais para um n mvel, o bule parecero mover-se enquanto o seu padro
de textura permanece no local - talvez no o efeito que voc tinha em mente. O que voc
provavelmente foi destinado para o bule de ch para tomar o seu padro de textura junto
com ele como ele se move ao redor. Para fazer isso, voc precisar calcular a textura
coordenadas no espao do n bule , ao invs de no espao do mundo .
Panda3D fornece a capacidade de gerar coordenadas de textura no espao de coordenadas de
um n arbitrrio que voc gosta. Para fazer isso , use MWorldPosition em conjugao com o
projetor da Panda "textura" , que se aplica a transformao relativa entre quaisquer dois
NodePaths arbitrria para transformar a textura , voc pode us-lo para calcular a
transformao do espao em relao ao mundo bule espao , como este:
teapot.setTexGen ( TextureStage.getDefault (), TexGenAttrib.MWorldPosition )
teapot.setTexProjector ( TextureStage.getDefault () , render, bule de ch );
Pode parecer um pouco tortuoso para converter os vrtices bule de espao do mundo para
gerar as coordenadas de textura e, em seguida, converter a textura coordenadas de volta ao
espao bule de novo - afinal, eles no comeam no espao bule ? Teria economizado muito
esforo apenas para mant-los l! Por que no apenas fornecer um Panda MObjectPosition
modo que iria converter coordenadas de textura da posio natural do objeto ?
Essa uma pergunta justa, e MObjectPosition seria uma tima idia para um modelo to
simples como o bule de ch , que , afinal, apenas um n . Mas, para modelos mais
sofisticados , que podem conter vrias sub- ns , cada um com seu prprio espao de
coordenadas , a idia de MObjectPosition menos til , a menos que voc realmente queria
que cada sub -n para ser re- texturizados dentro do seu prprio espao de coordenadas . Ao
invs de oferecer esse recurso de valor questionvel, Panda3D prefere dar-lhe a possibilidade
de especificar as coordenadas espao especial que voc tinha em mente, de forma
inequvoca.
Observe que voc apenas deseja chamar setTexProjector () quando voc estiver usando o
modo MWorldPosition. Os outros modos so geralmente calculados a partir de vetores ( por
exemplo, os normais ), no as posies, e, geralmente, no faz sentido aplicar uma
transformao em relao a um vetor.
Panda3D Manual: Texturas Projetada

Em um seo anterior, Que introduziu formas de aplicar uma transformao explcita a
textura de um modelo de coordenadas, com mtodos como setTexOffset () e setTexScale
(). Alm deste controle explcito , Panda3D oferece um mecanismo simples para aplicar uma
textura automtica transformar cada frame , calculado a partir da transformao relativa
entre quaisquer dois ns.
nodePath.setTexProjector(textureStage, fromNodePath, toNodePath)
Quando voc tiver ativado esse modo , a relao cena -grfico de transformar fromNodePath
para toNodePath- Isto , o resultado de fromNodePath.getTransform toNodePath ()-
aplicada automaticamente como uma textura coordenadas para transformar o textureStage
indicado. O resultado mais ou menos como se voc executou o comando a seguir a cada
frame:
nodePath.setTexTransform(textureStage, fromNodePath.getTransform(toNodePath))
No h necessidade de qualquer fromNodePath ou toNodePath ter qualquer relao com a
nodePath que est recebendo a setTexProjector () convite, eles podem ser quaisquer dois
NodePaths arbitrria. Se qualquer um deles apenas NodePath (), que representa o topo do
grfico.
Isto tem vrias aplicaes teis. Ns j introduziram uma aplicao, Em conjugao com
MWorldPosition, Para mover a textura coordenadas geradas a partir da raiz do grfico para
o modelo em si.
Intervalo animado textura transforma
Outro aplicativo til para um TexProjector permitir a utilizao dos vrios LerpIntervals
Para animar a textura transformar. Embora no existam LerpIntervals que a textura
diretamente animar transforma, voc pode fazer uma LerpInterval animar um NodePath - e ,
em seguida, criar um efeito TexProjector a seguir que NodePath . Por exemplo:
smiley = loader.loadModel('smiley.egg')
lerper = NodePath('lerper')
smiley.setTexProjector(TextureStage.getDefault(), NodePath(), lerper)
i = lerper.posInterval(5, VBase3(0, 1, 0))
i.loop()
Observe que voc no tem sequer a me do NodePath animado para o grafo de cena. No
exemplo acima , temos que configurar o intervalo Eu repetidamente para mover o NodePath
autnomo lerper da posio (0, 0 , 0) para (0, 1 , 0) mais de 5 segundos. Desde smiley
atribudo um TexProjector que copia a transformao da relao NodePath () para lerper-
Isto , a transformao do lquido lerper- isso significa que estamos realmente anima a
textura coordenadas em smiley de (0 , 0) para (0, 1) ( coordenada Z ignorado para uma
textura normal 2-D ).
Texturas Projetada
Outro aplicativo til do TexProjector implementar texturas projetadas- Isto , uma textura
aplicada geometria como se tivesse sido projetado a partir de uma lente , algures no mundo
, algo como um projetor de slides. Voc pode usar esse recurso para aplicar um efeito de
lanterna, por exemplo, ou simples sombras projetadas .
Isso funciona porque o efeito TexProjector faz um truque adicional : se a segunda no
NodePath setTexProjector () chamada acontece a ser um LensNode , o TexProjector
aplica automaticamente matriz de projeo para a textura da lente coordenadas ( alm de
aplicar a transformao relativa entre os ns ).
Para implementar as texturas projetadas, voc precisa fazer trs etapas:
1. Aplique a textura que voc quer para o modelo que voc quer projet-la em , geralmente
em sua TextureStage prpria , de modo que multitextured.
2. Coloque o MWorldPosition TexGen modo do modelo. Isso copia o modelo de cargos em
seu vrtice coordenadas de textura , para TextureStage sua textura.
3. Chamada model.setTexProjector ( textureStage , NodePath () , projector),
Onde projetor o NodePath ao LensNode deseja projeto de.
Para sua convenincia , a classe NodePath define o seguinte mtodo que executa estas trs
etapas de uma s vez :
nodePath.projectTexture(textureStage, texture, lensNodePath)
Por exemplo , poderamos us-lo para o projeto de textura de bambu (" ambi , reeds.png )
para o modelo ripple.egg , como este:

Voc pode mover o projetor do mundo, ou at mesmo alterar o campo de viso da lente , ea
imagem de bambu que segui-lo. ( Na imagem acima , o modelo da cmera e as linhas de
projeo so visveis apenas para fins de ilustrao , normalmente voc no iria v-los. )
Esta imagem foi gerada com o seguinte cdigo (extrado ; clique aqui para o programa
completo ):
ripple = Actor.Actor('ripple.egg')
ripple.reparentTo(render)

proj = render.attachNewNode(LensNode('proj'))
lens = PerspectiveLens()
proj.node().setLens(lens)
proj.reparentTo(render)
proj.setPos(1.5, -7.3, 2.9)
proj.setHpr(22, -15, 0)

tex = loader.loadTexture('maps/envir-reeds.png')
ts = TextureStage('ts')
ripple.projectTexture(ts, tex, proj)
Panda3D Manual: Mapeamento de ambiente simples

Existe uma tcnica clssica em computao grfica em tempo real para fazer os objetos
aparecem brilhante ou reflexiva. chamado mapeamento do ambiente ou s vezes
mapeamento de reflexo ou, neste caso, mapeamento de campo.
Ambiente mapeamento no est traado de raios. Mas uma forma de queijo para obter um
efeito similar. A idia de ambas que , matematicamente, fcil calcular a direo na qual
um raio de luz deve ter vindo antes que saltou fora de um determinado ponto de um objeto
brilhante e entrou em seu olho. Se o processador estava usando ray tracing , que ir seguir
este raio , para cada ponto do seu objeto brilhante , para trs de seus olhos, e determinar o
objeto no meio do raio veio , e isso o que voc v no reflexo.
Ray tracing ainda muito de computao intensiva para ser feito em tempo real. Mas um
vetor de reflexo fcil de calcular por vrtice , e se ns pudssemos fazer um vetor para
uma reflexo (u, v) par de coordenadas de textura , o hardware particularmente bom em
olhar a cor em uma imagem de textura , que corresponde ao (U, v par). Ento, tudo o que
precisamos uma imagem que mostra os objetos em nosso meio.
Em mapeamento de campo, O vetor de reflexo 3-D transformada em uma textura de 2-D
par de coordenadas matematicamente aplicando uma distoro esfrica. Isso significa que o
mapa de ambiente deve ser uma viso do mundo visto atravs de uma lente olho de peixe de
360 graus, ou como refletido em uma esfera brilhante como um ornamento do feriado. Pode
ver porque chamado de mapeamento esfera.

Panda3D pode gerar mapas de campo para voc. O mapa esfera acima foi gerado com o
seguinte cdigo:
scene = loader.loadModel('bvw-f2004--streetscene/street-scene.egg')
scene.reparentTo(render)
scene.setZ(-2)
base.saveSphereMap('streetscene_env.jpg', size = 256)
A idia simplesmente colocar a cmera no meio do seu ambiente, aproximadamente onde o
objeto seria brilhante . Ento, basta chamar base.saveSphereMap ()E uma imagem de mapa
adequado esfera ser gerado e gravado em disco para voc. Note que este recurso novo a
partir de Panda3D 1.1.
Agora voc pode aplicar o mapa de ambiente para praticamente qualquer objeto que voc
gosta. Por exemplo, o bule de ch :
tex = loader.loadTexture('streetscene_env.jpg')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MEyeSphereMap)
teapot.setTexture(tex)

Neste exemplo , voc pode ver que a chave para o mapeamento da rea de Panda definir o
modo TexGen para MEyeSphereMap . Este modo calcula um esfrico (u, v) textura par de
coordenadas com base no vetor de reflexo para cada vrtice do bule. Para que isso funcione,
o modelo deve ter definido normais para todos os seus vrtices ( o bule tem normals bom).
bules Shiny so uma coisa, mas seria bom fazer algo como, digamos, um carro olhar brilhante.
Ns poderamos apenas fazer exatamente a mesma coisa acima, mas o nosso carro tem um
mapa de textura j. Se ns apenas substituir o mapa de textura com o mapa do ambiente que
vai acabar com um carro chrome:
car = loader.loadModel('bvw-f2004--carnsx/carnsx.egg')
tex = loader.loadTexture('streetscene_env.jpg')
car.setTexGen(TextureStage.getDefault(), TexGenAttrib.MEyeSphereMap)
car.setTexture(tex, 1)

Isso parece bastante tolo. Ento, ns realmente preferem usar multitexture aplicar textura
tanto do automvel regular, e uma camada um pouco de brilho em cima disso. Usaremos
Modo Adicionar para adicionar o mapa do ambiente para a cor existente , que apropriado
para um destaque em um objeto brilhante .
Para poder usar o modo Adicionar sem saturar as cores , precisamos para escurecer o mapa de
ambiente substancialmente. Ns poderamos usar qualquer programa de processamento de
imagem para fazer isso, para este exemplo, vamos usar o Panda3D imagem trans- utilidade:
image-trans -cscale 0.2 -o streetscene_env_dark.jpg streetscene_env.jpg
Assim, o novo mapa parecido com este:

Enquanto estamos de consertar as coisas , vamos mover as rodas para um n diferente , para
que possamos atribuir a brilhar s para o metal e corpo de vidro do carro:
car = loader.loadModel('bvw-f2004--carnsx/carnsx.egg')
body = car.find('**/body')
body.findAllMatches('**/FL_wheel*').reparentTo(car)
E agora, o brilho aplicado da seguinte forma:
tex = loader.loadTexture('streetscene_env_dark.jpg')
ts = TextureStage('env')
ts.setMode(TextureStage.MAdd)
body.setTexGen(ts, TexGenAttrib.MEyeSphereMap)
body.setTexture(ts, tex)


Observe que a brilhante destaques so agora bastante sutil , mas ainda atraente,
especialmente quando voc v o movimento do carro.
A tcnica de mapa de domnio no perfeito. O maior problema com ele que voc tem que
prepar-la antes do tempo, o que significa que voc tem que saber exatamente o que ser
refletido em seus objetos brilhantes - impossvel para um objeto para refletir um objeto
dinmico (por exemplo, um carro ao lado ).
Outro problema que do ponto de vista cozido no mapa esfera , de modo que se a cmara
estava a oscilar ao redor para ver o carro do outro lado , as coisas que voc podia ver no
reflexo ainda estaria por trs dos objetos cmera deste lado.
Ambos estes problemas podem ser resolvidos por mapeamento de cubo, Que uma tcnica
mais avanada , entre outras coisas , a aplicao de mapas de ambiente. No entanto , os
mapas cubo nem sempre so ideais, muitas vezes , o mapa esfera venervel realmente a
melhor escolha.
raro que um aplicativo apresenta uma viso closeup de um suave , redondo espelhado
objeto no qual voc pode ver claramente reflexes , como o exemplo acima bule ,
geralmente , so apenas reflexos glinting uma sutil na superfcie , como o carro. Nestes casos,
o mapa esfera ideal , pois no to importante exatamente que As reflexes so , mas
simplesmente que no existe so reflexes. E o mapa esfera a maneira mais rpida e fcil
para processar as reflexes.
At agora, ns s falamos sobre mapas de textura normal 2-D. Comeando com a verso 1.1,
Panda3D tambm suporta o conceito de um mapa de textura 3-D. Esta uma textura
volumtrica : para alm de uma altura e uma largura , ela tambm tem uma profundidade de
:

A textura da imagem 3-D slido durante todo o tempo , se tivssemos que cortar parte do
cubo iramos descobrir que o padro xadrez continua em :

Isto verdade no importa a forma que ns extirpar do cubo :

Alm da usual u e v dimenses de textura , a textura 3-D tambm tem w. Para aplicar uma
textura em 3-D para a geometria , voc vai , portanto, precisa ter textura coordenadas 3-D
(U, v , w) em sua geometria, em vez de apenas o ordinrio (U, v).
Existem vrias maneiras de obter textura coordenadas 3-D em um modelo . Uma maneira
atribuir textura 3-D adequado coordenadas para cada vrtice ao criar o modelo , da mesma
forma voc pode atribuir textura coordenadas 2-D . Isso requer que o pacote de modelagem
(e seu conversor Panda ) apoio textura coordenadas 3-D , no entanto, no momento da redao
deste texto , nenhum dos conversores Panda que actualmente suportam textura coordenadas
3-D .
Mais comumente , textura coordenadas 3-D so atribudos automaticamente para um modelo
com um dos modos TexGen, Especialmente MWorldPosition. Por exemplo, para atribuir
textura coordenadas 3-D para o bule de ch , voc pode fazer algo como isto:
teapot = loader.loadModel('teapot.egg')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition)
teapot.setTexProjector(TextureStage.getDefault(), render, teapot)
teapot.setTexPos(TextureStage.getDefault(), 0.44, 0.5, 0.2)
teapot.setTexScale(TextureStage.getDefault(), 0.2)
O atribui acima textura coordenadas 3-D para o bule com base no (x , y, z ) as posies de
seus vrtices , que uma maneira comum de atribuir textura coordenadas 3-D . O setTexPos
() e setTexScale () solicita, em particular acima so para o modelo de bule , esses
nmeros so escolhidos a escala da textura de modo que sua unidade de cubo inclui o bule.
mapas de textura Armazenamento 3-D no disco um pouco de um problema , uma vez que a
maioria dos formatos de imagem s suporta imagens 2-D. Por conveno , ento, Panda3D vai
armazenar uma imagem de textura 3-D por corte -o em horizontal sees transversais e
escrever cada fatia como uma imagem separada em 2-D . Quando voc carregar uma textura
3-D , voc especifica uma srie de imagens 2-D que Panda3D ir carregar e empilhar como
panquecas para fazer a imagem em 3-D.
A textura da imagem acima de 3 -D , por exemplo, so armazenados como arquivos de
imagem de quatro em separado:

Note que, embora a imagem armazenada como quatro imagens separadas no disco,
internamente Panda3D armazena como uma imagem nica, tridimensional, com altura ,
largura e profundidade.
A conveno Panda3D para nomear as fatias de uma textura 3-D bastante rgida. Cada fatia
deve ser numerada, e todos os nomes devem ser os mesmos, exceto para o nmero e o
primeiro (em baixo) fatia deve ser numerada com 0. Se voc seguiu esta conveno , ento
voc pode carregar uma textura 3-D com um convite como este:
tex = loader.load3DTexture("grid_#.png")
O cardinal ("#") no nome do arquivo passado para loader.load3DTexture () ser preenchido
com o nmero sequencial de cada fatia , para as cargas acima de arquivos chamado "
grid_0.png "," grid_1.png "," grid_2.png ", e assim por diante. Se voc preferir para preencher
o nmero de zeros a fatia com um certo nmero de algarismos , repita o cardinal , por
exemplo, carregar " grid_ # # #. png "iria procurar arquivos com o nome " grid_000.png ","
grid_001.png " E assim por diante . Observe que voc no precisa usar marcas hash mltiplos
contagem superior a 9 . Voc pode contar com to alto quanto voc gosta , mesmo com
apenas uma marca hash , ele s no vai preencher o nmero de zeros.
Lembre-se que voc deve normalmente escolher uma potncia de dois para o tamanho das
imagens da sua textura. Isso se estende at o w tamanho , tambm: para a maioria das placas
grficas , o nmero de fatias de sua textura deve ser uma potncia de dois. Ao contrrio do
normal (U, v) dimenses, Panda3D no ir automaticamente redimensionar sua textura 3-D se
ele tem um poder no- de-dois no tamanho w dimenso , por isso importante escolher
corretamente o tamanho do mesmo.
Os pedidos de texturas 3-D
texturas em 3-D so usados em aplicaes de imagens mdicas e cientficas , mas eles so
usados apenas raramente em programas de jogo 3-D. Uma razo para isso a quantidade de
memria de que necessitam , j que a textura 3-D requer armazenamento (V u w) texels ,
uma textura grande 3 -D pode facilmente consumir uma frao substancial de sua memria de
texturas disponveis.
Mas provavelmente o motivo maior que texturas 3-D so raramente utilizados em jogos que
as imagens de textura em jogos geralmente so pintadas mo , e difcil para um artista
para pintar uma textura 3-D. geralmente muito mais fcil apenas para pintar a superfcie de
um objeto.
Assim, quando as texturas em 3-D so usados em tudo, eles so muitas vezes geradas
processualmente . Um exemplo clssico de uma textura procedural 3-D gro de madeira ,
bastante fcil de definir uma textura woodgrain convincente processual . Por exemplo, clique
aqui para ver um programa Panda3D que gera uma textura woodgrain e armazena-lo como
uma srie de arquivos chamados woodgrain_0.png , woodgrain_1.png , e assim por diante. O
cdigo a seguir aplica-se esta textura woodgrain para o bule , para fazer um bule de ch que
parece ter sido esculpido em um nico bloco de madeira:
teapot = loader.loadModel('teapot.egg')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition)
teapot.setTexProjector(TextureStage.getDefault(), render, teapot)
teapot.setTexPos(TextureStage.getDefault(), 0.44, 0.5, 0.2)
teapot.setTexScale(TextureStage.getDefault(), 0.2)

tex = loader.load3DTexture('woodgrain_#.png')
teapot.setTexture(tex)

No entanto, mesmo em termos processuais geradas texturas 3-D como este so usados apenas
ocasionalmente. Se o algoritmo para gerar a sua textura no muito complexa , pode fazer
mais sentido um programa pixel shader para gerar a textura implicitamente, como seus
modelos so prestados.
Ainda assim, mesmo se for usada apenas ocasionalmente , a textura 3-D continua a ser uma
poderosa tcnica de processamento para se manter em seu bolso traseiro.
Panda3D Manual: Mapas Cube

H um tipo mais especial de mapa de textura : o mapa de cubo, Que introduzido no
Panda3D verso 1.1. Um mapa de cubo semelhante a um textura 3-D, na medida em que
requer textura coordenadas 3-D (U, v , w), Tambm , um mapa de cubo armazenado no
disco como uma seqncia de imagens comuns 2-D.
Mas ao contrrio de uma textura 3-D, que definido pelo empilhamento de um nmero
arbitrrio de imagens 2-D como panquecas para encher um volume , um mapa de cubo
sempre definida com imagens exatamente seis 2-D , que so dobrados para formar um cubo.
As seis imagens de um mapa de cubo so numerados 0-5 , e cada imagem corresponde a uma
face particular do cubo :
imagem 0 O + u (Ou + x) direito (face)
imagem 1 O -U (Ou -X) face ( esquerda)
imagem 2 O v + (Ou + y) Para a frente (face)
imagem 3 O -V (Ou -Y) face (costas)
imagem 4 O w + (Ou + z) face ( para cima)
Imagem 5 O -W (Ou -Z), face (em baixo)
Por + x cara, queremos dizer mais distante da face do cubo no eixo X positivo . Na falta do
Panda3D Z -up sistema de coordenadas , este o direito face. Da mesma forma, o -X face a
face mais distante ao longo do eixo X negativo , ou o esquerda face, e assim por diante para o
Y e Z faces. Uma vez que as coordenadas de um mapa de textura so chamados (U, v , w) em
vez de (X , y, z), tecnicamente mais correto chamar essas as + u e -U faces , embora muitas
vezes mais fcil pensar neles como + x e -X.
Os rostos so definidos de acordo com o seguinte esquema:

Imagine que voc corta o diagrama acima e dobrado em forma de cubo . Voc poderia acabar
com algo parecido com isto :

Note que, quando voc prende o cubo de forma que as indicaes para cada eixo face esto
na direo apropriada ( como na foto acima ), vrios so os rostos de cabea para baixo ou de
lado . Isso devido forma como os fabricantes de placas grficas decidiu fixar o mapa faces
do cubo (e tambm por causa do padro Panda3D sistema de coordenadas ). Mas, na verdade
, no importa o caminho que os rostos so orientados , contanto que voc sempre gerar
imagens mapa do cubo da mesma maneira.
Em certo sentido, um mapa do cubo um tipo de textura da superfcie , como uma textura
normal 2-D. Mas em outro sentido , tambm volumtrico como uma textura em 3-D : cada
ponto, dentro da textura 3-D de coordenadas espao colorida de acordo com a face do cubo
que vem mais prximo . Um modelo de domnio com o cubo mapa aplicada a ele iria pegar os
mesmos seis faces:

Note-se que , enquanto uma textura 3-D atribui um pixel diferente da textura para cada
ponto dentro de um volume, um mapa cubo atribui um pixel diferente da textura para cada
direo a partir do centro .
Voc pode carregar um mapa de cubo de uma srie de seis arquivos de imagem , muito
semelhante maneira que voc carregar uma textura 3-D:
tex = loader.loadCubeMap (' cubemap_ #. png )
Tal como acontece com uma textura 3-D , o ("#") marca hash no nome do arquivo vai ser
preenchido com o nmero de seqncia de imagens, que no caso de um mapa de cubo ser
um dgito 0-5 . O exemplo acima , ento, ir carregar as seis imagens de " cubemap_0.png ","
cubemap_1.png "," cubemap_2.png "," cubemap_3.png "," cubemap_4.png "e" cubemap_5.png
", e montar los em um mapa de cubo.
Panda3D Manual: Mapeamento do Ambiente com Cube Maps


Embora haja outras aplicaes para mapas de cubo, um uso muito comum de mapas como
um cubo mapear o ambiente, Semelhante ao mapeamento de campo. Na verdade , ele
trabalha muito a mesma esfera de mapeamento .
Assim como com um mapa de domnio , voc pode ter Panda3D gerar um mapa de cubo para
voc:
scene = loader.loadModel('bvw-f2004--streetscene/street-scene.egg')
scene.reparentTo(render)
scene.setZ(-2)
base.saveCubeMap('streetscene_cube_#.jpg', size = 256)
O exemplo a seguir carrega o cdigo de um ambiente , coloca a cmera no centro dele, e
gera as seis faces do cubo a partir de um mapa do ponto de vista da cmera:
scene = loader.loadModel('bvw-f2004--streetscene/street-scene.egg')
scene.reparentTo(render)
scene.setZ(-2)
base.saveCubeMap('streetscene_cube_#.jpg', size = 256)
Estas so as seis faces gerados:
Direita:

Esquerda:

Frente:

Back:

Top:

Bottom :

E quando eles so montados em um mapa de cubo , olha como este:

Ou, quando ns aplicamos esse mapa cubo de uma esfera , voc pode ver no h
absolutamente nenhuma emenda entre as extremidades :

Com o cubo mapa salvou -se como acima, voc poderia aplic-lo como um mapa de ambiente
para o bule de ch como este:
tex = loader.loadCubeMap('streetscene_cube_#.jpg')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MEyeCubeMap)
teapot.setTexture(tex)
E o resultado muito parecido com o mapa esfera :

De fato, ele parece to semelhantes que se pode saber porque ns incomodamos . At o
momento, um mapa do cubo parece muito similar a um mapa esfera , exceto que ele
consome seis vezes a memria de textura. Dificilmente impressionante.
Mas como ns mencionamos mais cedo, Existem dois problemas com os mapas que os mapas
esfera cubo pode resolver. Um desses problemas que o ponto de vista permanentemente
cozido no mapa esfera. mapas Cube no tm necessariamente o mesmo problema. Na
verdade , podemos resolv-lo com uma variao simples:
tex = loader.loadCubeMap('streetscene_cube_#.jpg')
teapot.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldCubeMap)
teapot.setTexture(tex)
Ao mudar MEyeCubeMap para MWorldCubeMap, Indicamos que gostaramos que este mapa cubo
para variar o seu ponto de vista como a cmera se move . Agora, o ambiente reflete ir variar
de acordo com a direo que estamos olhando para ele , para que ele mostra o que est por
trs das cmeras em tempo de execuo , em vez de estar sempre mostrando a rea por trs
da cmera quando o mapa do cubo foi gerada , como um mapa esfera deve fazer . Para que
isso funcione corretamente , voc deve se assegurar que a cmara est sem estarem rodados
(ou seja, setHpr (0, 0 , 0)) quando voc gera o mapa cubo inicialmente.
Mesmo com MWorldCubeMap , porm, a imagem ainda gerado antes do tempo , assim que a
reflexo no na realidade mostrar o que est por trs das cmeras em tempo de execuo .
Ela apenas usa a direo atual da cmera para descobrir o que parte da imagem de reflexo
para mostrar .
No entanto , voc pode fazer um mapa de cubo que realmente faz refletir objetos dinmicos
no cenrio , tornando um mapa de cubo dinmico. Isto ser discutido na prxima seo .
Panda3D Manual : Animao Textura automtica
possvel gerar um modelo que roda automaticamente atravs de uma seqncia de texturas
, quando se est no grafo de cena , sem ter que executar uma tarefa especial para lidar com
isso.
Para fazer isso , use o ovo- textura -cards utilitrio de linha de comando. Este programa
ir aceitar uma srie de nomes de textura na linha de comando , e um arquivo de sada do
ovo que gira atravs de cada textura na taxa de quadros especificados:
egg-texture-cards -o flip.egg -fps 30 explosion*.jpg
Isso realmente cria um modelo com um polgono diferente para cada quadro da animao de
textura. Cada polgono colocado em um n separado , e todos os ns so feitos de uma
criana de um n especial chamado SequenceNode.
O SequenceNode um n especial que s chama um de seus filhos em um momento, e ele
gira a lista das crianas a uma taxa de frame particular. Voc pai pode tornar o modelo com e
ele ir automaticamente comear a animar com suas texturas . Se voc precisa para comear
em um quadro especfico , use algo como isto:
flip = loader.loadModel('flip.egg')
flip.find('**/+SequenceNode').node().pose(startFrame)
flip.reparentTo(render)
Por padro , todos os polgonos criados por ovo- textura -cards ter o mesmo tamanho.
Isso significa que todas as suas texturas devem ser do mesmo tamanho tambm. Embora esta
seja uma configurao simples , ele pode no ser ideal para determinados efeitos . Por
exemplo, para animar uma exploso , que comea pequena e cresce mais , seria melhor usar
uma pequena imagem da textura sobre um polgono pequeno quando a imagem pequena, e
tem uma imagem ampliada em um polgono maior quando ele cresce. Voc pode conseguir
este efeito, com o parmetro -p , p- escalas especificando polgono cada frame em relao ao
tamanho da textura correspondente.
egg-texture-cards -o flip.egg -fps 30 -p 240,240 explosion*.jpg
Existem vrios outros parmetros , bem ; uso de ovos de textura cartes -h Para obter
uma lista completa.
Panda3D Manual: Jogando MPG e AVI

Panda agora suporta o formato AVI para texturas em Panda.
Uso
myMovieTexture=loader.loadTexture("myMovie.avi")
myObject.setTexture(myMovieTexture)
O subsistema filme implementado utilizando FFMPEG . Por isso , ele suporta todos os
formatos que FFMPEG suporta. As funes de controle do filme so as seguintes:
movie.play()
movie.stop()
movie.setTime(t)
movie.getTime()
movie.setLoopCount(n)
movie.getLoopCount()
movie.setPlayRate(speed)
movie.getPlayRate()
movie.isPlaying()
Se voc quiser ouvir o udio do filme , bem , voc precisa carreg-lo duas vezes: uma como
uma textura , e uma vez como um arquivo de som :
mySound=loader.loadSfx("myMovie.avi")
Depois, voc pode synchonize o vdeo para o udio:
myMovieTexture.synchronizeTo(mySound)
A partir desse ponto frente , tocando o som far com que a textura de atualizao. Esta
mais precisa que a sincronizao do vdeo manualmente.
Para poder -de-dois grficos hardware limitado
Se o seu hardware de grficos , no d suporte a non poder -de-dois textura, o tamanho da
textura de filme seria deslocado at a prxima potncia maior das duas dimenses. Por
exemplo, voc tem um filme de 640 x 360 em tamanho, a textura gerada seria realmente
1024 x 512. O resultado uma textura que contm um filme no canto inferior esquerdo, e
uma regio pad preto para a direita e poro superior da textura.
Para contornar este limite , voc tem que mostrar apenas a parte inferior esquerdo da
textura. Para ver uma demonstrao completa deste processo, ver o Media Player programa
de exemplo.
Questes
O texure obras de decodificao de vdeo em um frame por frame base e copiar para o buffer
de textura. Como tal , desaconselhvel a utilizao de mais do que uma poucas texturas de
alta resoluo de vdeo , ao mesmo tempo .
Alguns formatos de codificao no funcionam. At agora , o formato DV foi determinada
incompatvel com o Panda.
Panda3D Manual : Transparncia e mistura

Lidar com profundidade Seleo

Normalmente transparncia funciona como esperado no Panda automaticamente, mas s
vezes isso parece dar errado , quando um objeto semi-transparente no fundo parece
parcialmente obscuro objeto semitransparente na frente dele . Isto especialmente provvel
de acontecer com grandes recortes polgono plano, ou quando um objeto transparente
contido dentro de outro objeto transparente, ou quando as partes de um objeto transparente
pode ser visto atrs de outras partes do mesmo objeto.
O problema fundamental que a transparncia correto, na ausncia de suporte de hardware
especiais envolvendo bits framebuffer extra, requer desenho tudo em ordem da mais distante
mais prximo . Isto significa que a classificao de cada polgono - na verdade, cada pixel,
para correo verdade - em forma de volta -a- frente antes de desenhar a cena.
, naturalmente, impossvel separar cada objeto transparente em pixels individuais ou
polgonos para classificar individualmente, tipo assim Panda objetos ao nvel Geom , de
acordo com o centro do volume delimitador. Isso funciona bem 95% do tempo.
Voc executar em problemas com grandes polgonos planos , no entanto, uma vez que estes
tendem a ter as peas que esto longe do centro do seu volume delimitador. A triagem
bounding volume muito provvel que do errado quando voc tem dois ou mais
apartamentos grandes fechar atrs do outro , e visualiz-las um pouco fora do eixo. ( Tente
desenhar um retrato, um dos dois apartamentos , visto de cima, e imagine-se a v-las em
diferentes direes. imaginar tambm que o centro dos volumes delimitadora ).
Agora, h uma srie de solues para este tipo de problema. Nenhuma soluo a certa para
cada situao.
Em primeiro lugar, a melhor coisa a fazer usar transparncia M_dual . Este um modo
especial a transparncia em que as partes completamente invisvel do objeto no so atrados
para o buffer de Z a todos , de modo que eles no tm qualquer chance de obscurecer as
coisas por trs delas. Isso s funciona bem se os apartamentos so recortes tpicos , onde h
uma grande parte slida (alpha == 1.0) e uma grande parte transparente (alpha == 0.0), e no
um monte de peas semi-transparente (0,0 alfa < < 1.0) . tambm um pouco mais caro do
que o modo de renderizao padro do M_alpha , portanto, no ativado por padro no
Panda. Mas palettize ovo vai lig-lo automaticamente para um determinado modelo se
detectar texturas que parecem recortes de natureza adequada , que outra razo para usar
ovo palettize se voc no for us-lo j.
Se voc no usar ovos palettize (voc deve realmente , voc sabe) , voc pode apenas mo -
editar o ovo arquivos para colocar a linha :
<Scalar> alpha { dual }
dentro da referncia <Texture> para as texturas em questo.
A segunda opo mais fcil usar M_multisample transparncia, que no tem qualquer
problema ordenando a todos , mas s fica bem em muito os cartes de alta qualidade que
tm bits multisample especiais de apoio suavizao de tela cheia. Alm disso, no presente,
s fica bem nessas placas high-end em modo OpenGL (desde nossa pandadx drivers no
suportam M_multisample explicitamente agora). Mas se M_multisample no suportada por
um hardware especfico ou panda driver , ele automaticamente retorna ao M_binary , que
tambm no tem quaisquer problemas de ordem , mas sempre tem as bordas serrilhadas ao
longo da borda do corte . Isso s funciona bem em imagens de textura , que representam
recortes , como M_dual acima.
Se voc usar palettize ovo, voc pode acoplar M_multisample modo , colocando a palavra " ms
" em linha com a textura (s). Sem palettize ovo , a mo -editar o ovo arquivos para colocar a
linha :
<Scalar> alpha { ms }
dentro da referncia <Texture> para as texturas em questo.
Uma terceira opo mais fcil cortar um ou ambos os modelos concorrentes em pequenos
pedaos , cada um dos quais pode ser classificado de forma independente pelo Panda. Por
exemplo , voc pode dividir um polgono em uma grande rede de pequenos polgonos , ea
classificao mais provvel que seja preciso para cada parte (porque o centro da bounding
volume est mais prximo do pixels). Voc pode tirar uma foto para ver como isso funciona.
Para fazer isso corretamente, voc no pode simplesmente fazer uma grande malha de
pequenos polgonos , desde Panda vai fazer uma malha em um nico Geom tristrips , ao
contrrio, ele precisa ser separado malhas , de modo que cada um vai se tornar seu Geom
prpria . Obviamente, isso um pouco mais caro tambm, j que voc est introduzindo
vrtices adicionais e adicionando mais objetos para a lista de classificao , para que voc
no quer ir muito louco com a pequenez de seus polgonos.
A quarta opo simplesmente desabilitar a profundidade de escrever sobre seus objetos
transparentes. Esta mais eficaz quando voc est tentando representar algo que pouco
visvel , como o vidro ou uma bolha de sabo . Fazendo isso no melhora a probabilidade de
classificao correta, mas tendem a fazer os artefatos de uma classificao incorreta menos
bvia. Voc pode conseguir isso usando a opo de transparncia " blend_no_occlude " em um
arquivo de ovo , ou explicitamente desativar a profundidade de escrever em um modelo
carregado com node_path.set_depth_write (false). Voc deve ter cuidado apenas com a
profundidade desativar escrever sobre as peas transparentes, e no nas partes opacas.
A opo final fazer com que os pedidos de classificao explcita a Panda. Isso muitas
vezes o ltimo recurso porque mais difcil, e no generalizar bem, mas tem a vantagem de
no adicionar sanes adicionais de desempenho, a sua cena . S funciona bem quando os
objetos transparentes podem ser classificados de forma confivel com relao a tudo o resto
para trs. Por exemplo, as nuvens no cu pode ser estabelecida de forma confivel antes de
quase tudo no cenrio , exceto o prprio cu . Da mesma forma, um grande plano que
contra uma parede opaca pode confiantemente ser elaborado depois de todos os objetos
opacos , mas antes de qualquer outro objeto transparente, independentemente do local onde
a cmera passa a ser colocado em cena. Veja howto.control_render_order.txt para obter mais
informaes sobre explicitamente controlar a ordem de renderizao.
Panda3D Manual: Gesto de Textura

diferentes placas de vdeo fornecem diferentes quantidades de memria de textura. Se voc
estiver carregando um monte de texturas diferentes, especialmente se forem grandes, voc
pode facilmente consumir toda a sua memria de texturas disponveis. Em princpio , isso no
deve causar problemas , contanto que voc no tem todas as suas texturas na tela ao mesmo
tempo: tanto OpenGL e DirectX so supostos expulsar automaticamente texturas de memria
de grficos conforme necessrio.
Na prtica, nem sempre esse trabalho de forma limpa . Em algumas placas grficas integradas
, a " memria grfica " na verdade seu sistema de memria , por isso nunca o driver de
grficos deve despejar texturas - mas se voc carregar texturas demais, pode no haver
memria suficiente para sua aplicao. Alm disso, alguns drivers de vdeo tm bugs
importantes que se manifestam como comear a abordagem do limite de sua memria grfica
, causando estranhas renderizao ou at mesmo falhas.
Por estas razes, pode ser til para limitar a quantidade de memria grfica seu aplicativo
usa . Panda oferece vrias ferramentas para ajudar com isso.
Automaticamente reduzindo texturas
Voc pode reduzir texturas automaticamente medida que so carregados. A maneira mais
fcil de fazer isso colocar uma linha como:
texture-scale 0.5
em seu arquivo Config.prc . O exemplo acima todas as texturas escala por um fator de 0,5 em
cada dimenso (para uma reduo global de 1 / 4 do requisito de memria total). Se h
determinadas texturas , que no devem ser escalados , texturas , por exemplo, GUI, voc
pode exclu-los com frases como :
exclude-texture-scale digits_*.png
exclude-texture-scale gui*.jpg
Ativando compresso de textura
Outra possibilidade a de habilitar e usar Texture Compression, Conforme descrito na
prxima pgina . Se suportado pela sua placa grfica, isto ir reduzir drasticamente os
requisitos de memria de textura , para 04/01 ou 08/01 , do original . Existe alguma reduo
de qualidade, mas no tanto como a reduo da qualidade que voc deseja obter a partir de
downscaling as texturas pelo montante equivalente. Tambm possvel ativar a compresso
de textura em conjugao com o escalonamento de textura.
Limitar o uso de memria grfica total
Finalmente, pode ser prudente limitar a quantidade de memria grfica que tenta usar o
Panda , com uma linha como:
graphics-memory-limit 67108864
O exemplo acima impe um limite de 64MB (64 * 1024 * 1024) na memria elementos grficos
que Panda tentar usar . Esta pode ser uma boa idia para evitar a alocao de texturas
fugitivo em cartes grficos integrados sem limite de textura fixo, ou para contornar
bugueiros grficos que deixam de funcionar quando voc usa muito. Panda vai
automaticamente comear a descarregar texturas quando o limite especificado for excedido,
mesmo se o driver de grficos que permitem alocar mais .
Idealmente, seria timo para consultar a quantidade de memria grfica til fornecida pelo
carto, e definir este como o limite de memria , grficos , infelizmente , isso impraticvel
, por vrias razes , incluindo as razes acima expostas . Normalmente, se voc deseja que
seu aplicativo para trabalhar em uma variedade de hardware, voc ter que vir acima com
um punhado de configuraes padro e permite ao usurio selecionar entre eles , de acordo
com seu prprio conhecimento das capacidades de seu hardware.
Note que os grficos -memory-limit um novo recurso do Panda, e no est disponvel em
verses anteriores Panda3D 1.6.
uso de memria Acompanhamento
Voc pode ver quanta memria grfica que voc est consumindo realmente com o PStats
ferramenta. Selecione a opo " A memria de grficos "opo. Este grfico mostra a
quantidade de memria necessria para a tela ( ativos ) e inativos ( escondido ) texturas.
Tambm inclui a memria requerida para buffers de vrtice e ndice , embora estes
geralmente so muito menores do que os seus requisitos de memria de textura.
Panda3D Manual: Texture Compression

Voc pode estar familiarizado com os formatos de arquivo de imagem como JPEG , que pode
comprimir os dados de imagem dramtica e fazer arquivos de imagem muito menor do que
seria de outra forma , a troco de sacrificar um pouquinho a qualidade da imagem original.
compresso JPEG s se aplica para o tamanho da imagem em disco , no entanto. Uma vez que
voc carregar uma imagem de textura na memria, se ela veio de um JPEG , PNG, TGA ou
arquivo , ele sempre pega a mesma quantidade de memria de textura na sua placa grfica
(baseada no tamanho da textura ).
Existe uma opo diferente , no entanto, para comprimir imagens de textura na memria. A
maioria das placas grficas modernas pode usar um punhado de tempo de execuo de
algoritmos de compresso para processar directamente a partir de uma textura que foi
comprimido em memria. Isso chamado de compresso DXT . No realmente muito
parecido com compresso JPEG internamente , mas voc pode pensar nisso da mesma forma .
Ela tem algumas coisas em comum : ele reduz o tamanho da imagem dramaticamente (4
vezes ou at 8 vezes menor ), e sacrifica um pouco de qualidade de imagem.
Runtime compresso de textura
A maneira mais fcil de permitir imagens comprimidas textura colocar o seguinte no seu
arquivo Config.prc :
compressed-textures 1
Isso vai pedir o driver de grficos para comprimir cada textura como ele carrega. Isso significa
que ele tem um pouquinho mais de tempo para carregar cada textura, mas a textura
resultante ter muito menos espao na memria de textura.
H uma vantagem importante para comprimir as texturas em tempo de execuo da seguinte
forma: o driver de grficos ser capaz de compactar todas as texturas usando qualquer
algoritmo de compresso de textura entende , DXT ou no. Nem todas as placas grficas
suportam todos os algoritmos de compresso , assim que usar esta opo permite ao condutor
escolher o melhor algoritmo que suporta. Se o driver de grficos no suporta os algoritmos de
compresso em tudo, ele simplesmente ir carregar as texturas uncompressed . De qualquer
forma, sua aplicao ainda ser executado e todas as suas texturas sero visveis.
TXO formato de arquivo
Panda tem um formato de arquivo nativo para o armazenamento de imagens de textura ,
chamado TXO ( a sigla de " objeto de textura ). Isto semelhante aos arquivos BAM. Um
arquivo TXO contm todos os dados de textura da imagem em um formato muito semelhante
representao interna do Panda , de modo que ele carrega na memria muito rapidamente.
Mais importante , talvez , os arquivos podem opcionalmente armazenar TXO pr-comprimido
imagens de textura . Voc pode usar o comando:
egg2bam -txo -ctex model.egg -o model.bam
converter o modelo para um arquivo de BAM, e todos os seus arquivos de texturas para TXO ,
com os dados da imagem pr-comprimido dentro do TXO arquivo para que ele no precisa ser
compactado em tempo de execuo posterior. (Voc pode precisar especificar " pandagl "em
vez de " pandadx9 "como motor de renderizao quando voc executar o comando egg2bam -
no momento da redao deste texto , no havia problemas com o uso da Panda DirectX driver
em modo offline como este. Todavia, os arquivos resultantes TXO carga sobre o OpenGL ou
DirectX em tempo de execuo ).
TXO arquivos tm os mesmos inconvenientes como arquivos BAM : eles esto vinculados a uma
determinada verso do Panda , de modo que voc pode precisar de regener-los quando voc
vem actualizar a sua verso Panda.
A maior desvantagem para o armazenamento de imagens pr-comprimido textura desta
maneira que seu aplicativo pode no funcionar em todas as placas grficas . Nem todas as
placas grficas suportam todos os tipos de compresso DXT, e se voc tentar carregar um
arquivo TXO que uma placa grfica no entende , simplesmente no sero carregados. Assim,
o pr- comprimir todas as suas texturas pode tornar o aplicativo mais porttil.
DDS arquivo de formato
Alm de nativos Panda TXO formato de arquivo , existe um formato razoavelmente padro
chamado DDS , que tem algumas das mesmas propriedades de TXO . Como TXO , voc pode
armazenar pr- imagens compactadas em um arquivo DDS. A maior vantagem do formato de
arquivo DDS que j existem vrias ferramentas disponveis na internet para gerar arquivos
DDS , incluindo plugins GIMP e Photoshop. (Note, no entanto, que carregar arquivos DDS um
novo recurso do Panda, e esses arquivos no so suportados nas verses antes Panda 1.6. )
Gerar seus prprios arquivos DDS tem vrias vantagens, o principal deles que voc tem
controle completo sobre os artefatos de compresso de sua textura. No entanto, tem as
questes de portabilidade mesmo que o armazenamento de imagens de textura pr-
compactados em arquivos TXO : existe a possibilidade de algumas placas grficas no
suportam a compresso de textura que voc usou , caso em que ele simplesmente no ir
carregar.
Textura cache
Existe um compromisso entre compresso dinmica e pr- comprimido texturas : voc pode
pedir Panda para comprimir texturas em tempo real, e salve a imagem resultante comprimido
para um TXO arquivo no disco. A prxima vez que voc carregar a textura particular, ele ir
carregar rapidamente a partir de seu arquivo TXO . Desde que o arquivo foi gerado por TXO
driver do usurio grfica, ser presumivelmente o uso de um algoritmo de compresso
suportados.
Para ativar esse recurso , basta inserir as seguintes linhas no seu arquivo Config.prc :
compressed-textures 1
model-cache-dir /c/temp/panda-cache
model-cache-compressed-textures 1
Onde o modelo cache - dir especifica qualquer pasta no disco (que ser criado se no existir).
Note que o modelo cache -dir j pode ser especificado , o padro de distribuio de Panda
especifica um modelo de cache para acelerar o carregamento de arquivos BAM.
DDS como formato de arquivo , a varivel de modelo cache -comprimido , texturas um novo
recurso no Panda, e no est disponvel em verses anteriores 1.6.