Cursos e Bibliotecas Ver Mais

Galeria 3D1 Ver Mais

new   Belo Horizonte - MG
An3dre   Araras / SP - SP
J.F.Verissimo   Recife - AC
thilima3d   Brasil - AC
Jomar Machado   Rio de Janeiro - RJ

Portfólios Ver Mais

atylla   RN - PA
johnnybise   São Paulo - AC
tiagofaller   Passo Fundo-RS - RS
Marcelo Guarrata   Maringá - PR

GRUPO DE ESTUDO: MAXScript

Por: tiagodmed  

Em: 11/05/2009 21:18

Olha o Help do max infelizmente não ta me ajudando tanto quanto eu imaginei :S Sem falar que em um grupo de estudo é ótimo que essas dúvidas surjam, pois vai ter pessoas com todo tipo de nível de conhecimento usufruindo disso.
E aí pessoal, demorei um pouco pra postar de novo porque a quantidade de trampo essa semana não tava deixando! hehehehe Poisé, o lance dá variável é bem simples mesmo, já o igual "normal" seria == se não me engano... Quanto aos estudos de Maxscript, tenho tentado fazer ferramentas conforme a necessidade e essa semana surgiu uma interessante... Eu queria fazer um pass (Render Element) de ID de material (Material ID) pra composição e, pra isso, precisava setar um ID de Material (effectschannel pro Maxscript) pra cada material da cena. Como, no caso, eram muitas cenas, daria muito trabalho setar tudo na mão e eu resolvi tentar fazer um script. Depois de horas "apanhando" funcionou muito bem! Usei algumas coisas que tinha aprendido antes (e entendi melhor como funcionam) e aprendi várias outras novas! Ficou um código relativamente simples. Logo mais posto ele aqui explicando como funciona, acho que pode ser útil pra mais alguém! Um abraço pra todos!!
Alan Starship http://starship77.blogspot.com
Ola pessoa, quero participar desse grupo de estudos, mas pelo oq eu vi, não temos muitos desafios aqui para buscarmos juntos soluções. Agora não estou conseguindo pensar em nenhum, mas se alguem tiver manda ai.
www.hermidacg.com
E ai thempus, a meu ver os desafios aparecem nas coisas mais simples, por exemplo, quando é que eu ia imaginar que pra atachar 2 lines precisava usar um comando especial addweld pq o listner não grava a ação dele unindo as lines :P. Esses dias eu fui fazer um teste simples, na verdade estava explicando a um amigo sobre mapeamento, como ele usa uma versão do max inferior a minha, o que eu fiz... liguei o listner e gravei a modelagem que eu fiz. Até ai tudo bem, mas o lance é que tem determinadas coisas que o listener não pega, algumas ele pega a mais e a gente tem que limpar o codigo depois, mas é exatamente ai que entra o desafio, conseguir colocar no script esses comandos que o listner não pega. Pode ser uma coisa bem simples, como por exemplo criar uma primitiva nova e já mapeada. Mas desafio, desafio mesmo eu to com um aqui, mas infelizmente não tive mais tempo de mexer nisso. Eu tinha empacado na hora de juntar um wire parameter ao attribute holder, agora depois de apanhar eu consegui fazer. Mas me deparei em outro problema que se resume no seguinte. Eu tenho uma camera e criei um controle pra ela, agora eu quero adicionar a esse controle a posibilidade de trocar a lente da camera, porém o único parâmetro da camera para essa troca é o FOV. Eu tenho um codigo aqui que faz a troca correta, mas não sei como colocar isso em uma caixa de texto por ex. onde eu possa digitar o valor que quero pra lente. Não sei se consegui explicar bem o problema, o código que tenho foi o Thunndro que me passou, é o seguinte: cria uma variavel pra ser a lente....chama de LENTE Por exemplo. entao faz um linha assim: Lente = cameraFov.MMtoFOV 65 -- 65 eh sera sua lente entao vc addiciona a variavel a camera: entao fica : $Camera.fov = LENTE Depois que ele me passou isso eu não tive mais tempo de mexer, então não consegui desenvolver nada em cima disso, mas ai esta algo que já pode ser considerado desafio. ;)
tiago, n sei se entendi muito bem oq vc ta precisando, mas de qq forma escrevi um codigo aqui do q entendi ve se é isso: [code:1:4837e994a6] try(destroydialog roll_camerafov)catch() --essa linha tenta fechar rollout caso esteja aberto para evitar q se acumulem varias janelas repetidas enquanto testamos o script rollout roll_camerafov "Ajuste de lente da camera" --define como sera o rollout q vamos criar ( spinner sp_camerafov "mm" range:[0,1000,65] --um spinner q vamos utilizar para controlar o fov da camera selecionada on sp_camerafov changed variavelqualquer do -- aqui diz que quando o spinner tiver o valor alterado executar ações definidas ( for i in selection where (superclassof i == camera) do i.fov = cameraFov.MMtoFOV variavelqualquer -- dentro dos objetos selecionados (podem ser varias cameras) ele vai testar apartir do primeiro ate o ultimo SE é uma camera, se for camera, ele vai setar o fov para o valor do spinner. ) ) createdialog roll_camerafov --cria uma caixa de dialog com o rollout especificado [/code:1:4837e994a6] codigo sem comentarios [code:1:4837e994a6] try(destroydialog roll_camerafov)catch() rollout roll_camerafov "Ajuste de lente da camera" ( spinner sp_camerafov "mm" range:[0,1000,65] on sp_camerafov changed variavelqualquer do ( for i in selection where (superclassof i == camera) do i.fov = cameraFov.MMtoFOV variavelqualquer ) ) createdialog roll_camerafov [/code:1:4837e994a6]
www.hermidacg.com
WOW é isso ai mesmo cara :D, agora vou tentar colocar isso no attributte holder, mas antes vou dar uma estudada nisso que vc fez :)
po eu tava torcendo pra n ter acertado oq vc queria, pra continuar tentando outras coisas hehehe, brincadeira. Qualquer coisa é so avisar!
www.hermidacg.com
huahuahauahua, bom eu ando um pouco atucanado aqui nos últimos dias, mas logo eu penso em mais alguma coisa que pode ser interessante :D E assim que der eu ajusto o script que to montando pra compartilhar aqui :D
E aí galera, taí o código que eu tinha falado antes, foi mal a demora! Sem os comentários: [code:1:7527f817f0]( local id = random 0 15 for x in selection do ( if x.material != undefined then ( if classof x.material == Multimaterial then ( for y in x.material.materialList do if id >= 15 then id -= 15 else y.effectsChannel = id+=1 ) x.material.effectsChannel = id id += 1 if id >= 15 then id -= 15 ) ) )[/code:1:7527f817f0] explicando: o "local id = random 0 15" coloca um número randomico entre 0 e 15 na variável "id", assim, cada vez que eu clicar eu tenho IDs diferentes para os meus materiais. O Max só permite 16 variações de ID de material, por isso o 0 a 15... "if x.material != undefined then" testa se o objeto selecionado tem algum material em primeiro lugar "if classof x.material == Multimaterial then" agora o teste se o material pertence a classe "Multimaterial" pois, se ele pertencer, um ID terá que ser setado para cada sub-material e não apenas para o material pai... o interessante aqui foi descobrir como fazer para saber a classe que o Multi/Sub-Object pertencia. Descobri pelo MaxScript Reference que digitando classof no listener, vc descobre a classe de qualquer coisa. É sempre melhor se referir a algo pela sua classe e não pelo nome, pois o nome pode variar e a classe não... ;) "for y in x.material.materialList do" esse é um for que determina que a ação seguinte vai ser executada para cada membro do array "material.materialist" que é uma propriedade do multimaterial do Max. "if id >= 15 then id -= 15" como o Max só permite IDs de zero a 15, caso o id já fosse quinze (ou mais, apesar de impossível) o valor de ID seria subtraído por quinze, voltando assim a zero, ou seja cada vez que ele chega no valor máximo, ele começa do zero de novo... finalmente: "y.effectsChannel = id+=1" o effectschannel (ID de material) vai ser o valor de id + 1. Isso faz com que nenhum material receba o valor zero (que eu reservo para todos os outros que não precisam de ID) e o próximo material tenha um valor a mais, ou seja, se esse foi 2 o outro é 3, se foi 3 o próximo é 4 e por aí vai até chegar em 1 novamente... o resto é a mesma coisa para os materiais que não são multi/sub... é isso! Espero que ajude alguém! Um grande abraço para todos!!
Alan Starship http://starship77.blogspot.com
Poh galera fico lendo os posts o babando com o "poder" dos scripts. Preciso por isso na minha lista de coisas para aprender. To de olho por aqui. Abraço

Faça o login para poder comentar

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 710368.

Total de membros registrados: 137788

Últimos membros registrados: sugardefenderprijs, pokebal02, Pokebal026, LipozemSouthAfricaReview, fernandadias371, Tomasleal-, moilveira, Jandir .

Usuário(s) on-line na última hora: 442, sendo 3 membro(s) e 439 visitante(s).

Membro(s) on-line na última hora: LipozemSouthAfricaReview, sugardefenderprijs, pokebal02.

Legenda: Administrador, Especial, Moderador, Parceiro .

3D1 © Três D1 © 1999-2024. Todos direitos reservados.