terça-feira, 15 de fevereiro de 2011

NeoTextureEdit gerador de textura Open Source



NeoTextureEdit é um programa open source (GNU LGPL v. 3) fácil de usar gráfico baseado em textura perfeita editor processual. Usando funções de base contínua pode gerar imagens de resolução arbitrária, sem degradação da qualidade. Sua principal finalidade é produzir texturas de alta qualidade para aplicações de renderização em tempo real que podem ser armazenadas em alguns KB e sintetizada na inicialização do aplicativo. Mas também pode ser usado para gerar imagens-off line.

Opinião do Blogger:
Vale a pena conferir o site do desenvolvedor e baixar a ferramenta, muito útil e simples de usar.

Como se tornar um profissional da indústria de games



O co-fundador da desenvolvedora brasileira Mojjo.de dá dicas sobre como entrar nesse mercado e preparar seu próprio jogo.
Uma matéria muito interessante sobre profissionais em Game, confira aqui.

sexta-feira, 4 de fevereiro de 2011

Função de ScreenShot durante o jogo - ScreenMaker

Imagem Ilustrativa

Muitas vezes gostaríamos de salvar imagens durante um jogo ou passeio virtual 3d no blender, mas muitos inclusive eu não tinham idéia de como fazer. Dando uma olhada na API da BGE achei uma função chamada 'makeScreenshot()' do módulo Rasterizer que trata da renderização da imagem e tem muitas funções interessantes como coordenadas do mouse, tamanho da tela em pixel e por ai vai.
A função makeScreenshot() é muito simples de ser usado é só  colocar o nome do arquivo que será salvo no parâmetro da função Ex: Rasterizer.makeScreenschot('minha_imagem') e pronto. A imagem será salva na extensão jpg.

Imagem geral do template

Vamos para a lógica do template:
-Criamos um script python que irá fazer o processo de salvar a imagem de preferência ligado na câmera.
-Associamos um sensor do tipo keyboard(teclado) que irá disparar a função de salvar a imagem.
-Criar uma variável no Add Property que será o nosso contador de fotos.

Painel de Logica da BGE

Tirando várias fotos:
O script que desenvolvi tem a função de salvar um arquivo de imagem sempre que uma determinada tecla for pressionada e salva a imagem com um nome diferente em ordem crescente Ex: imagem0, imagem1 etc...

Script Python
____________________________________________________________

# Feito por Marcos Amaral (racom)
# em 27/01/2011


import Rasterizer #MODULO RESPOSAVEL PELA RENDERIZAÇÃO 

import GameLogic as g #MODULO DA BGE

cont = g.getCurrentController() #PARA OBTER OS CONTROLADORES, ACTUADORES E SENSORES
obj = cont.owner #PROPRIETARIO DOS CONTROLADORES

key = cont.sensors['key'] #OBTEM O SENSOR DE TECLADO

arquivo='imagem'+str(obj['contador']) #CRIA O NOME DO ARQUIVO

# SALVA screenshot
if key.positive:
Rasterizer.makeScreenshot(arquivo) #FUNCAO QUE SALVA A IMAGEM
obj['contador'] += 1 #SOMA MAIS UM AO CONTADOR
____________________________________________________________


Download do template:  screenshot.blend


É isso ai, espero que tenho gostado, em breve mais tutoriais sobre BGE.
Até mais!  \o



quinta-feira, 3 de fevereiro de 2011

Template Game Engine


Estou disponibilizando um template criado por mim e usado na oficia do IV Conferência Nacional Blender Pro. Ele trata de funções básicas para se fazer um jogo utilizando Python Script. O código contém comentários para facilitar o entendimento do mesmo. Bons estudos e bom divertimento.

Download do arquivo: script_python.blend

quinta-feira, 30 de dezembro de 2010

Desenvolvimento de IA com BGE

Esse material é parte da Palestra que ministrei na IV Conferência Nacional - Blender Pro, fala sobre lógica de programação, Pathfinder (encontrar o caminho) para jogos e um arquivo .blend demonstrativo.
















 link RTS.blend

quinta-feira, 16 de dezembro de 2010

Movimento de Câmera vista de cima




Em jogos de RPG ou de RTS se utiliza muito a visão de cima, a navegação pelo cenario com a câmera pode ser uma dificuldade há mais. A proposta aqui é a movimentação da câmera pelas bordas da área de visão, como no video abaixo:




Você pode reparar que ao movimentar o cursor do mouse para perto das bordas da janela, "o cenário se desloca", isto é a câmera se desloca em relação ao cenário.

Como funciona o template?
Precisamos criar um script python que saiba da localização do cursor mouse e as dimensões da janela, em seguida comparar a posição atual do cursor em relação aos limites da tela, então criamos aréas de ação do cursor.


Assim que o cursor atingir umas das área de ação a câmera se desloca na direção da área ativa e quando sai da área para o deslocamento.


Os elementos do template:
Ativos - Câmera ligada(parenteada) ao Empty, no qual vai no Painel de Lógica um sensor do tipo Always e outro de Mouse/Moviment, ligados ao Controlador Python.

