Показать сообщение отдельно
  #1 (permalink)  
Старый 01.09.2011, 22:30
Аспирант
Отправить личное сообщение для Questioner Посмотреть профиль Найти все сообщения от Questioner
 
Регистрация: 03.02.2011
Сообщений: 80

3D полигон (многоугольник)
Вот у меня код:
<style>
canvas {
 border: 1px solid black;
}
</style>
<script>
var CameraX, CameraY, CameraZ, grph, LightX, LightY, LightZ, LightCL, LightScat;
function c3D(x, y, z) {
return (x < CameraX ? x + z / CameraZ : x - z / CameraZ) + ';' + (y < CameraY ? y + z / CameraZ : y - z / CameraZ)
}

function Point(x, y, z) {
	this.x=x;
	this.z=z;
	this.y=y;
	//;grph.fillRect(c3D(x, y, z).split(';')[0], c3D(x, y, z).split(';')[1], 1, 1)
	return "[GraphObject Point]"
}

function Line(xyz1, xyz2, cl) {
	var a=grph.strokeStyle;
	grph.beginPath();
	grph.strokeStyle=cl !== null ? cl : a;
	grph.moveTo(c3D(xyz1.x, xyz1.y, xyz1.z).split(';')[0],c3D(xyz1.x, xyz1.y, xyz1.z).split(';')[1]);
	grph.lineTo(c3D(xyz2.x, xyz2.y, xyz2.z).split(';')[0],c3D(xyz2.x, xyz2.y, xyz2.z).split(';')[1]);
	grph.closePath()
}

function Polygone(cl1) {
	var XYZes=Polygone.arguments;
	cl=grph.fillStyle;
	grph.beginPath();
	grph.fillStyle=cl1;
	grph.moveTo(c3D(XYZes[1].x, XYZes[1].y, XYZes[1].z).split(';')[0],c3D(XYZes[2].x, XYZes[2].y, XYZes[2]).split(';')[1]);
	for (var i=2; i<Polygone.arguments.length; i++) {
		grph.lineTo(c3D(XYZes[1].x, XYZes[1].y, XYZes[1].z).split(';')[0],c3D(XYZes[2].x, XYZes[2].y, XYZes[2].z).split(';')[1]);
	}
	grph.fill();
	grph.fillStyle=cl;
}

function InitGraph(cnvPathDOM, lightX, lightY, lightZ, lightCl, lightScat, cameraX, cameraY, cameraZ) {
	LightX=lightX		|| 0;
	LightY=lightY		|| 0;
	LightZ=lightZ		|| 0;
	LightCl=lightCl		|| '#22FFFFFF';
	LightScat=lightScat || '#00000000';
	grph=cnvPathDOM.getContext("2d");
	CameraX=cameraX 	|| cnvPathDOM.width/2;
	CameraY=cameraY 	|| cnvPathDOM.height/2;
	CameraZ=cameraZ 	|| ((cnvPathDOM.width/2)+(cnvPathDOM.height/2))/2;
}

</script>
<body onload="InitGraph (document.getElementById('cnv'))">
<canvas id='cnv'></canvas>
<br/>
<button onclick="Polygone(Point(10, 10, 20), Point(290, 75, 20), Point(10, 140, 20), '#0000FF')">Poly</button>
<button onclick="Line(Point(10,40,30), Point(70, 80, 50), '#FF0000')">Line</button>
</body>

Почему он не работает? Я исправил в нем все про что ругался консоль и файрбаг, но он все равно не работает.

Последний раз редактировалось Questioner, 01.03.2012 в 21:10.
Ответить с цитированием