MMBC

SFML Simple 3d Engine

Sep 22nd, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.79 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <cmath>
  3. typedef int m;typedef float s;typedef sf::Vertex x;typedef sf::Event N;typedef sf::Vector2f O;typedef sf::Color S;m F=800;m I=600;const m J=8;m T=12;template <typename a> class c{public:c<a>();c<a>(a,a,a);a e(){return i;}a f(){return j;}a l(){return t;}c<a> operator+(c<a>);c<a>& operator+=(c<a>);c<a>& operator-=(c<a>);private:a i,j,t;};template <typename a>c<a>::c(){i=0;j=0;t=0;}template <typename a>c<a>::c(a u,a v,a D){i=u;j=v;t=D;}template <typename a>c<a> c<a>::operator+(c<a> b){return c<a>(i+b.e(),j+b.f(),t+b.l());}template <typename a>c<a>& c<a>::operator+=(c<a> b){i+=b.e();j+=b.f();t+=b.l();return *this;}template <typename a>c<a>& c<a>::operator-=(c<a> b){i-=b.e();j-=b.f();t-=b.l();return *this;}typedef c<s> d;typedef c<unsigned m> n;template <typename a>class p{public:p<a>();p<a>(a,a);a e(){return i;}a f(){return j;}p<a>& operator=(p<a>);private:a i,j;};template <typename a>p<a>::p(){i=0;j=0;}template <typename a>p<a>::p(a u,a v){i=u;j=v;}template <typename a>p<a>& p<a>::operator=(p<a> b){i=b.e();j=b.f();return *this;}typedef p<m> z;template <typename a>class o{public:o<a>();o<a>(c<a>,c<a>,c<a>);a U(m h,m A){return g[h][A];}o<a>& operator=(o<a>);c<a> operator*(c<a>);private:a g[3][3];};template <typename a>o<a>::o(){g={{0,0,0},{0,0,0},{0,0,0}};}template <typename a>o<a>::o(c<a> u,c<a> v,c<a> D){g[0][0]=u.e();g[0][1]=u.f();g[0][2]=u.l();g[1][0]=v.e();g[1][1]=v.f();g[1][2]=v.l();g[2][0]=D.e();g[2][1]=D.f();g[2][2]=D.l();}template <typename a>c<a> o<a>::operator*(c<a> b){return c<a>(g[0][0]*b.e()+g[0][1]*b.f()+g[0][2]*b.l(),g[1][0]*b.e()+g[1][1]*b.f()+g[1][2]*b.l(),g[2][0]*b.e()+g[2][1]*b.f()+g[2][2]*b.l());}template <typename a>o<a>& o<a>::operator=(o<a> K){for(m h=0;h<3;h++)for(m A=0;A<3;A++)g[h][A]=K.U(h,A);return *this;}typedef o<s> B;d V[]={d(-1,-1,-1),d(-1,1,-1),d(1,1,-1),d(1,-1,-1),d(-1,-1,1),d(-1,1,1),d(1,1,1),d(1,-1,1)};n C[]={n(0,1,2),n(0,2,3),n(0,3,7),n(0,7,4),n(0,4,5),n(0,5,1),n(6,5,4),n(6,4,7),n(6,7,3),n(6,3,2),n(6,2,1),n(6,1,5)};z w[J];d k=d(0,0,0);d W=d(0,0,5);B X=B(d(1,0,0),d(0,1,0),d(0,0,1));bool H=false;bool Y(x* r){z L=z(static_cast<m>(r[1].position.x-r[0].position.x),static_cast<m>(r[1].position.y-r[0].position.y));z M=z(static_cast<m>(r[2].position.x-r[0].position.x),static_cast<m>(r[2].position.y-r[0].position.y));m Z=L.f()*M.e()-L.e()*M.f();return (Z<0)?false:true;}void _(sf::RenderWindow* q){while(q->isOpen()){for(m h=0;h<J;h++){d b=V[h];b=X*b;B E=B(d(cos(k.l()),-sin(k.l()),0),d(sin(k.l()),cos(k.l()),0),d(0,0,1));b=E*b;E=B(d(cos(k.f()),0,-sin(k.f())),d(0,1,0),d(sin(k.f()),0,cos(k.f())));b=E*b;E=B(d(1,0,0),d(0,cos(k.e()),-sin(k.e())),d(0,sin(k.e()),cos(k.e())));b=E*b;b+=W;s i=b.e();s j=b.f();s t=b.l();w[h]=z(static_cast<m>(F/2+F/2*i/t),static_cast<m>(I/2-F/2*j/t));}if(H)k+=d(0.0001,0.00007,0.000025);}}m main(){sf::RenderWindow q(sf::VideoMode(F,I),"Simple Rasterizer",sf::Style::Titlebar|sf::Style::Close);q.setVerticalSyncEnabled(true);q.setActive(false);sf::Thread __(&_,&q);__.launch();while(q.isOpen()){N G;while(q.pollEvent(G)){if(G.type==N::Closed)q.close();else if(G.type==N::KeyPressed)if(G.key.code==sf::Keyboard::Space)H=!H;}if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))k-=d(0,0.1,0);if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))k+=d(0,0.1,0);if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))k+=d(0.1,0,0);if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))k-=d(0.1,0,0);if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))q.close();q.clear();for(m h=0;h<T;h++){O aa(static_cast<s>(w[C[h].e()].e()),static_cast<s>(w[C[h].e()].f()));O ab(static_cast<s>(w[C[h].f()].e()),static_cast<s>(w[C[h].f()].f()));O ac(static_cast<s>(w[C[h].l()].e()),static_cast<s>(w[C[h].l()].f()));x P=x(aa);x Q=x(ab);x R=x(ac);P.color=S(255,0,0);Q.color=S(0,255,0);R.color=S(0,0,255);x r[]={P,Q,R};if(!Y(r))q.draw(r,3,sf::Triangles);}q.display();}return 0;}
Advertisement
Add Comment
Please, Sign In to add comment