Posts Tagged ‘3d’

Tron game – first test

Monday, April 6th, 2009

Alguns dias atráz eu postei um experimento de um PaperPlane que eu fiz para testar um controle de vôo, mas durante o teste eu me lembrei do filme Tron pelo visual e tive a idéia de transformar aquilo em um jogo. Foi essa a razão de colocar aquele rastro no avião.

Bom, esse é o primeiro teste do que pode ser tornar um jogo multiplayer baseado no Tron. Provavelmente eu vou mudar o visual, mas o trabalho estará na
construção da AI, detecção de colisão e comunicação entre os jogadores. Espero não desistir desse projeto, mas por enquanto divirta-se dirigindo sua moto.

tron

Papervision3D – Max3DS Parser bug

Friday, March 27th, 2009

Desde que o papervision adicionou o Max3DS parser, eu venho usando ele invés de trabalhar com DAE. Entretanto existe um bug que eu notei quando importei um modelo assimétrico na minha cena. Ele estava espelhado no eixo X. Como estava correndo eu tomei o cmainho mais fácil, espelhei meu modelo antes de exportar o arquivo 3ds.

Depois disso eu tentei mudar o parser para importar o arquivo corretamente mas estava me tomando mais tempo do que eu tinha, então escrevi esse método para concertar o mesh depois do parsionamento.

Aqui está minha cena no 3D Max

objects

Note que o cubo está atrás da chaleira e o cilindro na frente dela.

Aqui está uma imagem da cena no PPV quando eu importo eles usando o Max3DS

objects_fliped

Depois de rodar meu script

objects_normalized

Eu não testei ele para modelos mais complexos, mas ele vai funcionar em 90% dos casos.

Aqui está o script:

normalize(object3ds);
 
function normalize(max3ds:Max3DS):void{
	max3ds.rotationX = 0;
	max3ds.rotationY = 0;
	max3ds.rotationZ = 0;
 
	for each(var mesh:DisplayObject3D in max3ds.children){
		mesh.scaleZ *= -1;
		mesh.rotationX *= -1;
		mesh.rotationY *= -1;
		mesh.rotationZ *= -1;
 
		var m:Matrix3D =  new Matrix3D();
		m.calculateMultiply(m, Matrix3D.rotationX(mesh.rotationX*Math.PI/180));
		m.calculateMultiply(m, Matrix3D.rotationY(mesh.rotationY*Math.PI/180));
		m.calculateMultiply(m, Matrix3D.rotationZ(mesh.rotationZ*Math.PI/180));
 
		m.calculateMultiply(m, Matrix3D.scaleMatrix(mesh.scaleX, mesh.scaleY, mesh.scaleZ));
 
		for(var i:Number = 0; i<mesh.geometry.vertices.length; i++){
			var vertex:* = mesh.geometry.vertices[i];
 
			var vx :Number = vertex.x;
			var vy :Number = vertex.y;
			var vz :Number = vertex.z;
 
			var tx :Number = vx * m.n11 + vy * m.n12 + vz * m.n13 + m.n14;
			var ty :Number = vx * m.n21 + vy * m.n22 + vz * m.n23 + m.n24;
			var tz :Number = vx * m.n31 + vy * m.n32 + vz * m.n33 + m.n34;
 
			vertex.x = tx;
			vertex.y = ty;
			vertex.z = tz;
		}
 
 
		mesh.rotationX = 0;
		mesh.rotationY = 0;
		mesh.rotationZ = 0;
		mesh.scaleZ *= -1;
 
		mesh.geometry.flipFaces();
	}
}

Demo
Source

PaperPlane Test

Tuesday, March 24th, 2009

Primeiros exprerimentos de nada que pode ser tornar algo

Use as setas para controlar o avião
Aumente a velociade pressionando espaço

Demo

plane

Source