Compare commits
2 Commits
363849ee0c
...
old
| Author | SHA1 | Date | |
|---|---|---|---|
| 85dbded287 | |||
| cd77088dbf |
56
2
Normal file
56
2
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "fastmath.hpp"
|
||||
#include "polygon.hpp"
|
||||
#include <QApplication>
|
||||
#include <QImage>
|
||||
#include <QLabel>
|
||||
#include <QPixmap>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
// testing fastmath.h
|
||||
/*
|
||||
void test(vec<2> *in) {
|
||||
vec<2> v = {{decimal(1.0), decimal(0.5)}};
|
||||
in = &v;
|
||||
}*/
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
vec3 v1 = vec3(5.0f, 40.0f, 2.0f);
|
||||
vec3 v2 = vec3(5.0, 10.0, 2.2);
|
||||
vec3 v3 = v1;
|
||||
std::cout << v1 << v2 << decimal(0.5) * v2 << (v1 + v2) << v1 * v2 << "\n"
|
||||
<< v1.cross(v2) << v1.len() << "\n"
|
||||
<< v1.normalize() << std::endl;
|
||||
|
||||
decimal d = decimal(2.0f);
|
||||
d += decimal(0.5);
|
||||
std::cout << "\n"
|
||||
<< decimal(2.0) / decimal(-0.5) << "\n"
|
||||
<< decimal(2.0).sqrt() << "\n"
|
||||
<< d << std::endl;
|
||||
|
||||
polygon p = {vec3(0.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0)};
|
||||
std::cout << p.contains(vec3(0.1, 0.1, 0.1)) << std::endl;
|
||||
|
||||
std::cout << matN<3>::identity() * v1 << std::endl;
|
||||
|
||||
// QApplication a(argc, argv);
|
||||
//
|
||||
// uint8_t *pixel = new uint8_t[64 * 64 * 3];
|
||||
//
|
||||
// for (int i = 1; i < 64 * 64 * 3; i += 3) {
|
||||
// pixel[i] = 255;
|
||||
// }
|
||||
//
|
||||
// QWidget widget;
|
||||
// widget.setAutoFillBackground(true);
|
||||
// widget.setGeometry(0, 0, 500, 500);
|
||||
// QLabel display(&widget);
|
||||
// QImage img((unsigned char *)pixel, 64, 64, QImage::Format_RGB888);
|
||||
// display.setPixmap(QPixmap::fromImage(img).scaled(widget.size()));
|
||||
// widget.show();
|
||||
// return a.exec();
|
||||
}
|
||||
32
MainWindow.hpp
Normal file
32
MainWindow.hpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <QImage>
|
||||
#include <QKeyEvent>
|
||||
#include <QLabel>
|
||||
#include <QObject>
|
||||
#include <QPixmap>
|
||||
#include <QTimer>
|
||||
#include <QWidget>
|
||||
#include <iostream>
|
||||
|
||||
class MainWindow : public QWidget {
|
||||
public:
|
||||
std::function<void(QKeyEvent *)> keyDownCallBack;
|
||||
|
||||
MainWindow() : display(QLabel(this)) {
|
||||
setAutoFillBackground(true);
|
||||
setGeometry(0, 0, 500, 500);
|
||||
display.setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
void updateLabel(uint8_t *pixel) {
|
||||
QImage img((unsigned char *)pixel, 64, 64, QImage::Format_RGB888);
|
||||
display.setPixmap(QPixmap::fromImage(img).scaled(size() * 1));
|
||||
}
|
||||
|
||||
void keyPressEvent(QKeyEvent *e) {
|
||||
keyDownCallBack(e);
|
||||
QWidget::keyPressEvent(e);
|
||||
}
|
||||
|
||||
private:
|
||||
QLabel display;
|
||||
};
|
||||
11
beziercurve.hpp
Normal file
11
beziercurve.hpp
Normal file
@@ -0,0 +1,11 @@
|
||||
#include "fastmath.hpp"
|
||||
|
||||
template <class T>
|
||||
T calcHandels(const T curr, const T prev, const T next, T &left, T &right) {
|
||||
T prev
|
||||
}
|
||||
|
||||
template <class T> T bezierCurve(T a, T ad, T b, T bd, float t) {
|
||||
return std::pow(1 - t, 3.0) * a + 3 * std::pow(1 - t, 2.0) * t * ad +
|
||||
3 * (1 - t) * std::pow(t, 2.0) * bd + std::pow(t, 3.0) * b;
|
||||
}
|
||||
425
fastmath.hpp
Normal file
425
fastmath.hpp
Normal file
@@ -0,0 +1,425 @@
|
||||
#ifndef FASTMATH_H
|
||||
#define FASTMATH_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <vector>
|
||||
#define SHIFT_AMOUNT 16
|
||||
#define HALF_SHIFT (SHIFT_AMOUNT / 2)
|
||||
|
||||
#define SHIFT_MASK ((1 << SHIFT_AMOUNT) - 1)
|
||||
#define TO_FLOAT(x) \
|
||||
(((float)(x >> SHIFT_AMOUNT)) + \
|
||||
((double)(x & SHIFT_MASK) / (1 << SHIFT_AMOUNT)))
|
||||
#define TO_INT(x) ((int32_t)(x * (1 << SHIFT_AMOUNT)))
|
||||
#define MUL_F(a, b) (((a) >> HALF_SHIFT) * ((b) >> HALF_SHIFT))
|
||||
#define DIV_F(a, b) ((((a) << HALF_SHIFT) / (b)) << HALF_SHIFT)
|
||||
|
||||
struct decimal {
|
||||
|
||||
int32_t i;
|
||||
constexpr decimal() = default;
|
||||
// constexpr decimal() : i(0) {}
|
||||
constexpr decimal(float i) : i(TO_INT(i)) {}
|
||||
constexpr decimal(double i) : i(TO_INT(i)) {}
|
||||
constexpr decimal(int32_t i) : i(i) {}
|
||||
|
||||
inline friend std::ostream &operator<<(std::ostream &os, const decimal &d) {
|
||||
return (os << TO_FLOAT(d.i));
|
||||
}
|
||||
|
||||
inline friend decimal operator+(const decimal &d1, const decimal &d2) {
|
||||
return {d1.i + d2.i};
|
||||
}
|
||||
inline decimal &operator+=(const decimal &d) { return (*this) = {i + d.i}; }
|
||||
|
||||
inline decimal &operator-=(const decimal &d) { return (*this) = {i - d.i}; }
|
||||
|
||||
inline friend decimal operator-(const decimal &d1, const decimal &d2) {
|
||||
return {d1.i - d2.i};
|
||||
}
|
||||
inline friend decimal operator-(const decimal &d) { return {-d.i}; }
|
||||
|
||||
inline friend decimal operator*(const decimal &d1, const decimal &d2) {
|
||||
return {MUL_F(d1.i, d2.i)};
|
||||
}
|
||||
|
||||
inline decimal &operator*=(const decimal &d) {
|
||||
return (*this) = {MUL_F(i, d.i)};
|
||||
}
|
||||
|
||||
inline friend decimal operator/(const decimal &d1, const decimal &d2) {
|
||||
return {DIV_F(d1.i, d2.i)};
|
||||
}
|
||||
|
||||
inline friend bool operator<(const decimal &d1, const decimal &d2) {
|
||||
return d1.i < d2.i;
|
||||
}
|
||||
|
||||
inline friend bool operator>(const decimal &d1, const decimal &d2) {
|
||||
return d1.i > d2.i;
|
||||
}
|
||||
inline friend bool operator<=(const decimal &d1, const decimal &d2) {
|
||||
return d1.i <= d2.i;
|
||||
}
|
||||
inline friend bool operator>=(const decimal &d1, const decimal &d2) {
|
||||
return d1.i >= d2.i;
|
||||
}
|
||||
|
||||
inline friend bool operator==(const decimal &d1, const decimal &d2) {
|
||||
return d1.i == d2.i;
|
||||
}
|
||||
inline friend bool operator!=(const decimal &d1, const decimal &d2) {
|
||||
return d1.i != d2.i;
|
||||
}
|
||||
|
||||
inline decimal sqrt() { return {((int32_t)sqrtf(i)) << HALF_SHIFT}; }
|
||||
|
||||
inline float to_float() { return TO_FLOAT(i); }
|
||||
inline bool isSmall() { return (abs(i) < (1 << (HALF_SHIFT - 1))); }
|
||||
};
|
||||
|
||||
template <int n, class Dev> struct vec {
|
||||
|
||||
decimal v[n];
|
||||
|
||||
constexpr vec() noexcept = default;
|
||||
|
||||
template <class... Args>
|
||||
constexpr vec(Args... args) noexcept : v{static_cast<decimal>(args)...} {
|
||||
static_assert(sizeof...(Args) == n, "Wrong number of elements for vec");
|
||||
}
|
||||
|
||||
friend Dev operator+(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = v1.v[i] + v2.v[i];
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
friend Dev operator+=(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = v1.v[i] + v2.v[i];
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
friend Dev operator-=(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = v1.v[i] - v2.v[i];
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
|
||||
friend Dev operator-(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = v1.v[i] - v2.v[i];
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
|
||||
friend std::ostream &operator<<(std::ostream &os, const vec<n, Dev> &v) {
|
||||
os << "(" << v.v[0];
|
||||
for (int i = 1; i < n; i++) {
|
||||
os << ", " << v.v[i];
|
||||
}
|
||||
return (os << ")" << std::endl);
|
||||
}
|
||||
|
||||
Dev operator-() {
|
||||
Dev newV;
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = -v[i];
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
|
||||
friend Dev operator*(const vec<n, Dev> &v, const decimal &d) {
|
||||
int32_t f = d.i >> HALF_SHIFT;
|
||||
|
||||
Dev newV;
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = (v.v[i].i >> HALF_SHIFT) * f;
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
static Dev max(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = std::max(v1.v[i], v2.v[i]);
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
static Dev min(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
Dev newV;
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV.v[i] = std::min(v1.v[i], v2.v[i]);
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
|
||||
friend Dev operator*(const decimal &d, const vec<n, Dev> &v) {
|
||||
return v * d;
|
||||
}
|
||||
|
||||
friend decimal operator*(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
decimal res = decimal(0.0f);
|
||||
for (int i = 0; i < n; i++) {
|
||||
res += v1.v[i] * v2.v[i];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
friend bool operator==(const vec<n, Dev> &v1, const vec<n, Dev> &v2) {
|
||||
bool res = true;
|
||||
for (int i = 0; i < n; i++) {
|
||||
res &= v1.v[i] == v2.v[i];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
bool isSmall() {
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (!v[i].isSmall())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
decimal &operator[](const int &i) { return v[i]; }
|
||||
|
||||
decimal len_sq() { return *this * *this; }
|
||||
|
||||
decimal len() { return this->len_sq().sqrt(); }
|
||||
|
||||
Dev normalize() {
|
||||
decimal f = decimal(1.0) / this->len();
|
||||
return (*this * f);
|
||||
}
|
||||
|
||||
constexpr static Dev zero() {
|
||||
Dev newV;
|
||||
for (int i = 0; i < n; i++) {
|
||||
newV[i] = decimal(0);
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
};
|
||||
struct vec2 : public vec<2, vec2> {
|
||||
|
||||
vec2() : vec<2, vec2>() {};
|
||||
|
||||
vec2(float x, float y) : vec<2, vec2>(decimal(x), decimal(y)) {}
|
||||
|
||||
vec2(double x, double y) : vec<2, vec2>(decimal(x), decimal(y)) {}
|
||||
|
||||
vec2(int32_t x, int32_t y) : vec<2, vec2>(decimal(x), decimal(y)) {}
|
||||
|
||||
vec2(decimal x, decimal y) : vec<2, vec2>(x, y) {}
|
||||
|
||||
template <class origVec> vec2(origVec v) : vec<2, vec2>(v.v[0], v.v[1]) {}
|
||||
|
||||
decimal &x() { return v[0]; }
|
||||
decimal &y() { return v[1]; }
|
||||
};
|
||||
struct vec3 : public vec<3, vec3> {
|
||||
|
||||
constexpr vec3() : vec<3, vec3>() {}
|
||||
|
||||
constexpr vec3(float x, float y, float z)
|
||||
: vec<3, vec3>(decimal(x), decimal(y), decimal(z)) {}
|
||||
|
||||
constexpr vec3(double x, double y, double z)
|
||||
: vec<3, vec3>(decimal(x), decimal(y), decimal(z)) {}
|
||||
|
||||
constexpr vec3(int32_t x, int32_t y, int32_t z)
|
||||
: vec<3, vec3>(decimal(x), decimal(y), decimal(z)) {}
|
||||
|
||||
constexpr vec3(decimal x, decimal y, decimal z) : vec<3, vec3>(x, y, z) {}
|
||||
|
||||
inline decimal &x() { return v[0]; }
|
||||
inline decimal &y() { return v[1]; }
|
||||
inline decimal &z() { return v[2]; }
|
||||
|
||||
inline vec3 cross(vec3 &v) {
|
||||
return vec3((y() * v.z()) - (z() * v.y()),
|
||||
(z() * v.x()) - (x() * v.z()),
|
||||
(x() * v.y()) - (y() * v.x()));
|
||||
}
|
||||
};
|
||||
struct vec4 : public vec<4, vec4> {
|
||||
|
||||
constexpr vec4() : vec<4, vec4>() {}
|
||||
|
||||
vec4(float x, float y, float z, float w)
|
||||
: vec<4, vec4>(decimal(x), decimal(y), decimal(z), decimal(w)) {}
|
||||
|
||||
vec4(double x, double y, double z, double w)
|
||||
: vec<4, vec4>(decimal(x), decimal(y), decimal(z), decimal(w)) {}
|
||||
|
||||
vec4(int32_t x, int32_t y, int32_t z, int32_t w)
|
||||
: vec<4, vec4>(decimal(x), decimal(y), decimal(z), decimal(w)) {}
|
||||
|
||||
vec4(vec3 v, decimal w) : vec<4, vec4>(v.x(), v.y(), v.z(), w) {}
|
||||
|
||||
decimal &x() { return v[0]; }
|
||||
decimal &y() { return v[1]; }
|
||||
decimal &z() { return v[2]; }
|
||||
decimal &w() { return v[3]; }
|
||||
};
|
||||
|
||||
template <int n, class Dev> struct mat {
|
||||
decimal m[n * n];
|
||||
|
||||
static const int size = n;
|
||||
friend Dev operator+(const mat<n, Dev> &m1, const mat<n, Dev> &m2) {
|
||||
Dev newM = {};
|
||||
|
||||
for (int i = 0; i < n * n; i++) {
|
||||
newM.v[i] = m1.m[i] + m2.m[i];
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
friend Dev operator+=(const mat<n, Dev> &m1, const mat<n, Dev> &m2) {
|
||||
Dev newM = {};
|
||||
|
||||
for (int i = 0; i < n * n; i++) {
|
||||
newM.m[i] = m1.m[i] + m2.m[i];
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
|
||||
friend Dev operator-(const mat<n, Dev> &m1, const mat<n, Dev> &m2) {
|
||||
Dev newM = {};
|
||||
|
||||
for (int i = 0; i < n * n; i++) {
|
||||
newM.m[i] = m1.m[i] - m2.m[i];
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
|
||||
friend std::ostream &operator<<(std::ostream &os, const mat<n, Dev> &m) {
|
||||
for (int i = 0; i < n; i++) {
|
||||
os << "|" << m.m[i * n];
|
||||
for (int j = 1; j < n; j++) {
|
||||
os << ", " << m.m[i * n + j];
|
||||
}
|
||||
os << "|" << "\n";
|
||||
}
|
||||
return (os << std::endl);
|
||||
}
|
||||
|
||||
template <class Dev1>
|
||||
friend Dev1 operator*(const mat<n, Dev> &mat, const vec<n, Dev1> &v) {
|
||||
Dev1 newV = vec<n, Dev1>::zero();
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
newV[i] += mat.m[i * n + j] * v.v[j];
|
||||
}
|
||||
}
|
||||
return newV;
|
||||
}
|
||||
|
||||
decimal &operator[](const int &i) { return m[i]; }
|
||||
|
||||
friend Dev operator*(const mat<n, Dev> &m1, const mat<n, Dev> &m2) {
|
||||
Dev newM = mat<n, Dev>::zero();
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
for (int k = 0; k < n; k++) {
|
||||
newM[i * n + j] += m1.m[i * n + k] * m2.m[k * n + j];
|
||||
}
|
||||
}
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
|
||||
constexpr static Dev identity() {
|
||||
Dev newM = {};
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
if (i == j)
|
||||
newM.m[i * n + i] = decimal(1.0f);
|
||||
else
|
||||
newM.m[i * n + j] = decimal(0.0f);
|
||||
}
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
constexpr static Dev zero() {
|
||||
Dev newM = {};
|
||||
for (int i = 0; i < n * n; i++) {
|
||||
newM[i] = decimal(0);
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
|
||||
inline void set(int x, int y, decimal v) { m[y * n + x] = v; }
|
||||
inline decimal get(int x, int y) { return m[y * n + x]; }
|
||||
|
||||
friend bool operator==(const mat<n, Dev> &m1, const mat<n, Dev> &m2) {
|
||||
bool res = true;
|
||||
for (int i = 0; i < n * n; i++) {
|
||||
res &= m1.m[i] == m2.m[i];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
bool isSmall() {
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (!m[i].isSmall())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template <class Dev1> Dev1 cutTo() const {
|
||||
static_assert(Dev1::size < n, "Can only convert to smaller matrix");
|
||||
Dev1 newM = mat<Dev1::size, Dev1>::zero();
|
||||
for (int i = 0; i < Dev1::size; i++) {
|
||||
for (int j = 0; j < Dev1::size; j++) {
|
||||
newM.m[Dev1::size * i + j] = m[n * i + j];
|
||||
}
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
};
|
||||
|
||||
template <int n> struct matN : public mat<n, matN<n>> {};
|
||||
|
||||
struct mat3 : public mat<3, mat3> {};
|
||||
|
||||
struct mat4 : public mat<4, mat4> {
|
||||
static mat4 translation(const vec3 &v) {
|
||||
mat4 newM = mat4::identity();
|
||||
for (int i = 0; i < 3; i++) {
|
||||
newM[4 * i + 3] = v.v[i];
|
||||
}
|
||||
return newM;
|
||||
}
|
||||
static mat4 rotateOnX(float a) {
|
||||
mat4 newM = mat4::identity();
|
||||
newM.m[1 * 4 + 1] = cos(a), newM.m[2 * 4 + 2] = cos(a);
|
||||
newM.m[1 * 4 + 2] = -sin(a), newM.m[2 * 4 + 1] = sin(a);
|
||||
return newM;
|
||||
}
|
||||
static mat4 rotateOnY(float a) {
|
||||
mat4 newM = mat4::identity();
|
||||
newM.m[0 * 4 + 0] = cos(a), newM.m[2 * 4 + 2] = cos(a);
|
||||
newM.m[0 * 4 + 2] = sin(a), newM.m[2 * 4 + 0] = -sin(a);
|
||||
return newM;
|
||||
}
|
||||
static mat4 rotateOnZ(float a) {
|
||||
mat4 newM = mat4::identity();
|
||||
newM.m[0 * 4 + 0] = cos(a), newM.m[1 * 4 + 1] = cos(a);
|
||||
newM.m[1 * 4 + 0] = sin(a), newM.m[0 * 4 + 1] = -sin(a);
|
||||
return newM;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
150
main.cpp
Normal file
150
main.cpp
Normal file
@@ -0,0 +1,150 @@
|
||||
#include "MainWindow.hpp"
|
||||
#include "fastmath.hpp"
|
||||
#include "plane.hpp"
|
||||
#include "polygon.hpp"
|
||||
#include "renderer.hpp"
|
||||
#include "rendertarget.hpp"
|
||||
#include "testModel.hpp"
|
||||
#include <QApplication>
|
||||
#include <chrono>
|
||||
#include <functional>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#define HIGHT 64
|
||||
#define WIDTH 64
|
||||
|
||||
#define FAA_FAC 2
|
||||
#define RHIGHT ((int)(HIGHT * FAA_FAC))
|
||||
#define RWIDTH ((int)(WIDTH * FAA_FAC))
|
||||
|
||||
char *drawToString(unsigned short *img) {
|
||||
char *textImg = (char *)malloc(200000 * sizeof(char));
|
||||
// strcat(textImg,"\e[1;1H\e[2J"); --clear
|
||||
for (int y = 0; y < HIGHT; y++) {
|
||||
for (int x = 0; x < WIDTH; x++) {
|
||||
// printf("%d,%d\n",x,y);
|
||||
char buff[20];
|
||||
unsigned short val = 0;
|
||||
int my = y * FAA_FAC;
|
||||
int mx = x * FAA_FAC;
|
||||
val += img[my * RWIDTH + mx];
|
||||
val += img[my * RWIDTH + mx + 1];
|
||||
val += img[(my + 1) * RWIDTH + mx];
|
||||
val += img[(my + 1) * RWIDTH + mx + 1];
|
||||
sprintf(buff, "\033[38;5;%dm██\033[0m", 232 + val / 4);
|
||||
strcat(textImg, buff);
|
||||
}
|
||||
strcat(textImg, "\n");
|
||||
}
|
||||
return textImg;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
Rendertarget target(128, 128);
|
||||
Renderer renderer;
|
||||
renderer.target = ⌖
|
||||
|
||||
std::chrono::steady_clock::time_point begin =
|
||||
std::chrono::steady_clock::now();
|
||||
renderer.render(&testModel, mat4::translation(vec3(0.0f, -1.0f, 5.0f)) *
|
||||
mat4::rotateOnY(-1.5707963267948966f));
|
||||
std::chrono::steady_clock::time_point end =
|
||||
std::chrono::steady_clock::now();
|
||||
|
||||
std::cout << "Time difference = "
|
||||
<< std::chrono::duration_cast<std::chrono::milliseconds>(end -
|
||||
begin)
|
||||
.count()
|
||||
<< "[ms]" << std::endl;
|
||||
|
||||
uint8_t *pixel = new uint8_t[64 * 64 * 3];
|
||||
/*for (int i = 0; i < 64 * 64 * 3; i++) {
|
||||
pixel[i] = target.pixels[i].i >> SHIFT_AMOUNT;
|
||||
}*/
|
||||
std::function<void(int, uint32_t *)> addTo = [&target](int start,
|
||||
uint32_t *arr) {
|
||||
for (int c = 0; c < 3; c++) {
|
||||
arr[c] += target.pixels[start + c];
|
||||
}
|
||||
};
|
||||
vec3 pos;
|
||||
|
||||
QApplication a(argc, argv);
|
||||
MainWindow widget;
|
||||
widget.setWindowTitle("SoftwareRenderer");
|
||||
|
||||
// display.setPixmap(QPixmap::fromImage(img).scaled(widget.size()));
|
||||
auto keyEvent = [&pos](QKeyEvent *e) {
|
||||
decimal step = decimal(0.5);
|
||||
switch (e->key()) {
|
||||
case Qt::Key_W:
|
||||
pos.z() += step;
|
||||
break;
|
||||
case Qt::Key_S:
|
||||
pos.z() -= step;
|
||||
break;
|
||||
case Qt::Key_A:
|
||||
pos.x() += step;
|
||||
break;
|
||||
case Qt::Key_D:
|
||||
pos.x() -= step;
|
||||
break;
|
||||
}
|
||||
};
|
||||
widget.keyDownCallBack = keyEvent;
|
||||
|
||||
float rot = 0.f;
|
||||
std::function<void()> renderLoop = [&addTo, &target, &pixel, &renderer,
|
||||
&widget, &rot, &pos]() {
|
||||
std::chrono::steady_clock::time_point begin =
|
||||
std::chrono::steady_clock::now();
|
||||
|
||||
target.clearDepth();
|
||||
target.clearTarget();
|
||||
|
||||
// renderer.render(&testModel, mat4::translation(vec3(0.0f,
|
||||
// -1.0f, 5.0f)) *
|
||||
// mat4::rotateOnY(rot));
|
||||
// renderer.render(&testModel, mat4::translation(vec3(1.0f,
|
||||
// -1.0f, 7.0f)) *
|
||||
// mat4::rotateOnY(rot));
|
||||
renderer.render(&plane, mat4::translation(pos));
|
||||
std::chrono::steady_clock::time_point end =
|
||||
std::chrono::steady_clock::now();
|
||||
|
||||
std::cout << "Time difference = "
|
||||
<< std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
end - begin)
|
||||
.count()
|
||||
<< "[ms]" << std::endl;
|
||||
|
||||
for (int x = 0; x < 64; x++) {
|
||||
for (int y = 0; y < 64; y++) {
|
||||
uint32_t result[3] = {};
|
||||
addTo((target.width * y * 2 + x * 2) * 3, result);
|
||||
addTo((target.width * (y * 2 + 1) + x * 2) * 3, result);
|
||||
addTo((target.width * y * 2 + (x * 2 + 1)) * 3, result);
|
||||
addTo((target.width * (y * 2 + 1) + (x * 2 + 1)) * 3, result);
|
||||
for (int c = 0; c < 3; c++) {
|
||||
pixel[(WIDTH * (WIDTH - y - 1) + WIDTH - x - 1) * 3 + c] =
|
||||
result[c] >> 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
// QImage img((unsigned char *)pixel, 64, 64, QImage::Format_RGB888);
|
||||
widget.updateLabel(pixel);
|
||||
|
||||
rot += 0.1f;
|
||||
};
|
||||
renderLoop();
|
||||
widget.show();
|
||||
QTimer timer;
|
||||
timer.setInterval(20);
|
||||
timer.start();
|
||||
QObject::connect(&timer, &QTimer::timeout, &widget, renderLoop);
|
||||
return a.exec();
|
||||
}
|
||||
63
mathTest.cpp
Normal file
63
mathTest.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include "fastmath.hpp"
|
||||
#include "polygon.hpp"
|
||||
#include <QApplication>
|
||||
#include <QImage>
|
||||
#include <QLabel>
|
||||
#include <QPixmap>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
// testing fastmath.h
|
||||
/*
|
||||
void test(vec<2> *in) {
|
||||
vec<2> v = {{decimal(1.0), decimal(0.5)}};
|
||||
in = &v;
|
||||
}*/
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
vec3 v1 = vec3(5.0f, 40.0f, 2.0f);
|
||||
vec3 v2 = vec3(5.0, 10.0, 2.2);
|
||||
vec3 v3 = v1;
|
||||
std::cout << v1 << v2 << decimal(0.5) * v2 << (v1 + v2) << v1 * v2 << "\n"
|
||||
<< v1.cross(v2) << v1.len() << "\n"
|
||||
<< v1.normalize() << std::endl;
|
||||
|
||||
decimal d = decimal(2.0f);
|
||||
d += decimal(0.5);
|
||||
std::cout << "\n"
|
||||
<< decimal(2.0) / decimal(-0.5) << "\n"
|
||||
<< decimal(2.0).sqrt() << "\n"
|
||||
<< d << std::endl;
|
||||
|
||||
polygon p = {vec3(0.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0)};
|
||||
std::cout << p.contains(vec3(0.1, 0.1, 0.1)) << std::endl;
|
||||
|
||||
mat4 m = mat4::translation({2.0f, 3.0f, 5.0f});
|
||||
|
||||
std::cout << matN<3>::identity() * v1 << std::endl;
|
||||
std::cout << m << std::endl;
|
||||
std::cout << mat4::identity().cutTo<mat3>() << std::endl;
|
||||
std::cout << m * vec4(v1, decimal(1.0f)) << std::endl;
|
||||
std::cout << mat4::rotateOnX(1.5707f) * vec4(1.f, 0.f, 0.f, 0.f)
|
||||
<< std::endl;
|
||||
|
||||
// QApplication a(argc, argv);
|
||||
//
|
||||
// uint8_t *pixel = new uint8_t[64 * 64 * 3];
|
||||
//
|
||||
// for (int i = 1; i < 64 * 64 * 3; i += 3) {
|
||||
// pixel[i] = 255;
|
||||
// }
|
||||
//
|
||||
// QWidget widget;
|
||||
// widget.setAutoFillBackground(true);
|
||||
// widget.setGeometry(0, 0, 500, 500);
|
||||
// QLabel display(&widget);
|
||||
// QImage img((unsigned char *)pixel, 64, 64, QImage::Format_RGB888);
|
||||
// display.setPixmap(QPixmap::fromImage(img).scaled(widget.size()));
|
||||
// widget.show();
|
||||
// return a.exec();
|
||||
}
|
||||
16
model.hpp
Normal file
16
model.hpp
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
#ifndef MODEL_H
|
||||
#define MODEL_H
|
||||
|
||||
#include "fastmath.hpp"
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
struct model {
|
||||
std::vector<vec3> verts;
|
||||
// At 0 vertecie index, at 1 normal index
|
||||
std::vector<std::tuple<uint16_t, uint16_t>> faces;
|
||||
std::vector<vec3> normals;
|
||||
std::vector<vec3> colors;
|
||||
};
|
||||
|
||||
#endif
|
||||
2
plane.hpp
Normal file
2
plane.hpp
Normal file
@@ -0,0 +1,2 @@
|
||||
#include "renderer.h"
|
||||
const model testModel = create_model((vec3[]){{{7.334897,-2.436740,4.541961},{-7.899121,-2.436740,4.541961},{7.334897,-2.436740,35.009995},{-7.899121,-2.436740,35.009995}},(int[]){{1,0},{2,0},{0,0},{1,0},{3,0},{2,0}});
|
||||
12
plane.mtl
Normal file
12
plane.mtl
Normal file
@@ -0,0 +1,12 @@
|
||||
# Blender 5.1.0 MTL File: 'test.blend'
|
||||
# www.blender.org
|
||||
|
||||
newmtl Material.001
|
||||
Ns 0.000000
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.800000 0.800000 0.800000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.500000
|
||||
d 1.000000
|
||||
illum 2
|
||||
160
polygon.hpp
Normal file
160
polygon.hpp
Normal file
@@ -0,0 +1,160 @@
|
||||
#ifndef POLYGON_H
|
||||
#define POLYGON_H
|
||||
|
||||
#include "fastmath.hpp"
|
||||
#include <iostream>
|
||||
struct polygon {
|
||||
|
||||
vec3 points[3];
|
||||
decimal delta[9];
|
||||
bool small = false;
|
||||
decimal baryFactor;
|
||||
|
||||
decimal dot00;
|
||||
decimal dot01;
|
||||
decimal dot11;
|
||||
vec2 v0;
|
||||
vec2 v1;
|
||||
|
||||
decimal bounding[4]; // min x, max x, min y, max y
|
||||
vec3 normals[3];
|
||||
vec3 colors[3];
|
||||
vec3 barycentrics;
|
||||
vec3 boundingBarycentrics;
|
||||
|
||||
void calcDelta() {
|
||||
|
||||
// for (int i = 0; i < 3; i++) {
|
||||
// int n = (i + 1) % 3;
|
||||
//
|
||||
// delta[i * 3] = points[i].y() - points[n].y();
|
||||
// delta[i * 3 + 1] = points[n].x() - points[i].x();
|
||||
// delta[i * 3 + 2] =
|
||||
// points[i].x() * points[n].y() - points[i].y() *
|
||||
// points[n].x();
|
||||
// if (delta[i * 3].i == 0 && delta[i * 3 + 1].i == 0)
|
||||
// small = true;
|
||||
// }
|
||||
|
||||
v0 = vec2(points[2]) - vec2(points[0]);
|
||||
v1 = vec2(points[1]) - vec2(points[0]);
|
||||
|
||||
dot00 = v0 * v0;
|
||||
dot01 = v1 * v0;
|
||||
dot11 = v1 * v1;
|
||||
|
||||
bounding[0] = points[0].x();
|
||||
bounding[1] = points[0].x();
|
||||
bounding[2] = points[0].y();
|
||||
bounding[3] = points[0].y();
|
||||
for (int i = 1; i < 3; i++) {
|
||||
if (bounding[0] > points[i].x())
|
||||
bounding[0] = points[i].x();
|
||||
if (bounding[1] < points[i].x())
|
||||
bounding[1] = points[i].x();
|
||||
if (bounding[2] > points[i].y())
|
||||
bounding[2] = points[i].y();
|
||||
if (bounding[3] < points[i].y())
|
||||
bounding[3] = points[i].y();
|
||||
}
|
||||
|
||||
// baryFactor =
|
||||
// (points[1].x() - points[0].x()) * (points[2].y() - points[1].y())
|
||||
// - (points[1].y() - points[0].y()) * (points[2].x() -
|
||||
// points[1].x());
|
||||
std::cout << dot00 << " " << dot01 << " " << dot11 << std::endl;
|
||||
baryFactor = dot00 * dot11 - dot01 * dot01;
|
||||
std::cout << "baryFactor:" << baryFactor << std::endl;
|
||||
if (baryFactor.i == 0) {
|
||||
small = true;
|
||||
} else
|
||||
baryFactor = decimal(1.0) / baryFactor;
|
||||
// std::cout << baryFactor << std::endl;
|
||||
/*if ((bounding[1].i - bounding[0].i < 1 << HALF_SHIFT) &&
|
||||
(bounding[3].i - bounding[2].i < 1 << HALF_SHIFT))
|
||||
small = true;*/
|
||||
}
|
||||
|
||||
vec3 avgNormal() {
|
||||
vec3 result = normals[0] + normals[1] + normals[2];
|
||||
// for (int i = 0; i < 3; i++) {
|
||||
// result += normals[i];
|
||||
// }
|
||||
return result * decimal(0.3333);
|
||||
}
|
||||
|
||||
const bool depContains(const vec3 &p) {
|
||||
// if (skip)
|
||||
// return false;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (small)
|
||||
return false;
|
||||
vec3 d = p;
|
||||
if ((d.x() * delta[i * 3] + d.y() * delta[i * 3 + 1] +
|
||||
delta[i * 3 + 2]) > decimal(0.2))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
const bool contains(const vec3 &p) {
|
||||
if (small)
|
||||
return true;
|
||||
else
|
||||
return (barycentrics[0] >= decimal(-0.0)) &&
|
||||
(barycentrics[1] >= decimal(-0.0)) &&
|
||||
(barycentrics[0] + barycentrics[1] <= decimal(1.0));
|
||||
}
|
||||
friend std::ostream &operator<<(std::ostream &os, const polygon &p) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
os << p.points[i];
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
vec3 calcNormal() {
|
||||
return normals[0] * boundingBarycentrics[0] +
|
||||
normals[1] * boundingBarycentrics[1] +
|
||||
normals[2] * boundingBarycentrics[2];
|
||||
}
|
||||
|
||||
vec3 calcColor() {
|
||||
return colors[0] * boundingBarycentrics[0] +
|
||||
colors[1] * boundingBarycentrics[1] +
|
||||
colors[2] * boundingBarycentrics[2];
|
||||
}
|
||||
|
||||
decimal calcDepth() {
|
||||
return points[0].z() * boundingBarycentrics[0] +
|
||||
points[1].z() * boundingBarycentrics[1] +
|
||||
points[2].z() * boundingBarycentrics[2];
|
||||
}
|
||||
|
||||
void calcBarycentric(vec3 s) {
|
||||
// if (small)
|
||||
// return vec3(decimal(0.333), decimal(0.333), decimal(0.333));
|
||||
|
||||
vec2 v2 = vec2(s) - vec2(points[0]);
|
||||
decimal dot02 = v0 * v2;
|
||||
decimal dot12 = v1 * v2;
|
||||
|
||||
barycentrics = {};
|
||||
barycentrics[0] = dot11 * dot02 - dot01 * dot12;
|
||||
barycentrics[1] = dot00 * dot12 - dot01 * dot02;
|
||||
|
||||
// barycentrics[0] = (points[1].x() - s.x()) * (points[2].y() -
|
||||
// s.y()) -
|
||||
// (points[2].x() - s.x()) * (points[1].y() -
|
||||
// s.y());
|
||||
// barycentrics[1] = (points[2].x() - s.x()) * (points[0].y() -
|
||||
// s.y()) -
|
||||
// (points[0].x() - s.x()) * (points[2].y() -
|
||||
// s.y());
|
||||
barycentrics = barycentrics * baryFactor;
|
||||
barycentrics[2] = decimal(1.0) - barycentrics[1] - barycentrics[0];
|
||||
// barycentrics[0]; return result;
|
||||
boundingBarycentrics = vec3::max(
|
||||
vec3::min(barycentrics, vec3(1.0, 1.0, 1.0)), vec3(0.0, 0.0, 0.0));
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
144
renderer.hpp
Normal file
144
renderer.hpp
Normal file
@@ -0,0 +1,144 @@
|
||||
|
||||
#ifndef RENDERER_H
|
||||
#define RENDERER_H
|
||||
|
||||
#include "fastmath.hpp"
|
||||
#include "model.hpp"
|
||||
#include "polygon.hpp"
|
||||
#include "rendertarget.hpp"
|
||||
#include <cstring>
|
||||
#include <memory.h>
|
||||
|
||||
#define SCREEN_SPACE_SIZE 2.0
|
||||
|
||||
class Renderer {
|
||||
|
||||
public:
|
||||
Rendertarget *target;
|
||||
|
||||
bool clearTarget = true;
|
||||
vec3 sunDir = vec3(1.0, -1.0, 1.0).normalize();
|
||||
|
||||
void toScreenSpace(vec3 *np, mat4 matrix) {
|
||||
vec4 tp = (matrix * vec4(*np, decimal(1.0f)));
|
||||
tp.x() = tp.x() / tp.z() * decimal(SCREEN_SPACE_SIZE) +
|
||||
decimal(SCREEN_SPACE_SIZE);
|
||||
tp.y() = tp.y() / tp.z() * decimal(SCREEN_SPACE_SIZE) +
|
||||
decimal(SCREEN_SPACE_SIZE);
|
||||
*np = vec3(tp.x(), tp.y(), tp.z());
|
||||
}
|
||||
|
||||
void render(const model *model, const mat4 matrix) {
|
||||
decimal widthScale =
|
||||
decimal(SCREEN_SPACE_SIZE * 2) / decimal((float)target->width);
|
||||
decimal heightScale =
|
||||
decimal(SCREEN_SPACE_SIZE * 2) / decimal((float)target->height);
|
||||
|
||||
decimal invWidthScale =
|
||||
decimal((float)(target->width / SCREEN_SPACE_SIZE / 2));
|
||||
decimal invHeightScale =
|
||||
decimal((float)(target->height / SCREEN_SPACE_SIZE / 2));
|
||||
|
||||
// TODO clear target with memset
|
||||
|
||||
vec3 verts[model->verts.size()] = {};
|
||||
|
||||
std::copy(model->verts.begin(), model->verts.end(), verts);
|
||||
|
||||
for (int i = 0; i < model->verts.size(); i++) {
|
||||
toScreenSpace(verts + i, matrix);
|
||||
}
|
||||
|
||||
vec3 normals[model->normals.size()] = {};
|
||||
mat3 normalMatrix = matrix.cutTo<mat3>();
|
||||
for (int i = 0; i < model->normals.size(); i++) {
|
||||
normals[i] = normalMatrix * model->normals[i];
|
||||
}
|
||||
|
||||
polygon testP;
|
||||
|
||||
for (int f = 0; f < model->faces.size(); f += 3) {
|
||||
testP.small = false;
|
||||
for (int p = 0; p < 3; p++) {
|
||||
testP.points[p] = verts[std::get<0>(model->faces[f + p])];
|
||||
testP.colors[p] =
|
||||
model->colors[std::get<0>(model->faces[f + p])];
|
||||
testP.normals[p] = normals[std::get<1>(model->faces[f + p])];
|
||||
}
|
||||
if ((testP.avgNormal() * vec3(0.0, 0.0, 1.0)) > decimal(0.))
|
||||
continue;
|
||||
|
||||
testP.calcDelta();
|
||||
|
||||
int startX = std::max<int>(
|
||||
(testP.bounding[0] * invWidthScale).i >> SHIFT_AMOUNT, 0);
|
||||
int endX = std::max<int>(
|
||||
std::min<int>((testP.bounding[1] * invWidthScale).i >>
|
||||
SHIFT_AMOUNT,
|
||||
(uint32_t)target->width - 1),
|
||||
0);
|
||||
int startY = std::max<int>(
|
||||
(testP.bounding[2] * invHeightScale).i >> SHIFT_AMOUNT, 0);
|
||||
int endY = std::min<int>((testP.bounding[3] * invHeightScale).i >>
|
||||
SHIFT_AMOUNT,
|
||||
target->height - 1);
|
||||
|
||||
std::cout << "Polys:\n" << testP.baryFactor << "\n";
|
||||
for (int i = 0; i < 3; i++) {
|
||||
std::cout << testP.points[i];
|
||||
}
|
||||
std::cout << "Boundings:\n";
|
||||
std::cout << testP.bounding[0] << " " << startX << "\n";
|
||||
std::cout << testP.bounding[1] << " " << endX << "\n";
|
||||
std::cout << testP.bounding[2] << " " << startY << "\n";
|
||||
std::cout << testP.bounding[3] << " " << endY << "\n";
|
||||
|
||||
vec3 pos = vec3(testP.bounding[0], testP.bounding[2], 0.0);
|
||||
for (int x = 0; x < target->width; x++) {
|
||||
for (int y = 0; y < target->height; y++) {
|
||||
// for (int x = startX; x < endX; x++) {
|
||||
// for (int y = startY; y < endY; y++) {
|
||||
|
||||
testP.calcBarycentric(pos);
|
||||
if (testP.contains(pos)) {
|
||||
|
||||
// testP.calcBarycentric(pos);
|
||||
decimal depth = testP.calcDepth();
|
||||
if (depth < target->getDepth(x, y)) {
|
||||
// std::cout << factors << std::endl;
|
||||
vec3 normal = testP.calcNormal();
|
||||
vec3 color = testP.calcColor();
|
||||
decimal lightFac =
|
||||
std::max(normal * (-sunDir), decimal(0.0)) +
|
||||
decimal(0.5);
|
||||
;
|
||||
target->setDepth(x, y, depth);
|
||||
// target->set(x, y,
|
||||
// (color * decimal(120.0)) * lightFac);
|
||||
|
||||
// target->set(x, y,
|
||||
// vec3(lightFac * decimal(200.0), 0, 0));
|
||||
// target->set(x, y,
|
||||
// (normal + vec3(1.0, 1.0, 1.0)) *
|
||||
// decimal(120.0));
|
||||
// target->set(
|
||||
// x, y,
|
||||
// (testP.avgNormal() + vec3(1.0, 1.0, 1.0)) *
|
||||
// decimal(120.0));
|
||||
target->set(x, y,
|
||||
testP.barycentrics * decimal(200.0));
|
||||
// if (!factors.isSmall())
|
||||
// target->set(x, y, vec3(0., 255.0, 0.));
|
||||
}
|
||||
// target->set(x, y, vec3(0.0, 255.0, 0.0));
|
||||
}
|
||||
pos.y() += heightScale;
|
||||
}
|
||||
pos.y() = decimal(testP.bounding[2]);
|
||||
pos.x() += widthScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
45
rendertarget.hpp
Normal file
45
rendertarget.hpp
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
#ifndef RENDERTARGET_H
|
||||
#define RENDERTARGET_H
|
||||
|
||||
#include "fastmath.hpp"
|
||||
class Rendertarget {
|
||||
|
||||
public:
|
||||
const int width;
|
||||
const int height;
|
||||
|
||||
Rendertarget(int width, int height) : width(width), height(height) {
|
||||
pixels = new uint8_t[width * height * 3];
|
||||
depth = new decimal[width * height];
|
||||
for (int i = 0; i < width * height * 3; i++) {
|
||||
pixels[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void set(int x, int y, vec3 val) {
|
||||
int start = (width * y + x) * 3;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
pixels[start + i] = (uint8_t)(val[i].i >> SHIFT_AMOUNT);
|
||||
}
|
||||
}
|
||||
|
||||
decimal getDepth(int x, int y) { return depth[width * y + x]; }
|
||||
void setDepth(int x, int y, decimal val) { depth[width * y + x] = val; }
|
||||
|
||||
void clearDepth() {
|
||||
for (int i = 0; i < width * height; i++) {
|
||||
depth[i].i = std::numeric_limits<int32_t>::max();
|
||||
}
|
||||
}
|
||||
void clearTarget() {
|
||||
for (int i = 0; i < width * height * 3; i++) {
|
||||
pixels[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *pixels;
|
||||
decimal *depth;
|
||||
};
|
||||
|
||||
#endif
|
||||
9
switch.sh
Executable file
9
switch.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ -e "mathTest.cpp" ]; then
|
||||
mv main.cpp oldMain.cpp
|
||||
mv mathTest.cpp main.cpp
|
||||
else
|
||||
mv main.cpp mathTest.cpp
|
||||
mv oldMain.cpp main.cpp
|
||||
fi
|
||||
297
test.gltf
Normal file
297
test.gltf
Normal file
@@ -0,0 +1,297 @@
|
||||
{
|
||||
"asset":{
|
||||
"generator":"Khronos glTF Blender I/O v5.1.18",
|
||||
"version":"2.0"
|
||||
},
|
||||
"scene":0,
|
||||
"scenes":[
|
||||
{
|
||||
"name":"Scene.009",
|
||||
"nodes":[
|
||||
0,
|
||||
1,
|
||||
2
|
||||
]
|
||||
}
|
||||
],
|
||||
"nodes":[
|
||||
{
|
||||
"mesh":0,
|
||||
"name":"Fairy_Dust_full.002",
|
||||
"scale":[
|
||||
0.007043707650154829,
|
||||
0.007043707650154829,
|
||||
0.007043707650154829
|
||||
],
|
||||
"translation":[
|
||||
0,
|
||||
-1.292056679725647,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"mesh":1,
|
||||
"name":"Cylinder.002",
|
||||
"rotation":[
|
||||
0,
|
||||
-0.7071068286895752,
|
||||
0,
|
||||
0.7071068286895752
|
||||
],
|
||||
"scale":[
|
||||
0.7209481596946716,
|
||||
0.7209481596946716,
|
||||
0.7209481596946716
|
||||
],
|
||||
"translation":[
|
||||
0,
|
||||
0.47851109504699707,
|
||||
-10
|
||||
]
|
||||
},
|
||||
{
|
||||
"mesh":2,
|
||||
"name":"Suzanne.001",
|
||||
"translation":[
|
||||
0,
|
||||
2.779357671737671,
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"materials":[
|
||||
{
|
||||
"doubleSided":true,
|
||||
"name":"Material.001",
|
||||
"pbrMetallicRoughness":{
|
||||
"metallicFactor":0
|
||||
}
|
||||
}
|
||||
],
|
||||
"meshes":[
|
||||
{
|
||||
"name":"Fairy_Dust_full.002",
|
||||
"primitives":[
|
||||
{
|
||||
"attributes":{
|
||||
"POSITION":0,
|
||||
"NORMAL":1
|
||||
},
|
||||
"indices":2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name":"Cylinder.002",
|
||||
"primitives":[
|
||||
{
|
||||
"attributes":{
|
||||
"POSITION":3,
|
||||
"NORMAL":4,
|
||||
"TEXCOORD_0":5,
|
||||
"COLOR_0":6
|
||||
},
|
||||
"indices":7,
|
||||
"material":0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name":"Suzanne",
|
||||
"primitives":[
|
||||
{
|
||||
"attributes":{
|
||||
"POSITION":8,
|
||||
"NORMAL":9,
|
||||
"TEXCOORD_0":10
|
||||
},
|
||||
"indices":11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"accessors":[
|
||||
{
|
||||
"bufferView":0,
|
||||
"componentType":5126,
|
||||
"count":444720,
|
||||
"max":[
|
||||
151.8914031982422,
|
||||
630.0626220703125,
|
||||
133.6092071533203
|
||||
],
|
||||
"min":[
|
||||
-103.52690124511719,
|
||||
-4.516704088378728e-15,
|
||||
-133.6092071533203
|
||||
],
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":1,
|
||||
"componentType":5126,
|
||||
"count":444720,
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":2,
|
||||
"componentType":5125,
|
||||
"count":471222,
|
||||
"type":"SCALAR"
|
||||
},
|
||||
{
|
||||
"bufferView":3,
|
||||
"componentType":5126,
|
||||
"count":172,
|
||||
"max":[
|
||||
1.0631183385849,
|
||||
2.3016695976257324,
|
||||
1.0250295400619507
|
||||
],
|
||||
"min":[
|
||||
-1.0094571113586426,
|
||||
-2.2646777629852295,
|
||||
-1.0250295400619507
|
||||
],
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":4,
|
||||
"componentType":5126,
|
||||
"count":172,
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":5,
|
||||
"componentType":5126,
|
||||
"count":172,
|
||||
"type":"VEC2"
|
||||
},
|
||||
{
|
||||
"bufferView":6,
|
||||
"componentType":5126,
|
||||
"count":172,
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":7,
|
||||
"componentType":5123,
|
||||
"count":876,
|
||||
"type":"SCALAR"
|
||||
},
|
||||
{
|
||||
"bufferView":8,
|
||||
"componentType":5126,
|
||||
"count":555,
|
||||
"max":[
|
||||
1.3671875,
|
||||
0.984375,
|
||||
0.8515625
|
||||
],
|
||||
"min":[
|
||||
-1.3671875,
|
||||
-0.984375,
|
||||
-0.8515625
|
||||
],
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":9,
|
||||
"componentType":5126,
|
||||
"count":555,
|
||||
"type":"VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView":10,
|
||||
"componentType":5126,
|
||||
"count":555,
|
||||
"type":"VEC2"
|
||||
},
|
||||
{
|
||||
"bufferView":11,
|
||||
"componentType":5123,
|
||||
"count":2904,
|
||||
"type":"SCALAR"
|
||||
}
|
||||
],
|
||||
"bufferViews":[
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":5336640,
|
||||
"byteOffset":0,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":5336640,
|
||||
"byteOffset":5336640,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":1884888,
|
||||
"byteOffset":10673280,
|
||||
"target":34963
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":2064,
|
||||
"byteOffset":12558168,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":2064,
|
||||
"byteOffset":12560232,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":1376,
|
||||
"byteOffset":12562296,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":2064,
|
||||
"byteOffset":12563672,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":1752,
|
||||
"byteOffset":12565736,
|
||||
"target":34963
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":6660,
|
||||
"byteOffset":12567488,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":6660,
|
||||
"byteOffset":12574148,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":4440,
|
||||
"byteOffset":12580808,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteLength":5808,
|
||||
"byteOffset":12585248,
|
||||
"target":34963
|
||||
}
|
||||
],
|
||||
"buffers":[
|
||||
{
|
||||
"byteLength":12591056,
|
||||
"uri":"test.bin"
|
||||
}
|
||||
]
|
||||
}
|
||||
12
test.mtl
Normal file
12
test.mtl
Normal file
@@ -0,0 +1,12 @@
|
||||
# Blender 5.0.0 MTL File: 'test.blend'
|
||||
# www.blender.org
|
||||
|
||||
newmtl Material.001
|
||||
Ns 0.000000
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.800000 0.800000 0.800000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.500000
|
||||
d 1.000000
|
||||
illum 2
|
||||
836
test.obj
Normal file
836
test.obj
Normal file
@@ -0,0 +1,836 @@
|
||||
# Blender 5.0.0
|
||||
# www.blender.org
|
||||
mtllib test.mtl
|
||||
o Cylinder.003
|
||||
v -0.000000 0.757563 0.698513 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.825787 0.044645 0.0000 0.4470 0.0334
|
||||
v -0.238906 0.757563 0.656388 0.0000 0.4470 0.0334
|
||||
v -0.015270 2.825787 0.041953 0.0000 0.4470 0.0334
|
||||
v -0.448996 0.757563 0.535092 0.0000 0.4470 0.0334
|
||||
v -0.028697 2.825787 0.034200 0.0000 0.4470 0.0334
|
||||
v -0.604930 0.757563 0.349257 0.0000 0.4470 0.0334
|
||||
v -0.038664 2.825787 0.022323 0.0000 0.4470 0.0334
|
||||
v -0.687901 0.757563 0.043996 0.0000 0.4470 0.0334
|
||||
v -0.043967 2.825787 0.018354 0.0000 0.4470 0.0334
|
||||
v -0.687901 0.757563 -0.043996 0.0000 0.4470 0.0334
|
||||
v -0.043967 2.825787 -0.018354 0.0000 0.4470 0.0334
|
||||
v -0.604930 0.757563 -0.349257 0.0000 0.4470 0.0334
|
||||
v -0.038664 2.825787 -0.022323 0.0000 0.4470 0.0334
|
||||
v -0.448996 0.757563 -0.535092 0.0000 0.4470 0.0334
|
||||
v -0.028697 2.825787 -0.034200 0.0000 0.4470 0.0334
|
||||
v -0.238906 0.757563 -0.656388 0.0000 0.4470 0.0334
|
||||
v -0.015270 2.825787 -0.041953 0.0000 0.4470 0.0334
|
||||
v -0.000000 0.757563 -0.698513 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.825787 -0.044645 0.0000 0.4470 0.0334
|
||||
v 0.238906 0.757563 -0.656388 0.0000 0.4470 0.0334
|
||||
v 0.015270 2.825787 -0.041953 0.0000 0.4470 0.0334
|
||||
v 0.448996 0.757563 -0.535092 0.0000 0.4470 0.0334
|
||||
v 0.028697 2.825787 -0.034200 0.0000 0.4470 0.0334
|
||||
v 0.604930 0.757563 -0.349257 0.0000 0.4470 0.0334
|
||||
v 0.038664 2.825787 -0.022323 0.0000 0.4470 0.0334
|
||||
v 0.687901 0.757563 -0.121296 0.0000 0.4470 0.0334
|
||||
v 0.043967 2.825787 -0.007753 0.0000 0.4470 0.0334
|
||||
v 0.687901 0.757563 0.121296 0.0000 0.4470 0.0334
|
||||
v 0.043967 2.825787 0.007753 0.0000 0.4470 0.0334
|
||||
v 0.604930 0.757563 0.349257 0.0000 0.4470 0.0334
|
||||
v 0.038664 2.825787 0.022323 0.0000 0.4470 0.0334
|
||||
v 0.448996 0.757563 0.535092 0.0000 0.4470 0.0334
|
||||
v 0.028697 2.825787 0.034200 0.0000 0.4470 0.0334
|
||||
v 0.238906 0.757563 0.656388 0.0000 0.4470 0.0334
|
||||
v 0.015270 2.825787 0.041953 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.240545 0.544639 0.0000 0.4470 0.0334
|
||||
v -0.186277 2.240545 0.511793 0.0000 0.4470 0.0334
|
||||
v -0.371044 2.128906 0.409479 0.8556 0.8746 1.0000
|
||||
v -0.470774 2.227410 0.290178 0.8556 0.8746 1.0000
|
||||
v -0.539710 2.227410 0.100778 0.8556 0.8746 1.0000
|
||||
v -0.539710 2.227410 -0.100778 0.8556 0.8746 1.0000
|
||||
v -0.470774 2.227410 -0.290178 0.8556 0.8746 1.0000
|
||||
v -0.371044 2.128906 -0.409479 0.8556 0.8746 1.0000
|
||||
v -0.186277 2.240545 -0.511793 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.240545 -0.544639 0.0000 0.4470 0.0334
|
||||
v 0.186277 2.240545 -0.511793 0.0000 0.4470 0.0334
|
||||
v 0.350087 2.240545 -0.417218 0.0000 0.4470 0.0334
|
||||
v 0.471671 2.240545 -0.272319 0.0000 0.4470 0.0334
|
||||
v 0.536364 2.240545 -0.094576 0.0000 0.4470 0.0334
|
||||
v 0.536364 2.240545 0.094576 0.0000 0.4470 0.0334
|
||||
v 0.471671 2.240545 0.272319 0.0000 0.4470 0.0334
|
||||
v 0.350087 2.240545 0.417218 0.0000 0.4470 0.0334
|
||||
v 0.186277 2.240545 0.511793 0.0000 0.4470 0.0334
|
||||
v -0.252751 1.474881 0.694426 0.0000 0.4470 0.0334
|
||||
v -0.497527 1.631239 0.527394 0.8556 0.8746 1.0000
|
||||
v -0.632126 1.488016 0.367433 0.8556 0.8746 1.0000
|
||||
v -0.719415 1.488016 0.127608 0.8556 0.8746 1.0000
|
||||
v -0.719415 1.488016 -0.127608 0.8556 0.8746 1.0000
|
||||
v -0.632126 1.488016 -0.367433 0.8556 0.8746 1.0000
|
||||
v -0.497527 1.631239 -0.527394 0.8556 0.8746 1.0000
|
||||
v -0.252751 1.474881 -0.694426 0.0000 0.4470 0.0334
|
||||
v -0.000000 1.474881 -0.738993 0.0000 0.4470 0.0334
|
||||
v 0.252751 1.474881 -0.694426 0.0000 0.4470 0.0334
|
||||
v 0.475016 1.474881 -0.566102 0.0000 0.4470 0.0334
|
||||
v 0.639987 1.474881 -0.369497 0.0000 0.4470 0.0334
|
||||
v 0.727766 1.474881 -0.128325 0.0000 0.4470 0.0334
|
||||
v 0.727766 1.474881 0.128325 0.0000 0.4470 0.0334
|
||||
v 0.639987 1.474881 0.369497 0.0000 0.4470 0.0334
|
||||
v 0.475016 1.474881 0.566102 0.0000 0.4470 0.0334
|
||||
v 0.252751 1.474881 0.694426 0.0000 0.4470 0.0334
|
||||
v -0.000000 1.474881 0.738993 0.0000 0.4470 0.0334
|
||||
v 0.000000 -0.154204 0.410385 0.0000 0.4470 0.0334
|
||||
v -0.140360 -0.154204 0.385635 0.0000 0.4470 0.0334
|
||||
v -0.263790 -0.154204 0.314373 0.0000 0.4470 0.0334
|
||||
v -0.355403 -0.154204 0.205192 0.0000 0.4470 0.0334
|
||||
v -0.404150 -0.154204 0.071263 0.0000 0.4470 0.0334
|
||||
v -0.404150 -0.154204 -0.071263 0.0000 0.4470 0.0334
|
||||
v -0.355403 -0.154204 -0.205192 0.0000 0.4470 0.0334
|
||||
v -0.263790 -0.154204 -0.314373 0.0000 0.4470 0.0334
|
||||
v -0.140360 -0.154204 -0.385635 0.0000 0.4470 0.0334
|
||||
v 0.000000 -0.154204 -0.410385 0.0000 0.4470 0.0334
|
||||
v 0.140360 -0.154204 -0.385635 0.0000 0.4470 0.0334
|
||||
v 0.263790 -0.154204 -0.314373 0.0000 0.4470 0.0334
|
||||
v 0.355403 -0.154204 -0.205192 0.0000 0.4470 0.0334
|
||||
v 0.404150 -0.154204 -0.071263 0.0000 0.4470 0.0334
|
||||
v 0.404150 -0.154204 0.071263 0.0000 0.4470 0.0334
|
||||
v 0.355403 -0.154204 0.205192 0.0000 0.4470 0.0334
|
||||
v 0.263790 -0.154204 0.314373 0.0000 0.4470 0.0334
|
||||
v 0.140360 -0.154204 0.385635 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.675272 0.237705 0.0000 0.4470 0.0334
|
||||
v -0.081300 2.675272 0.223370 0.0000 0.4470 0.0334
|
||||
v -0.152794 2.675272 0.182093 0.0000 0.4470 0.0334
|
||||
v -0.205859 2.675272 0.118853 0.0000 0.4470 0.0334
|
||||
v -0.234094 2.675272 0.041277 0.0000 0.4470 0.0334
|
||||
v -0.234094 2.675272 -0.041277 0.0000 0.4470 0.0334
|
||||
v -0.205859 2.675272 -0.118853 0.0000 0.4470 0.0334
|
||||
v -0.152794 2.675272 -0.182093 0.0000 0.4470 0.0334
|
||||
v -0.081300 2.675272 -0.223370 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.675272 -0.237705 0.0000 0.4470 0.0334
|
||||
v 0.081300 2.675272 -0.223370 0.0000 0.4470 0.0334
|
||||
v 0.152794 2.675272 -0.182093 0.0000 0.4470 0.0334
|
||||
v 0.205859 2.675272 -0.118853 0.0000 0.4470 0.0334
|
||||
v 0.234094 2.675272 -0.041277 0.0000 0.4470 0.0334
|
||||
v 0.234094 2.675272 0.041277 0.0000 0.4470 0.0334
|
||||
v 0.205859 2.675272 0.118853 0.0000 0.4470 0.0334
|
||||
v 0.152794 2.675272 0.182093 0.0000 0.4470 0.0334
|
||||
v 0.081300 2.675272 0.223370 0.0000 0.4470 0.0334
|
||||
v -0.000000 2.839588 0.046326 0.9696 1.0000 0.0000
|
||||
v 0.040120 2.839588 -0.023163 0.9695 0.9999 0.0005
|
||||
v -0.040120 2.839588 -0.023163 0.9696 1.0000 0.0000
|
||||
v -0.000000 3.137896 0.000000 0.9696 1.0000 0.0000
|
||||
v -0.471671 2.240545 -0.272319 0.0000 0.4470 0.0334
|
||||
v -0.350087 2.141971 -0.417218 0.0000 0.4470 0.0334
|
||||
v -0.536364 2.240545 -0.061970 0.0000 0.4470 0.0334
|
||||
v -0.536364 2.240545 0.061970 0.0000 0.4470 0.0334
|
||||
v -0.471671 2.240545 0.272319 0.0000 0.4470 0.0334
|
||||
v -0.350087 2.141971 0.417218 0.0000 0.4470 0.0334
|
||||
v -0.475016 1.618174 0.566102 0.0000 0.4470 0.0334
|
||||
v -0.475016 1.618174 -0.566102 0.0000 0.4470 0.0334
|
||||
v -0.639987 1.474881 0.369497 0.0000 0.4470 0.0334
|
||||
v -0.727766 1.474881 0.046546 0.0000 0.4470 0.0334
|
||||
v -0.727766 1.474881 -0.046546 0.0000 0.4470 0.0334
|
||||
v -0.639987 1.474881 -0.369497 0.0000 0.4470 0.0334
|
||||
v -0.625731 2.117707 0.237002 0.1450 0.1371 0.1900
|
||||
v -0.728921 1.652925 0.257333 0.1450 0.1371 0.1900
|
||||
v -0.682034 2.117707 0.082310 0.1450 0.1371 0.1900
|
||||
v -0.766453 1.652925 0.089371 0.1450 0.1371 0.1900
|
||||
v -0.682034 2.117707 -0.082310 0.1450 0.1371 0.1900
|
||||
v -0.766453 1.652925 -0.089371 0.1450 0.1371 0.1900
|
||||
v -0.625731 2.117707 -0.237002 0.1450 0.1371 0.1900
|
||||
v -0.728921 1.652925 -0.257333 0.1450 0.1371 0.1900
|
||||
v -0.544276 2.019176 -0.334441 0.1450 0.1371 0.1900
|
||||
v -0.544276 2.019176 0.334441 0.1450 0.1371 0.1900
|
||||
v -0.671046 1.735177 0.369362 0.1450 0.1371 0.1900
|
||||
v -0.671046 1.735177 -0.369362 0.1450 0.1371 0.1900
|
||||
v -0.616476 2.201041 0.096339 0.1450 0.1371 0.1900
|
||||
v -0.616476 2.201041 -0.096339 0.1450 0.1371 0.1900
|
||||
v -0.539235 1.656222 0.489408 0.1450 0.1371 0.1900
|
||||
v -0.455240 2.102530 0.391442 0.1450 0.1371 0.1900
|
||||
v -0.730721 1.527654 0.118417 0.1450 0.1371 0.1900
|
||||
v -0.730721 1.527654 -0.118417 0.1450 0.1371 0.1900
|
||||
v -0.539235 1.656222 -0.489408 0.1450 0.1371 0.1900
|
||||
v -0.455240 2.102530 -0.391442 0.1450 0.1371 0.1900
|
||||
v -0.550577 2.201041 0.277396 0.1450 0.1371 0.1900
|
||||
v -0.655392 1.527654 -0.340969 0.1450 0.1371 0.1900
|
||||
v -0.550577 2.201041 -0.277396 0.1450 0.1371 0.1900
|
||||
v -0.655392 1.527654 0.340969 0.1450 0.1371 0.1900
|
||||
v -0.687901 0.757563 0.040432 0.7050 0.7349 0.2011
|
||||
v -0.687901 0.757563 -0.040432 0.7050 0.7349 0.2011
|
||||
v -0.043967 2.825787 -0.002584 0.7050 0.7349 0.2011
|
||||
v -0.043967 2.825787 0.002584 0.7050 0.7349 0.2011
|
||||
v -0.536364 2.240545 0.031525 0.7050 0.7349 0.2011
|
||||
v -0.536364 2.240545 -0.031525 0.7050 0.7349 0.2011
|
||||
v -0.727766 1.474881 0.042775 0.7050 0.7349 0.2011
|
||||
v -0.727766 1.474881 -0.042775 0.7050 0.7349 0.2011
|
||||
v -0.404150 -0.154204 0.023754 0.7050 0.7349 0.2011
|
||||
v -0.404150 -0.154204 -0.023754 0.7050 0.7349 0.2011
|
||||
v -0.234094 2.675272 0.013759 0.7050 0.7349 0.2011
|
||||
v -0.234094 2.675272 -0.013759 0.7050 0.7349 0.2011
|
||||
v -0.539710 2.227410 0.033593 0.8556 0.8746 1.0000
|
||||
v -0.539710 2.227410 -0.033593 0.8556 0.8746 1.0000
|
||||
v -0.719415 1.488016 0.042536 0.8556 0.8746 1.0000
|
||||
v -0.719415 1.488016 -0.042536 0.8556 0.8746 1.0000
|
||||
v -0.682034 2.117707 0.027437 0.1450 0.1371 0.1900
|
||||
v -0.682034 2.117707 -0.027437 0.1450 0.1371 0.1900
|
||||
v -0.766453 1.652925 0.029790 0.1450 0.1371 0.1900
|
||||
v -0.766453 1.652925 -0.029790 0.1450 0.1371 0.1900
|
||||
v -0.616476 2.201041 -0.032113 0.1450 0.1371 0.1900
|
||||
v -0.616476 2.201041 0.032113 0.1450 0.1371 0.1900
|
||||
v -0.730721 1.527654 0.039472 0.1450 0.1371 0.1900
|
||||
v -0.730721 1.527654 -0.039472 0.1450 0.1371 0.1900
|
||||
vn -0.0000 -0.1778 0.9841
|
||||
vn -0.0000 0.4043 0.9146
|
||||
vn -0.3366 -0.1778 0.9247
|
||||
vn -0.3310 0.5378 0.7754
|
||||
vn -0.6327 -0.1768 0.7540
|
||||
vn -0.4632 0.7357 0.4942
|
||||
vn -0.8715 -0.1746 0.4583
|
||||
vn -0.4263 0.8241 0.3730
|
||||
vn -0.9766 -0.1731 0.1279
|
||||
vn -0.4586 0.8447 0.2760
|
||||
vn -0.9766 -0.1731 -0.1279
|
||||
vn -0.7539 0.5676 -0.3309
|
||||
vn -0.8715 -0.1746 -0.4583
|
||||
vn -0.6446 0.3655 -0.6715
|
||||
vn -0.6327 -0.1768 -0.7540
|
||||
vn -0.5060 0.5378 -0.6743
|
||||
vn -0.3366 -0.1778 -0.9247
|
||||
vn -0.1964 0.7357 -0.6483
|
||||
vn -0.0000 -0.1778 -0.9841
|
||||
vn -0.0000 0.7980 -0.6026
|
||||
vn 0.3366 -0.1778 -0.9247
|
||||
vn 0.1964 0.7357 -0.6483
|
||||
vn 0.6325 -0.1778 -0.7538
|
||||
vn 0.5060 0.5378 -0.6743
|
||||
vn 0.8522 -0.1778 -0.4920
|
||||
vn 0.7921 0.4043 -0.4573
|
||||
vn 0.9691 -0.1778 -0.1709
|
||||
vn 0.8370 0.5378 -0.1010
|
||||
vn 0.9691 -0.1778 0.1709
|
||||
vn 0.6596 0.7357 0.1541
|
||||
vn 0.8522 -0.1778 0.4920
|
||||
vn 0.5219 0.7980 0.3013
|
||||
vn 0.6325 -0.1778 0.7538
|
||||
vn 0.4632 0.7357 0.4942
|
||||
vn 0.3366 -0.1778 0.9247
|
||||
vn 0.3310 0.5378 0.7754
|
||||
vn -0.0000 0.4109 0.9117
|
||||
vn -0.3877 0.4345 0.8130
|
||||
vn -0.4535 0.3907 0.8011
|
||||
vn -0.3037 0.7552 0.5809
|
||||
vn -0.5096 0.8517 0.1225
|
||||
vn -0.5096 0.8517 -0.1225
|
||||
vn -0.3037 0.7552 -0.5809
|
||||
vn -0.4535 0.3907 -0.8011
|
||||
vn -0.3877 0.4345 -0.8130
|
||||
vn -0.0000 0.4109 -0.9117
|
||||
vn 0.3118 0.4109 -0.8567
|
||||
vn 0.5860 0.4109 -0.6984
|
||||
vn 0.7895 0.4109 -0.4558
|
||||
vn 0.8978 0.4109 -0.1583
|
||||
vn 0.8978 0.4109 0.1583
|
||||
vn 0.7895 0.4109 0.4558
|
||||
vn 0.5860 0.4109 0.6984
|
||||
vn 0.3118 0.4109 0.8567
|
||||
vn -0.3267 0.0728 0.9423
|
||||
vn -0.7472 0.1973 0.6347
|
||||
vn -0.8652 0.2699 0.4225
|
||||
vn -0.8748 -0.4449 0.1917
|
||||
vn -0.8748 -0.4449 -0.1917
|
||||
vn -0.8652 0.2699 -0.4225
|
||||
vn -0.7472 0.1973 -0.6347
|
||||
vn -0.3267 0.0728 -0.9423
|
||||
vn -0.0000 0.0944 -0.9955
|
||||
vn 0.3405 0.0944 -0.9355
|
||||
vn 0.6399 0.0944 -0.7626
|
||||
vn 0.8622 0.0944 -0.4978
|
||||
vn 0.9804 0.0944 -0.1729
|
||||
vn 0.9804 0.0944 0.1729
|
||||
vn 0.8622 0.0944 0.4978
|
||||
vn 0.6399 0.0944 0.7626
|
||||
vn 0.3405 0.0944 0.9355
|
||||
vn -0.0000 0.0944 0.9955
|
||||
vn -0.0000 -0.7761 0.6306
|
||||
vn -0.2157 -0.7761 0.5926
|
||||
vn -0.4053 -0.7761 0.4830
|
||||
vn -0.5461 -0.7761 0.3153
|
||||
vn -0.6219 -0.7754 0.1097
|
||||
vn -0.6219 -0.7754 -0.1097
|
||||
vn -0.5461 -0.7761 -0.3153
|
||||
vn -0.4053 -0.7761 -0.4831
|
||||
vn -0.2157 -0.7761 -0.5925
|
||||
vn -0.0000 -0.7761 -0.6306
|
||||
vn 0.2157 -0.7761 -0.5925
|
||||
vn 0.4053 -0.7761 -0.4831
|
||||
vn 0.5461 -0.7761 -0.3153
|
||||
vn 0.6210 -0.7761 -0.1095
|
||||
vn 0.6210 -0.7761 0.1095
|
||||
vn 0.5461 -0.7761 0.3153
|
||||
vn 0.4053 -0.7761 0.4830
|
||||
vn 0.2157 -0.7761 0.5926
|
||||
vn -0.0000 0.6821 0.7312
|
||||
vn -0.2501 0.6821 0.6871
|
||||
vn -0.4746 0.6745 0.5656
|
||||
vn -0.6339 0.6806 0.3674
|
||||
vn -0.7224 0.6799 0.1262
|
||||
vn -0.7224 0.6799 -0.1262
|
||||
vn -0.6339 0.6806 -0.3674
|
||||
vn -0.4746 0.6745 -0.5656
|
||||
vn -0.2501 0.6821 -0.6871
|
||||
vn -0.0000 0.6821 -0.7312
|
||||
vn 0.2501 0.6821 -0.6871
|
||||
vn 0.4700 0.6821 -0.5601
|
||||
vn 0.6333 0.6821 -0.3656
|
||||
vn 0.7201 0.6821 -0.1270
|
||||
vn 0.7201 0.6821 0.1270
|
||||
vn 0.6333 0.6821 0.3656
|
||||
vn 0.4700 0.6821 0.5601
|
||||
vn 0.2501 0.6821 0.6871
|
||||
vn -0.0000 0.3307 0.9437
|
||||
vn 0.8173 0.3307 -0.4719
|
||||
vn -0.7954 0.3664 -0.4828
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.7054 0.5308 -0.4698
|
||||
vn -0.5620 0.4126 -0.7169
|
||||
vn -0.8901 0.4498 -0.0734
|
||||
vn -0.8901 0.4498 0.0734
|
||||
vn -0.7054 0.5308 0.4698
|
||||
vn -0.5620 0.4126 0.7169
|
||||
vn -0.6315 0.1650 0.7577
|
||||
vn -0.6315 0.1650 -0.7577
|
||||
vn -0.8818 0.1842 0.4342
|
||||
vn -0.9740 0.2132 0.0768
|
||||
vn -0.9740 0.2132 -0.0768
|
||||
vn -0.8818 0.1842 -0.4342
|
||||
vn -0.7907 0.3661 0.4906
|
||||
vn -0.9379 -0.0553 0.3424
|
||||
vn -0.9051 0.4003 0.1431
|
||||
vn -0.9942 -0.0377 0.1012
|
||||
vn -0.9051 0.4003 -0.1431
|
||||
vn -0.9942 -0.0377 -0.1012
|
||||
vn -0.7907 0.3661 -0.4906
|
||||
vn -0.9379 -0.0553 -0.3424
|
||||
vn -0.6159 0.2805 -0.7362
|
||||
vn -0.6159 0.2805 0.7362
|
||||
vn -0.7741 0.1400 0.6174
|
||||
vn -0.7741 0.1400 -0.6174
|
||||
vn -0.6037 0.7887 0.1165
|
||||
vn -0.6037 0.7887 -0.1165
|
||||
vn -0.6512 0.0880 0.7537
|
||||
vn -0.4541 0.3734 0.8090
|
||||
vn -0.9560 -0.2577 0.1400
|
||||
vn -0.9560 -0.2577 -0.1400
|
||||
vn -0.6512 0.0880 -0.7537
|
||||
vn -0.4541 0.3734 -0.8090
|
||||
vn -0.5539 0.6625 0.5043
|
||||
vn -0.8527 -0.2028 -0.4814
|
||||
vn -0.5539 0.6625 -0.5043
|
||||
vn -0.8527 -0.2028 0.4814
|
||||
vn -0.9841 -0.1777 -0.0000
|
||||
vn -0.8329 0.5534 -0.0000
|
||||
vn -0.8329 0.5535 -0.0000
|
||||
vn -0.9096 0.4155 -0.0000
|
||||
vn -0.9676 0.2526 -0.0000
|
||||
vn -0.9676 0.2527 -0.0000
|
||||
vn -0.5928 -0.8053 -0.0000
|
||||
vn -0.7287 0.6848 -0.0000
|
||||
vn -0.7353 0.6777 -0.0000
|
||||
vn -0.9896 0.1437 -0.0000
|
||||
vn -0.9118 0.4106 -0.0000
|
||||
vn -0.9988 -0.0491 -0.0000
|
||||
vn -0.5790 0.8153 -0.0000
|
||||
vn -0.9616 -0.2743 -0.0000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.944444 0.875000
|
||||
vt 1.000000 0.875000
|
||||
vt 0.888889 1.000000
|
||||
vt 0.888889 0.875000
|
||||
vt 0.833333 0.875000
|
||||
vt 0.777778 1.000000
|
||||
vt 0.777778 0.875000
|
||||
vt 0.740741 0.875000
|
||||
vt 0.722222 1.000000
|
||||
vt 0.722222 0.875000
|
||||
vt 0.666667 0.875000
|
||||
vt 0.611111 1.000000
|
||||
vt 0.611111 0.875000
|
||||
vt 0.555555 0.875000
|
||||
vt 0.500000 1.000000
|
||||
vt 0.500000 0.875000
|
||||
vt 0.444444 0.875000
|
||||
vt 0.388889 1.000000
|
||||
vt 0.388889 0.875000
|
||||
vt 0.333333 0.875000
|
||||
vt 0.333333 1.000000
|
||||
vt 0.277778 0.875000
|
||||
vt 0.277778 1.000000
|
||||
vt 0.222222 0.875000
|
||||
vt 0.166666 1.000000
|
||||
vt 0.166666 0.875000
|
||||
vt 0.111111 0.875000
|
||||
vt 0.111111 1.000000
|
||||
vt 0.055555 0.875000
|
||||
vt 0.055555 1.000000
|
||||
vt -0.000000 0.875000
|
||||
vt 0.888889 0.500000
|
||||
vt 0.944444 0.500000
|
||||
vt 0.055555 0.750000
|
||||
vt -0.000000 0.620925
|
||||
vt 0.055555 0.620925
|
||||
vt 0.111111 0.750000
|
||||
vt 0.111111 0.620925
|
||||
vt 0.166666 0.750000
|
||||
vt 0.166666 0.620925
|
||||
vt 0.222222 0.750000
|
||||
vt 0.222222 0.620925
|
||||
vt 0.277778 0.750000
|
||||
vt 0.277778 0.620925
|
||||
vt 0.333333 0.620925
|
||||
vt 0.388889 0.620925
|
||||
vt 0.333333 0.750000
|
||||
vt 0.444444 0.750000
|
||||
vt 0.444444 0.620925
|
||||
vt 0.500000 0.620925
|
||||
vt 0.555555 0.750000
|
||||
vt 0.555555 0.620925
|
||||
vt 0.611111 0.620925
|
||||
vt 0.777791 0.742476
|
||||
vt 0.833347 0.742476
|
||||
vt 0.833347 0.742476
|
||||
vt 0.621250 0.628449
|
||||
vt 0.623706 0.742476
|
||||
vt 0.759270 0.628449
|
||||
vt 0.777789 0.628449
|
||||
vt 0.759270 0.628449
|
||||
vt 0.740754 0.742476
|
||||
vt 0.722236 0.742476
|
||||
vt 0.740754 0.742476
|
||||
vt 0.878750 0.628449
|
||||
vt 0.876294 0.742476
|
||||
vt 0.878750 0.628449
|
||||
vt 0.944444 0.750000
|
||||
vt 0.888889 0.620925
|
||||
vt 0.944444 0.620925
|
||||
vt 1.000000 0.620925
|
||||
vt 1.000000 0.500000
|
||||
vt 0.833333 0.620925
|
||||
vt 0.833333 0.500000
|
||||
vt 0.777778 0.620925
|
||||
vt 0.777778 0.500000
|
||||
vt 0.740741 0.620925
|
||||
vt 0.722222 0.500000
|
||||
vt 0.740741 0.500000
|
||||
vt 0.722222 0.620925
|
||||
vt 0.666667 0.500000
|
||||
vt 0.666666 0.620925
|
||||
vt 0.611111 0.500000
|
||||
vt 0.555555 0.500000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.444444 0.500000
|
||||
vt 0.388889 0.500000
|
||||
vt 0.333333 0.500000
|
||||
vt 0.277778 0.500000
|
||||
vt 0.222222 0.500000
|
||||
vt 0.166666 0.500000
|
||||
vt 0.111111 0.500000
|
||||
vt 0.055555 0.500000
|
||||
vt -0.000000 0.500000
|
||||
vt 0.986354 0.236108
|
||||
vt 0.750000 0.010000
|
||||
vt 0.513646 0.208324
|
||||
vt 0.740741 0.500000
|
||||
vt -0.000000 0.750000
|
||||
vt 0.388889 0.750000
|
||||
vt 0.500000 0.750000
|
||||
vt 0.611111 0.750000
|
||||
vt 0.666667 0.750000
|
||||
vt 0.722222 0.750000
|
||||
vt 0.740741 0.750000
|
||||
vt 0.833333 0.750000
|
||||
vt 0.777778 0.750000
|
||||
vt 0.888889 0.750000
|
||||
vt 1.000000 0.750000
|
||||
vt 0.000000 0.000000
|
||||
vt 0.944444 1.000000
|
||||
vt 0.833333 1.000000
|
||||
vt 0.740741 1.000000
|
||||
vt 0.759259 1.000000
|
||||
vt 0.666667 1.000000
|
||||
vt 0.555555 1.000000
|
||||
vt 0.444444 1.000000
|
||||
vt 0.222222 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.666680 0.742476
|
||||
vt 0.759273 0.742476
|
||||
vt 0.759259 0.750000
|
||||
vt 0.833345 0.628449
|
||||
vt 0.740752 0.628449
|
||||
vt 0.722233 0.628449
|
||||
vt 0.666678 0.628449
|
||||
vt 0.666680 0.742476
|
||||
vt 0.833345 0.628449
|
||||
vt 0.876294 0.742476
|
||||
vt 0.722236 0.742476
|
||||
vt 0.777789 0.628449
|
||||
vt 0.740754 0.742476
|
||||
vt 0.740752 0.628449
|
||||
vt 0.759273 0.742476
|
||||
vt 0.759259 0.620925
|
||||
vt 0.759259 0.875000
|
||||
vt 0.759259 0.500000
|
||||
vt 0.759259 0.500000
|
||||
vt 0.667915 0.475526
|
||||
vt 0.750000 0.490000
|
||||
vt 0.832085 0.475526
|
||||
vt 0.904269 0.433851
|
||||
vt 0.957846 0.370000
|
||||
vt 0.986354 0.291676
|
||||
vt 0.986354 0.263892
|
||||
vt 0.986354 0.208324
|
||||
vt 0.957846 0.130000
|
||||
vt 0.542154 0.370000
|
||||
vt 0.595731 0.433851
|
||||
vt 0.513646 0.291676
|
||||
vt 0.595731 0.066149
|
||||
vt 0.542154 0.130000
|
||||
vt 0.667915 0.024474
|
||||
vt 0.904269 0.066149
|
||||
vt 0.832085 0.024474
|
||||
s 1
|
||||
usemtl Material.001
|
||||
f 2/1/2 92/2/92 91/3/91
|
||||
f 92/2/92 6/4/6 93/5/93
|
||||
f 6/4/6 94/6/94 93/5/93
|
||||
f 94/6/94 10/7/10 95/8/95
|
||||
f 160/9/156 12/10/12 96/11/96
|
||||
f 12/10/12 97/12/97 96/11/96
|
||||
f 97/12/97 16/13/16 98/14/98
|
||||
f 16/13/16 99/15/99 98/14/98
|
||||
f 99/15/99 20/16/20 100/17/100
|
||||
f 20/16/20 101/18/101 100/17/100
|
||||
f 101/18/101 24/19/24 102/20/102
|
||||
f 24/19/24 103/21/103 102/20/102
|
||||
f 26/22/26 104/23/104 103/21/103
|
||||
f 28/24/28 105/25/105 104/23/104
|
||||
f 105/25/105 32/26/32 106/27/106
|
||||
f 32/26/32 107/28/107 106/27/106
|
||||
f 34/29/34 108/30/108 107/28/107
|
||||
f 36/31/36 91/32/91 108/30/108
|
||||
f 5/33/5 74/34/74 3/34/3
|
||||
f 54/35/54 72/36/72 71/37/71
|
||||
f 53/38/53 71/37/71 70/39/70
|
||||
f 52/40/52 70/39/70 69/41/69
|
||||
f 51/42/51 69/41/69 68/43/68
|
||||
f 50/44/50 68/43/68 67/45/67
|
||||
f 66/46/66 50/44/50 67/45/67
|
||||
f 65/47/65 49/48/49 66/46/66
|
||||
f 47/49/47 65/47/65 64/50/64
|
||||
f 63/51/63 47/49/47 64/50/64
|
||||
f 45/52/45 63/51/63 62/53/62
|
||||
f 120/54/120 45/52/45 62/53/62
|
||||
f 137/55/137 125/56/125 145/57/145
|
||||
f 143/58/143 133/59/133 144/59/144
|
||||
f 171/60/162 128/61/128 167/62/160
|
||||
f 169/63/161 129/64/129 166/65/159
|
||||
f 139/66/139 134/67/134 135/68/135
|
||||
f 38/69/38 119/70/119 55/71/55
|
||||
f 72/72/72 38/69/38 55/71/55
|
||||
f 1/73/1 55/71/55 3/34/3
|
||||
f 55/71/55 5/33/5 3/34/3
|
||||
f 5/33/5 121/74/121 7/75/7
|
||||
f 7/75/7 122/76/122 9/77/9
|
||||
f 156/78/154 11/79/11 150/80/149
|
||||
f 123/81/123 13/82/13 11/79/11
|
||||
f 124/83/124 15/84/15 13/82/13
|
||||
f 15/84/15 62/53/62 17/85/17
|
||||
f 17/85/17 63/51/63 19/86/19
|
||||
f 19/86/19 64/50/64 21/87/21
|
||||
f 64/50/64 23/88/23 21/87/21
|
||||
f 65/47/65 25/89/25 23/88/23
|
||||
f 66/46/66 27/90/27 25/89/25
|
||||
f 67/45/67 29/91/29 27/90/27
|
||||
f 68/43/68 31/92/31 29/91/29
|
||||
f 69/41/69 33/93/33 31/92/31
|
||||
f 70/39/70 35/94/35 33/93/33
|
||||
f 35/94/35 72/36/72 1/95/1
|
||||
f 158/96/155 82/97/82 86/98/86
|
||||
f 15/84/15 79/82/79 13/82/13
|
||||
f 25/89/25 84/88/84 23/88/23
|
||||
f 35/94/35 89/93/89 33/93/33
|
||||
f 11/79/11 158/99/155 150/80/149
|
||||
f 21/87/21 82/86/82 19/86/19
|
||||
f 31/92/31 87/91/87 29/91/29
|
||||
f 7/75/7 75/33/75 5/33/5
|
||||
f 17/85/17 80/84/80 15/84/15
|
||||
f 3/34/3 73/73/73 1/73/1
|
||||
f 27/90/27 85/89/85 25/89/25
|
||||
f 1/95/1 90/94/90 35/94/35
|
||||
f 13/82/13 78/79/78 11/79/11
|
||||
f 23/88/23 83/87/83 21/87/21
|
||||
f 33/93/33 88/92/88 31/92/31
|
||||
f 7/75/7 77/77/77 76/75/76
|
||||
f 19/86/19 81/85/81 17/85/17
|
||||
f 29/91/29 86/90/86 27/90/27
|
||||
f 108/30/108 37/100/37 54/35/54
|
||||
f 107/28/107 54/35/54 53/38/53
|
||||
f 106/27/106 53/38/53 52/40/52
|
||||
f 105/25/105 52/40/52 51/42/51
|
||||
f 104/23/104 51/42/51 50/44/50
|
||||
f 103/21/103 50/44/50 49/48/49
|
||||
f 102/20/102 49/48/49 48/101/48
|
||||
f 101/18/101 48/101/48 47/49/47
|
||||
f 100/17/100 47/49/47 46/102/46
|
||||
f 99/15/99 46/102/46 45/52/45
|
||||
f 98/14/98 45/52/45 114/103/114
|
||||
f 113/104/113 98/14/98 114/103/114
|
||||
f 96/11/96 113/104/113 115/105/115
|
||||
f 154/106/152 96/11/96 115/105/115
|
||||
f 117/107/117 95/8/95 116/108/116
|
||||
f 93/5/93 117/107/117 118/109/118
|
||||
f 38/69/38 93/5/93 118/109/118
|
||||
f 91/3/91 38/69/38 37/110/37
|
||||
f 109/111/109 6/4/6 4/112/4
|
||||
f 109/111/109 8/113/8 6/4/6
|
||||
f 111/111/111 8/113/8 109/111/109
|
||||
f 111/111/111 151/114/150 152/115/151
|
||||
f 111/111/111 14/116/14 12/10/12
|
||||
f 111/111/111 16/13/16 14/116/14
|
||||
f 111/111/111 18/117/18 16/13/16
|
||||
f 111/111/111 20/16/20 18/117/18
|
||||
f 110/111/110 20/16/20 111/111/111
|
||||
f 110/111/110 24/19/24 22/118/22
|
||||
f 110/111/110 26/22/26 24/19/24
|
||||
f 110/111/110 28/24/28 26/22/26
|
||||
f 110/111/110 30/119/30 28/24/28
|
||||
f 110/111/110 32/26/32 30/119/30
|
||||
f 109/111/109 32/26/32 110/111/110
|
||||
f 109/111/109 36/31/36 34/29/34
|
||||
f 109/111/109 2/120/2 36/31/36
|
||||
f 109/111/109 4/112/4 2/1/2
|
||||
f 111/111/111 10/7/10 8/113/8
|
||||
f 110/111/110 22/118/22 20/16/20
|
||||
f 109/111/109 34/29/34 32/26/32
|
||||
f 111/111/111 109/111/109 112/111/112
|
||||
f 110/111/110 111/111/111 112/111/112
|
||||
f 109/111/109 110/111/110 112/111/112
|
||||
f 43/121/43 114/103/114 44/59/44
|
||||
f 42/64/42 113/104/113 43/121/43
|
||||
f 161/122/157 116/108/116 153/123/152
|
||||
f 41/55/41 117/107/117 116/108/116
|
||||
f 40/56/40 118/109/118 117/107/117
|
||||
f 39/67/39 119/70/119 118/109/118
|
||||
f 44/59/44 120/54/120 61/58/61
|
||||
f 57/124/57 119/70/119 56/68/56
|
||||
f 58/61/58 121/74/121 57/124/57
|
||||
f 164/125/158 123/81/123 156/78/154
|
||||
f 59/126/59 124/83/124 123/81/123
|
||||
f 60/127/60 120/54/120 124/83/124
|
||||
f 131/121/131 136/58/136 132/127/132
|
||||
f 129/64/129 132/127/132 130/126/130
|
||||
f 168/125/160 129/64/129 130/126/130
|
||||
f 126/124/126 127/55/127 128/61/128
|
||||
f 135/68/135 125/56/125 126/124/126
|
||||
f 142/126/142 132/127/132 146/127/146
|
||||
f 147/128/147 133/59/133 131/121/131
|
||||
f 148/129/148 135/68/135 126/124/126
|
||||
f 145/57/145 134/67/134 140/130/140
|
||||
f 146/127/146 136/58/136 143/58/143
|
||||
f 138/131/138 131/121/131 129/64/129
|
||||
f 141/132/141 126/124/126 128/61/128
|
||||
f 58/61/58 148/129/148 141/132/141
|
||||
f 42/64/42 147/128/147 138/131/138
|
||||
f 60/127/60 143/58/143 61/58/61
|
||||
f 40/56/40 140/130/140 39/67/39
|
||||
f 57/124/57 139/66/139 148/129/148
|
||||
f 43/121/43 144/59/144 147/128/147
|
||||
f 59/126/59 146/127/146 60/127/60
|
||||
f 56/68/56 140/130/140 139/66/139
|
||||
f 162/133/157 138/131/138 169/63/161
|
||||
f 163/62/158 141/132/141 171/60/162
|
||||
f 61/58/61 144/59/144 44/59/44
|
||||
f 41/55/41 145/57/145 40/56/40
|
||||
f 164/125/158 142/126/142 59/126/59
|
||||
f 164/125/158 171/60/162 172/134/162
|
||||
f 161/122/157 137/55/137 41/55/41
|
||||
f 161/122/157 169/63/161 170/135/161
|
||||
f 127/55/127 167/62/160 128/61/128
|
||||
f 165/122/159 168/125/160 167/62/160
|
||||
f 163/62/158 122/76/122 58/61/58
|
||||
f 164/125/158 155/136/153 163/62/158
|
||||
f 162/133/157 115/105/115 42/64/42
|
||||
f 162/133/157 153/123/152 154/106/152
|
||||
f 95/8/95 153/123/152 116/108/116
|
||||
f 159/137/156 154/106/152 153/123/152
|
||||
f 9/77/9 157/138/155 77/77/77
|
||||
f 150/80/149 157/138/155 149/139/149
|
||||
f 9/77/9 155/136/153 149/139/149
|
||||
f 155/136/153 150/80/149 149/139/149
|
||||
f 170/135/161 127/55/127 137/55/137
|
||||
f 169/63/161 165/122/159 170/135/161
|
||||
f 172/134/162 130/126/130 142/126/142
|
||||
f 172/134/162 167/62/160 168/125/160
|
||||
f 10/7/10 159/137/156 95/8/95
|
||||
f 152/115/151 160/9/156 159/137/156
|
||||
f 2/1/2 4/112/4 92/2/92
|
||||
f 92/2/92 4/112/4 6/4/6
|
||||
f 6/4/6 8/113/8 94/6/94
|
||||
f 94/6/94 8/113/8 10/7/10
|
||||
f 160/9/156 151/114/150 12/10/12
|
||||
f 12/10/12 14/116/14 97/12/97
|
||||
f 97/12/97 14/116/14 16/13/16
|
||||
f 16/13/16 18/117/18 99/15/99
|
||||
f 99/15/99 18/117/18 20/16/20
|
||||
f 20/16/20 22/118/22 101/18/101
|
||||
f 101/18/101 22/118/22 24/19/24
|
||||
f 24/19/24 26/22/26 103/21/103
|
||||
f 26/22/26 28/24/28 104/23/104
|
||||
f 28/24/28 30/119/30 105/25/105
|
||||
f 105/25/105 30/119/30 32/26/32
|
||||
f 32/26/32 34/29/34 107/28/107
|
||||
f 34/29/34 36/31/36 108/30/108
|
||||
f 36/31/36 2/120/2 91/32/91
|
||||
f 5/33/5 75/33/75 74/34/74
|
||||
f 54/35/54 37/100/37 72/36/72
|
||||
f 53/38/53 54/35/54 71/37/71
|
||||
f 52/40/52 53/38/53 70/39/70
|
||||
f 51/42/51 52/40/52 69/41/69
|
||||
f 50/44/50 51/42/51 68/43/68
|
||||
f 66/46/66 49/48/49 50/44/50
|
||||
f 65/47/65 48/101/48 49/48/49
|
||||
f 47/49/47 48/101/48 65/47/65
|
||||
f 63/51/63 46/102/46 47/49/47
|
||||
f 45/52/45 46/102/46 63/51/63
|
||||
f 120/54/120 114/103/114 45/52/45
|
||||
f 137/55/137 127/55/127 125/56/125
|
||||
f 143/58/143 136/58/136 133/59/133
|
||||
f 171/60/162 141/132/141 128/61/128
|
||||
f 169/63/161 138/131/138 129/64/129
|
||||
f 139/66/139 140/130/140 134/67/134
|
||||
f 38/69/38 118/109/118 119/70/119
|
||||
f 72/72/72 37/110/37 38/69/38
|
||||
f 1/73/1 72/72/72 55/71/55
|
||||
f 55/71/55 119/70/119 5/33/5
|
||||
f 5/33/5 119/70/119 121/74/121
|
||||
f 7/75/7 121/74/121 122/76/122
|
||||
f 156/78/154 123/81/123 11/79/11
|
||||
f 123/81/123 124/83/124 13/82/13
|
||||
f 124/83/124 120/54/120 15/84/15
|
||||
f 15/84/15 120/54/120 62/53/62
|
||||
f 17/85/17 62/53/62 63/51/63
|
||||
f 19/86/19 63/51/63 64/50/64
|
||||
f 64/50/64 65/47/65 23/88/23
|
||||
f 65/47/65 66/46/66 25/89/25
|
||||
f 66/46/66 67/45/67 27/90/27
|
||||
f 67/45/67 68/43/68 29/91/29
|
||||
f 68/43/68 69/41/69 31/92/31
|
||||
f 69/41/69 70/39/70 33/93/33
|
||||
f 70/39/70 71/37/71 35/94/35
|
||||
f 35/94/35 71/37/71 72/36/72
|
||||
f 90/140/90 73/141/73 74/142/74
|
||||
f 74/142/74 75/143/75 76/144/76
|
||||
f 76/144/76 77/145/77 157/146/155
|
||||
f 158/96/155 78/147/78 79/148/79
|
||||
f 76/144/76 157/146/155 158/96/155
|
||||
f 90/140/90 74/142/74 76/144/76
|
||||
f 88/149/88 89/150/89 90/140/90
|
||||
f 86/98/86 87/151/87 88/149/88
|
||||
f 84/152/84 85/153/85 86/98/86
|
||||
f 82/97/82 83/154/83 84/152/84
|
||||
f 80/155/80 81/156/81 82/97/82
|
||||
f 158/96/155 79/148/79 80/155/80
|
||||
f 90/140/90 76/144/76 158/96/155
|
||||
f 86/98/86 88/149/88 90/140/90
|
||||
f 82/97/82 84/152/84 86/98/86
|
||||
f 158/96/155 80/155/80 82/97/82
|
||||
f 86/98/86 90/140/90 158/96/155
|
||||
f 15/84/15 80/84/80 79/82/79
|
||||
f 25/89/25 85/89/85 84/88/84
|
||||
f 35/94/35 90/94/90 89/93/89
|
||||
f 11/79/11 78/79/78 158/99/155
|
||||
f 21/87/21 83/87/83 82/86/82
|
||||
f 31/92/31 88/92/88 87/91/87
|
||||
f 7/75/7 76/75/76 75/33/75
|
||||
f 17/85/17 81/85/81 80/84/80
|
||||
f 3/34/3 74/34/74 73/73/73
|
||||
f 27/90/27 86/90/86 85/89/85
|
||||
f 1/95/1 73/95/73 90/94/90
|
||||
f 13/82/13 79/82/79 78/79/78
|
||||
f 23/88/23 84/88/84 83/87/83
|
||||
f 33/93/33 89/93/89 88/92/88
|
||||
f 7/75/7 9/77/9 77/77/77
|
||||
f 19/86/19 82/86/82 81/85/81
|
||||
f 29/91/29 87/91/87 86/90/86
|
||||
f 108/30/108 91/32/91 37/100/37
|
||||
f 107/28/107 108/30/108 54/35/54
|
||||
f 106/27/106 107/28/107 53/38/53
|
||||
f 105/25/105 106/27/106 52/40/52
|
||||
f 104/23/104 105/25/105 51/42/51
|
||||
f 103/21/103 104/23/104 50/44/50
|
||||
f 102/20/102 103/21/103 49/48/49
|
||||
f 101/18/101 102/20/102 48/101/48
|
||||
f 100/17/100 101/18/101 47/49/47
|
||||
f 99/15/99 100/17/100 46/102/46
|
||||
f 98/14/98 99/15/99 45/52/45
|
||||
f 113/104/113 97/12/97 98/14/98
|
||||
f 96/11/96 97/12/97 113/104/113
|
||||
f 154/106/152 160/9/156 96/11/96
|
||||
f 117/107/117 94/6/94 95/8/95
|
||||
f 93/5/93 94/6/94 117/107/117
|
||||
f 38/69/38 92/2/92 93/5/93
|
||||
f 91/3/91 92/2/92 38/69/38
|
||||
f 111/111/111 12/10/12 151/114/150
|
||||
f 152/115/151 10/7/10 111/111/111
|
||||
f 43/121/43 113/104/113 114/103/114
|
||||
f 42/64/42 115/105/115 113/104/113
|
||||
f 161/122/157 41/55/41 116/108/116
|
||||
f 41/55/41 40/56/40 117/107/117
|
||||
f 40/56/40 39/67/39 118/109/118
|
||||
f 39/67/39 56/68/56 119/70/119
|
||||
f 44/59/44 114/103/114 120/54/120
|
||||
f 57/124/57 121/74/121 119/70/119
|
||||
f 58/61/58 122/76/122 121/74/121
|
||||
f 164/125/158 59/126/59 123/81/123
|
||||
f 59/126/59 60/127/60 124/83/124
|
||||
f 60/127/60 61/58/61 120/54/120
|
||||
f 131/121/131 133/59/133 136/58/136
|
||||
f 129/64/129 131/121/131 132/127/132
|
||||
f 168/125/160 166/65/159 129/64/129
|
||||
f 126/124/126 125/56/125 127/55/127
|
||||
f 135/68/135 134/67/134 125/56/125
|
||||
f 142/126/142 130/126/130 132/127/132
|
||||
f 147/128/147 144/59/144 133/59/133
|
||||
f 148/129/148 139/66/139 135/68/135
|
||||
f 145/57/145 125/56/125 134/67/134
|
||||
f 146/127/146 132/127/132 136/58/136
|
||||
f 138/131/138 147/128/147 131/121/131
|
||||
f 141/132/141 148/129/148 126/124/126
|
||||
f 58/61/58 57/124/57 148/129/148
|
||||
f 42/64/42 43/121/43 147/128/147
|
||||
f 60/127/60 146/127/146 143/58/143
|
||||
f 40/56/40 145/57/145 140/130/140
|
||||
f 57/124/57 56/68/56 139/66/139
|
||||
f 43/121/43 44/59/44 144/59/144
|
||||
f 59/126/59 142/126/142 146/127/146
|
||||
f 56/68/56 39/67/39 140/130/140
|
||||
f 162/133/157 42/64/42 138/131/138
|
||||
f 163/62/158 58/61/58 141/132/141
|
||||
f 61/58/61 143/58/143 144/59/144
|
||||
f 41/55/41 137/55/137 145/57/145
|
||||
f 164/125/158 172/134/162 142/126/142
|
||||
f 164/125/158 163/62/158 171/60/162
|
||||
f 161/122/157 170/135/161 137/55/137
|
||||
f 161/122/157 162/133/157 169/63/161
|
||||
f 127/55/127 165/122/159 167/62/160
|
||||
f 165/122/159 166/65/159 168/125/160
|
||||
f 163/62/158 155/136/153 122/76/122
|
||||
f 164/125/158 156/78/154 155/136/153
|
||||
f 162/133/157 154/106/152 115/105/115
|
||||
f 162/133/157 161/122/157 153/123/152
|
||||
f 95/8/95 159/137/156 153/123/152
|
||||
f 159/137/156 160/9/156 154/106/152
|
||||
f 9/77/9 149/139/149 157/138/155
|
||||
f 150/80/149 158/99/155 157/138/155
|
||||
f 9/77/9 122/76/122 155/136/153
|
||||
f 155/136/153 156/78/154 150/80/149
|
||||
f 170/135/161 165/122/159 127/55/127
|
||||
f 169/63/161 166/65/159 165/122/159
|
||||
f 172/134/162 168/125/160 130/126/130
|
||||
f 172/134/162 171/60/162 167/62/160
|
||||
f 10/7/10 152/115/151 159/137/156
|
||||
f 152/115/151 151/114/150 160/9/156
|
||||
2
testModel.hpp
Normal file
2
testModel.hpp
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user