int SDL_main(int argc, char *argv[]) { SDL_Event Event; int ScreenW = 800, ScreenH = 600; if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) exit(1); SDL_SetVideoMode(ScreenW, ScreenH, 0, SDL_RESIZABLE | SDL_OPENGL); SDL_WM_SetCaption("Voxel Lines SDL C++", ""); VoxInit((void*)&SDL_GL_GetProcAddress, VOXEL_SCREEN128); unsigned int PrevT = SDL_GetTicks(); for(;;) { VoxVolumeLock(); VoxSetColor RGBA(255*rand()/RAND_MAX, 255*rand()/RAND_MAX, 255*rand()/RAND_MAX, 255); for (int I = 1; I <= 5; I++) { VoxLineTo(Vec3I(127*rand()/RAND_MAX, 127*rand()/RAND_MAX, 127*rand()/RAND_MAX)); } VoxVolumeUnlock(); VoxRender(ScreenW, ScreenH); SDL_GL_SwapBuffers(); VoxScreenTurnRight((SDL_GetTicks() - PrevT)/10000.0); PrevT = SDL_GetTicks(); while (SDL_PollEvent(&Event) != 0) { switch (Event.type) { case(SDL_QUIT): SDL_Quit(); exit(1); break; case(SDL_VIDEORESIZE): ScreenW = Event.resize.w; ScreenH = Event.resize.h; break; } } } }
Vec3I Vec3I::operator* (const Vec3I& v) const { return Vec3I(x*v.x, y*v.y, z*v.z); }
Vec3I Vec3I::operator/ (int s) const { return Vec3I(x / s, y / s, z / s); }
Vec3I Vec3I::operator- (const Vec3I& v) const { return Vec3I(x - v.x, y - v.y, z - v.z); }
Vec3I Vec3I::operator* (int s) const { return Vec3I(x*s, y*s, z*s); }
Vec3I Vec3I::operator- (int s) const { return Vec3I(x - s, y - s, y - s); }
Vec3I Vec3I::operator+ (const Vec3I& v) const { return Vec3I(x + v.x, y + v.y, z + v.z); }
//------------------------------------------------------------------- Vec3I Vec3I::operator+ (int s) const { return Vec3I(x + s, y + s, z + s); }
namespace fb { const Vec3I Vec3I::UNIT_X = Vec3I(1, 0, 0); const Vec3I Vec3I::UNIT_Y = Vec3I(0, 1, 0); const Vec3I Vec3I::UNIT_Z = Vec3I(0, 0, 1); const Vec3I Vec3I::ZERO = Vec3I(0, 0, 0); const Vec3I Vec3I::MAX = Vec3I(INT_MAX, INT_MAX, INT_MAX); //------------------------------------------------------------------- Vec3I::Vec3I() { } Vec3I::Vec3I(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { } Vec3I::Vec3I(const Vec3& v) { x = (int)v.x; y = (int)v.y; z = (int)v.z; } Vec3I::Vec3I(const Vec3ITuple& t) : x(std::get<0>(t)) , y(std::get<1>(t)) , z(std::get<2>(t)) { } //------------------------------------------------------------------- Vec3I Vec3I::operator+ (int s) const { return Vec3I(x + s, y + s, z + s); } Vec3I Vec3I::operator+ (const Vec3I& v) const { return Vec3I(x + v.x, y + v.y, z + v.z); } Vec3I Vec3I::operator- (int s) const { return Vec3I(x - s, y - s, y - s); } Vec3I Vec3I::operator- (const Vec3I& v) const { return Vec3I(x - v.x, y - v.y, z - v.z); } Vec3I Vec3I::operator* (int s) const { return Vec3I(x*s, y*s, z*s); } Vec3 Vec3I::operator*(Real s) const { return Vec3(x*s, y*s, z*s); } Vec3I Vec3I::operator* (const Vec3I& v) const { return Vec3I(x*v.x, y*v.y, z*v.z); } Vec3I Vec3I::operator/ (int s) const { return Vec3I(x / s, y / s, z / s); } Vec3I Vec3I::operator/ (const Vec3I& v) const { return Vec3I(x / v.x, y / v.y, z / v.z); } bool Vec3I::operator== (const Vec3I& v) const { return x == v.x && y == v.y && z == v.z; } bool Vec3I::operator!=(const Vec3I& v) const { return !operator==(v); } bool Vec3I::operator<(const Vec3I& other) const { return memcmp(this, &other, sizeof(Vec3I)) < 0; } Vec3I::operator Vec3ITuple() const{ return std::make_tuple(x, y, z); } //------------------------------------------------------------------- Real Vec3I::length() const { return (Real)sqrt(x*x + y*y + z*z); } Real Vec3I::lengthSQ() const { return (Real)(x*x + y*y + z*z); } Real Vec3I::distance(const Vec3I& to) const{ Vec3I dif = to - *this; return dif.length(); } Real Vec3I::distanceSQ(const Vec3I& to) const{ Vec3I dif = to - *this; return dif.lengthSQ(); } void Vec3I::write(std::ostream& stream) const{ stream.write((char*)&x, sizeof(x)); stream.write((char*)&y, sizeof(y)); stream.write((char*)&z, sizeof(z)); } void Vec3I::read(std::istream& stream){ stream.read((char*)&x, sizeof(x)); stream.read((char*)&y, sizeof(y)); stream.read((char*)&z, sizeof(z)); } /*void write(std::ostream& stream, fb::Vec3I& v){ stream.write((char*)&v.x, sizeof(v.x)); stream.write((char*)&v.y, sizeof(v.y)); stream.write((char*)&v.z, sizeof(v.z)); } void read(std::istream& stream, fb::Vec3I& v){ stream.read((char*)&v.x, sizeof(v.x)); stream.read((char*)&v.y, sizeof(v.y)); stream.read((char*)&v.z, sizeof(v.z)); }*/ }
Vec3I Vec3I::operator/ (const Vec3I& v) const { return Vec3I(x / v.x, y / v.y, z / v.z); }