dzis udalo mi sie naskrobac to
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <vector>
#include <conio.h>
using namespace std;
int windoww(1024), windowh(768), focus(400), scale(1), CAMZ(-2);
struct point{
float x, y, z;
void draw(){
circle(int(x*focus/(z-CAMZ) ), int(y*focus/(z-CAMZ) ), 2);
cout << int(x*focus/(z-CAMZ) ) << " " << int(y*focus/(z-CAMZ) ) <<" "<<x<<" "<<y<<" "<<z<<endl;
}
int getx(){return int(x*focus/(z-CAMZ) ); };
int gety(){return int(y*focus/(z-CAMZ) ); };
point(float xx=0.0, float yy=0.0, float zz=0.0): x(xx), y(yy), z(zz) {};
};
struct poly{
int a, b, c;
poly(int aa=0, int bb=0, int cc=0): a(aa), b(bb), c(cc) {};
};
struct model{
vector<point> vertices;
vector<poly> polygons;
void drawpoints(){
for(int i=0; i<vertices.size(); ++i){
vertices[i].draw() ;
}
}
void drawpolygons(){
for(int i=0; i<polygons.size(); ++i){
line(vertices[polygons[i].a].getx(), vertices[polygons[i].a].gety(), vertices[polygons[i].b].getx(), vertices[polygons[i].b].gety());
line(vertices[polygons[i].b].getx(), vertices[polygons[i].b].gety(), vertices[polygons[i].c].getx(), vertices[polygons[i].c].gety());
line(vertices[polygons[i].c].getx(), vertices[polygons[i].c].gety(), vertices[polygons[i].a].getx(), vertices[polygons[i].a].gety());
}
}
void movex(float f){ for(int i=0; i<=vertices.size(); ++i){ vertices[i].x+=f; } }
void movey(float f){ for(int i=0; i<=vertices.size(); ++i){ vertices[i].y+=f; } }
void movez(float f){ for(int i=0; i<=vertices.size(); ++i){ vertices[i].z+=f; } }
void load(){
int count1, count2;
float tmp1, tmp2, tmp3;
cin >> count1 >> count2;
for(int i=0; i<count1; ++i){
cin >> tmp1 >> tmp2 >> tmp3;
vertices.push_back(point(tmp1, tmp2, tmp3+5.0));
cout << tmp1 << " " << tmp2 << " " << tmp3 << " $$ ";
vertices[vertices.size()-1].draw();
}
for(int i=0; i<count2; ++i){
cin >> tmp1 >> tmp2 >> tmp3;
polygons.push_back(poly((int)tmp1, (int)tmp2, (int)tmp3));
}
}
};
int main()
{
initwindow(windoww,windowh);
setviewport((int)(windoww/2),(int)(windowh/2),(int)(windoww/2),(int)(windowh/2), false);
model mymodel;
mymodel.load();
int page=1;
float rate=0.05;
char c;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while(1){
//poczatek kodu podwojnego buforowania
if(page==1){
setvisualpage(1);
setactivepage(2);
page=2;
}else{
setvisualpage(2);
setactivepage(1);
page=1;
}
delay(20);
cleardevice();
//koniec kodu podwojnego buforowania
mymodel.drawpolygons();
c=0;
if(kbhit()) c=getch();
switch(c){
case 'a': mymodel.movex(-rate); break;
case 'd': mymodel.movex(rate); break;
case 'w': mymodel.movey(-rate); break;
case 's': mymodel.movey(rate); break;
case 'q': mymodel.movez(-rate); break;
case 'e': mymodel.movez(rate); break;
case '1': focus-=5; break;
case '2': focus+=5; break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
system("PAUSE");
}
wiem ze to nie jest szczyt inzynierii programowania, bylo pisane na kolanie tylko zeby sprawdzic efekt.
programowi zapodaje sie dane z txt np
<url>www.zhr.pl/~p.buczkowski/torus.txt</url>
czy
<url>www.zhr.pl/~p.buczkowski/teapot.txt</url>
binarka jest tu <url>www.zhr.pl/~p.buczkowski/halloworld.exe</url>
dzieki za linki, dzis juz tego pewnie nie przeczytam ale o postepach bedzie w nastepnym poscie.
heh, moze chcecie mnie zabic za to ze nie mam jednego a chodzi mi po glowie nastepne, ale:
jak trudne sa proste cienie ? : >