O Script Python:



import Rasterizer
Rasterizer.showMouse(1)
w = Rasterizer.getWindowWidth()
h = Rasterizer.getWindowHeight()
import GameLogic as g
from GameLogic import *

cont = getCurrentController()
ow = cont.owner

mousesensor = cont.sensors['move']
campos = ow.position

x = mousesensor.position[0]
y = mousesensor.position[1]

screenposx = 1.0*(x - w/2) / w
screenposy = 1.0*( ( h - y ) - h/2 ) / h

#deltax = campos[2]/1
#deltay = campos[2]/1
deltax = campos[2]/1.265
deltay = campos[2]/1.84

newposx = campos[0] + screenposx * deltax
newposy = campos[1] + screenposy * deltay
newposz = 0

newpos = [newposx,newposy,newposz]

print y
#print L,l
#print screenposx, screenposy
#print newposx,newposy

#DETECTA OS LIMITES DE AÇAO DA TELA
if y < 50:
up="on"
else:
up="off"
if y > h-50:
down="on"
else:
down="off"
if x < 50:
left="on"
else:
left="off"
if x > w-50:
right="on"
else:
right="off"

vel = 0.1

if up=="on":
ow.applyMovement([0,vel,0],1)
print "up"
# down 

elif down=="on":
ow.applyMovement([0,-vel,0],1)
#print "down"

# left
elif left=="on":
ow.applyMovement([-vel,0,0],1)
print "left"

# right
elif right=="on":
ow.applyMovement([vel,0,0],1)
print "right"


 Conclusão:
Esse template demonstra os princípios do funcionamento de Movimento de câmera, com ele você pode usar de base para seus projetos e incrementar mais funções.

Download do template: aqui

quinta-feira, 9 de dezembro de 2010

Drag and Drop - Arrastar e Largar

Drag and Drop 3D - Arrastar e Largar



Conceito
Nas interfaces gráficas de computadores, drag-and-drop (arrastar e largar) é a ação de clicar em um objeto virtual e "arrastá-lo" a uma posição diferente ou sobre um outro objeto virtual. De maneira geral, ele pode ser usado para invocar diversos tipos de ações, ou criar vários tipos de associações entre dois objetos abstratos.

A seqüência básica de ações relacionadas ao drag-and-drop é:
  • Clicar, e manter o botão do mouse ou outro dispositivo semelhante apertado, para "agarrar" o objeto,
  • "Arrastar" (drag) o objeto/cursor à posição ou localização desejada,
  • "Largar" (drop) o objeto, soltando o botão pressionado.
Neste Tutorial iremos abordar um Drag and Drop um pouco diferente, por se tratar de um  Drag and Drop 3D, isso quer dizer que diferentemente de um porcedimento 2D onde só um angulo de visão é permitido podemos posicionar nossa camera em qualquer ângulo para deslocar o objeto.


Vamos para a lógica do template.
Consiste basicamente em o ponteiro do mouse estar sobre o objeto que se deseja deslocar.
Ao clicar com o botão esquerdo do mouse, uma função pega as propriedades do objeto e verifica se este possui tal propriedade para permitir o deslocamento.
Se este apresentar esta propriedade sua posição será a aposição do mouse, enquanto o botão do mouse permanecer precionado, assim que solto o botão do mouse o objeto fica na posição atual.

Construindo o Template.

1º Passo - Adicionar o objeto ou objetos, adicione uma propriedade no objeto no painel Game Logic (F4) em Add Property com o nome de ativo.


2º Passo - Criar um script Python como descrito abaixo e liga-lo a câmera.

import Rasterizer
Rasterizer.showMouse(1)

import GameLogic as g
from GameLogic import *

cont = getCurrentController()
own = cont.owner
mouseover = cont.sensors['MOverAny']
lmb = cont.sensors['LMB']

hitLoc = mouseover.hitPosition #COORDENADAS DA POS DO MOUSE
hitObj = mouseover.hitObject #OBJ Q ESTA SOB O MOUSE

hitLoc=hitLoc
posx=hitLoc[0]
posy=hitLoc[1]
posz=hitLoc[2]

cena=g.getCurrentScene().objects


if hitObj.has_key('ativo') and lmb.positive:
    #print hitObj  #Use o print para visualizar o obj na linha de comando
    obj=hitObj
    obj.position = [posx,posy,1]

3º Passo  - Adcionando sensores a câmera:
Adicione um sensor Mouse do tipo Mouse over any.
Um sensor Mouse do tipo Movement.
Um sensor Mouse do tipo Left button.
Ligue-os ao controlador Python como descrito na figura abaixo.


Agora é só testar teclando P e clicar e manter precionado sobre o objeto, mova o mouse e solte o clique, se tudo estiver certo vocề terá deslocado o objeto de lugar.
Esse template poderá ser a base para algum jogo ou parte dele em seus projetos.
Bom proveito!

Download template: aqui