dopo mesi di nulla facenza se non si considera HTLM... alla fine ho ricominciato ad "impastare le mani" con il C++
ho trasportato l'engine vecchio da Code::Block ad Visual C++ EX ed. 2008
ed è risultato più complicato del previsto
inoltre ho riscritto gran parte del loader dei modelli 3D....
e cambiato ancora un altra volta l'algoritmo delle ombre...
in aggiunta ho inserito 4 semplici funzioni per la gestione dei tasti della finestra
(WindowKey(), KeyDown(), KeyHit())
e mi sembra anche per il mouse ho inserito altre 2 funzioni
inoltre ho inserito l'engine fisico newton nel progetto (anche se non ancora usabile)
cmq ecco a voi una DEMO! Per provare l'engine
http://www.megaupload.com/?d=341ZM6KM
l'immagine del suddetto esempio:
#include "NewTonWp.hpp"
#include "engine3d.hpp"
#include <iostream>
int main3DEngine(){
set3DEngine("G1",1024,720,32,FALSE);
AmbientLightColor(128,128,128);
ILight* light=createLight(1);
EntityPosition(light,tV3(50,100,50));
LightColor(light,255,255,255);
pointLight(light,TRUE);
LightRange(light,1100);
LightConeAngles(light,180);
EntityRotate(light,tV3(90,0,0));
ICamera *objCamera=CreateCamera();
EntityPosition(objCamera,tV3(0,4,-6));
objCamera->CameraView(0.0f,0.0f,1.0f,1.0f);
EntityRotate(objCamera,tV3(-30,180,0));
CameraLight(objCamera,TRUE);
setFogCamera(objCamera,50.0,100.0,
0.0,0.0,0.0);
shadowMode(objCamera,1);
IMesh* piramide1=load3DS("..\\media\\donut.3ds");
EntityPosition(piramide1,tV3(-2,0.1,-2));
EntityTurn(piramide1,tV3(90,0,0));
EntityScale(piramide1,tV3(.10,.10,.10));
normalMesh(piramide1);
normalMesh(piramide1);
createCastShadow(piramide1);
IMesh* piramide=load3DS("..\\media\\sh4.3ds");
EntityPosition(piramide,tV3(0,-1,1.0));
EntityTurn(piramide,tV3(0,0,0));
EntityScale(piramide,tV3(.88,.88,.88));
normalMesh(piramide);
createCastShadow(piramide);
IMesh* gfloor=load3DS("..\\media\\vista2.3ds");
normalMesh(gfloor);
EntityPosition(gfloor,tV3(0.0,-2,1));
EntityScale(gfloor,tV3(2.25,2.25,2.25));
// EntityRotate(gfloor,tV3(90,0,0));
normalMesh(gfloor);
createCastShadow(gfloor);float CAMERASPEED=0.1;
float lightCaunt=0;
tV3 lightPos;
/* programa main loop */
while ((!KeyDown( VK_ESCAPE ))&&(!WindowKey( 0 )))
{
if(KeyDown(VK_UP)) EntityMove(piramide,tV3(0.0,CAMERASPEED,0.0));
if(KeyDown(VK_DOWN)) EntityMove(piramide,tV3(0.0,-CAMERASPEED,0.0));
if(KeyDown(VK_RIGHT)) EntityTurn(piramide,tV3(0.0,1.0,0));
if(KeyDown(VK_LEFT)) EntityTurn(piramide,tV3(0.0,-1.0,0));
if(KeyHit(' ')) shadowMode(objCamera,!objCamera->ZFail);
EntityTurn(piramide1,tV3(0,1,0));
lightPos.x=cos(lightCaunt*3.14/180)*50;
lightPos.y=abs(cos(lightCaunt*3.14/180))*80;
lightPos.z=cos(lightCaunt*3.14/180)*50;
EntityPosition(light,lightPos);
ShadowPos=lightPos;
lightCaunt+=0.30;
Rander();
}
return free3DEngine();
}
Nessun commento:
Posta un commento