Apply clang-format.
This commit is contained in:
@@ -1,15 +1,15 @@
|
|||||||
//
|
//
|
||||||
// Simple .obj viewer(vertex only)
|
// Simple .obj viewer(vertex only)
|
||||||
//
|
//
|
||||||
#include <vector>
|
#include <algorithm>
|
||||||
#include <string>
|
#include <cassert>
|
||||||
|
#include <cmath>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <cmath>
|
#include <string>
|
||||||
#include <cassert>
|
#include <vector>
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
|
|
||||||
@@ -30,8 +30,8 @@
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#include <windows.h>
|
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
#include <windows.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -45,7 +45,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
class timerutil {
|
class timerutil {
|
||||||
public:
|
public:
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
typedef DWORD time_t;
|
typedef DWORD time_t;
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ public:
|
|||||||
return (time_t)(t.tv_sec * 1000 + t.tv_usec);
|
return (time_t)(t.tv_sec * 1000 + t.tv_usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // C timer
|
#else // C timer
|
||||||
// using namespace std;
|
// using namespace std;
|
||||||
typedef clock_t time_t;
|
typedef clock_t time_t;
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
DWORD t_[2];
|
DWORD t_[2];
|
||||||
#else
|
#else
|
||||||
@@ -110,7 +110,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GLuint vb; // vertex buffer
|
GLuint vb; // vertex buffer
|
||||||
int numTriangles;
|
int numTriangles;
|
||||||
} DrawObject;
|
} DrawObject;
|
||||||
|
|
||||||
@@ -155,14 +155,15 @@ void CalcNormal(float N[3], float v0[3], float v1[3], float v2[3]) {
|
|||||||
float len2 = N[0] * N[0] + N[1] * N[1] + N[2] * N[2];
|
float len2 = N[0] * N[0] + N[1] * N[1] + N[2] * N[2];
|
||||||
if (len2 > 0.0f) {
|
if (len2 > 0.0f) {
|
||||||
float len = sqrtf(len2);
|
float len = sqrtf(len2);
|
||||||
|
|
||||||
N[0] /= len;
|
N[0] /= len;
|
||||||
N[1] /= len;
|
N[1] /= len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LoadObjAndConvert(float bmin[3], float bmax[3], std::vector<DrawObject>& drawObjects, const char* filename)
|
bool LoadObjAndConvert(float bmin[3], float bmax[3],
|
||||||
{
|
std::vector<DrawObject>* drawObjects,
|
||||||
|
const char* filename) {
|
||||||
tinyobj::attrib_t attrib;
|
tinyobj::attrib_t attrib;
|
||||||
std::vector<tinyobj::shape_t> shapes;
|
std::vector<tinyobj::shape_t> shapes;
|
||||||
std::vector<tinyobj::material_t> materials;
|
std::vector<tinyobj::material_t> materials;
|
||||||
@@ -170,21 +171,22 @@ bool LoadObjAndConvert(float bmin[3], float bmax[3], std::vector<DrawObject>& dr
|
|||||||
timerutil tm;
|
timerutil tm;
|
||||||
|
|
||||||
tm.start();
|
tm.start();
|
||||||
|
|
||||||
std::string err;
|
std::string err;
|
||||||
bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, filename, NULL);
|
bool ret =
|
||||||
|
tinyobj::LoadObj(&attrib, &shapes, &materials, &err, filename, NULL);
|
||||||
if (!err.empty()) {
|
if (!err.empty()) {
|
||||||
std::cerr << err << std::endl;
|
std::cerr << err << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
tm.end();
|
tm.end();
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
std::cerr << "Failed to load " << filename << std::endl;
|
std::cerr << "Failed to load " << filename << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Parsing time: %d [ms]\n", tm.msec());
|
printf("Parsing time: %d [ms]\n", (int)tm.msec());
|
||||||
|
|
||||||
printf("# of vertices = %d\n", (int)(attrib.vertices.size()) / 3);
|
printf("# of vertices = %d\n", (int)(attrib.vertices.size()) / 3);
|
||||||
printf("# of normals = %d\n", (int)(attrib.normals.size()) / 3);
|
printf("# of normals = %d\n", (int)(attrib.normals.size()) / 3);
|
||||||
@@ -196,102 +198,105 @@ bool LoadObjAndConvert(float bmin[3], float bmax[3], std::vector<DrawObject>& dr
|
|||||||
bmax[0] = bmax[1] = bmax[2] = -std::numeric_limits<float>::max();
|
bmax[0] = bmax[1] = bmax[2] = -std::numeric_limits<float>::max();
|
||||||
|
|
||||||
{
|
{
|
||||||
for (size_t s = 0; s < shapes.size(); s++) {
|
for (size_t s = 0; s < shapes.size(); s++) {
|
||||||
DrawObject o;
|
DrawObject o;
|
||||||
std::vector<float> vb; // pos(3float), normal(3float), color(3float)
|
std::vector<float> vb; // pos(3float), normal(3float), color(3float)
|
||||||
for (size_t f = 0; f < shapes[s].mesh.indices.size()/3; f++) {
|
for (size_t f = 0; f < shapes[s].mesh.indices.size() / 3; f++) {
|
||||||
|
tinyobj::index_t idx0 = shapes[s].mesh.indices[3 * f + 0];
|
||||||
|
tinyobj::index_t idx1 = shapes[s].mesh.indices[3 * f + 1];
|
||||||
|
tinyobj::index_t idx2 = shapes[s].mesh.indices[3 * f + 2];
|
||||||
|
|
||||||
tinyobj::index_t idx0 = shapes[s].mesh.indices[3*f+0];
|
float v[3][3];
|
||||||
tinyobj::index_t idx1 = shapes[s].mesh.indices[3*f+1];
|
for (int k = 0; k < 3; k++) {
|
||||||
tinyobj::index_t idx2 = shapes[s].mesh.indices[3*f+2];
|
int f0 = idx0.vertex_index;
|
||||||
|
int f1 = idx1.vertex_index;
|
||||||
|
int f2 = idx2.vertex_index;
|
||||||
|
assert(f0 >= 0);
|
||||||
|
assert(f1 >= 0);
|
||||||
|
assert(f2 >= 0);
|
||||||
|
|
||||||
float v[3][3];
|
v[0][k] = attrib.vertices[3 * f0 + k];
|
||||||
for (int k = 0; k < 3; k++) {
|
v[1][k] = attrib.vertices[3 * f1 + k];
|
||||||
int f0 = idx0.vertex_index;
|
v[2][k] = attrib.vertices[3 * f2 + k];
|
||||||
int f1 = idx1.vertex_index;
|
bmin[k] = std::min(v[0][k], bmin[k]);
|
||||||
int f2 = idx2.vertex_index;
|
bmin[k] = std::min(v[1][k], bmin[k]);
|
||||||
assert(f0 >= 0);
|
bmin[k] = std::min(v[2][k], bmin[k]);
|
||||||
assert(f1 >= 0);
|
bmax[k] = std::max(v[0][k], bmax[k]);
|
||||||
assert(f2 >= 0);
|
bmax[k] = std::max(v[1][k], bmax[k]);
|
||||||
|
bmax[k] = std::max(v[2][k], bmax[k]);
|
||||||
v[0][k] = attrib.vertices[3*f0+k];
|
|
||||||
v[1][k] = attrib.vertices[3*f1+k];
|
|
||||||
v[2][k] = attrib.vertices[3*f2+k];
|
|
||||||
bmin[k] = std::min(v[0][k], bmin[k]);
|
|
||||||
bmin[k] = std::min(v[1][k], bmin[k]);
|
|
||||||
bmin[k] = std::min(v[2][k], bmin[k]);
|
|
||||||
bmax[k] = std::max(v[0][k], bmax[k]);
|
|
||||||
bmax[k] = std::max(v[1][k], bmax[k]);
|
|
||||||
bmax[k] = std::max(v[2][k], bmax[k]);
|
|
||||||
}
|
|
||||||
|
|
||||||
float n[3][3];
|
|
||||||
|
|
||||||
if (attrib.normals.size() > 0) {
|
|
||||||
int f0 = idx0.normal_index;
|
|
||||||
int f1 = idx1.normal_index;
|
|
||||||
int f2 = idx2.normal_index;
|
|
||||||
assert(f0 >= 0);
|
|
||||||
assert(f1 >= 0);
|
|
||||||
assert(f2 >= 0);
|
|
||||||
for (int k = 0; k < 3; k++) {
|
|
||||||
n[0][k] = attrib.normals[3*f0+k];
|
|
||||||
n[1][k] = attrib.normals[3*f1+k];
|
|
||||||
n[2][k] = attrib.normals[3*f2+k];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// compute geometric normal
|
|
||||||
CalcNormal(n[0], v[0], v[1], v[2]);
|
|
||||||
n[1][0] = n[0][0]; n[1][1] = n[0][1]; n[1][2] = n[0][2];
|
|
||||||
n[2][0] = n[0][0]; n[2][1] = n[0][1]; n[2][2] = n[0][2];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int k = 0; k < 3; k++) {
|
|
||||||
vb.push_back(v[k][0]);
|
|
||||||
vb.push_back(v[k][1]);
|
|
||||||
vb.push_back(v[k][2]);
|
|
||||||
vb.push_back(n[k][0]);
|
|
||||||
vb.push_back(n[k][1]);
|
|
||||||
vb.push_back(n[k][2]);
|
|
||||||
// Use normal as color.
|
|
||||||
float c[3] = {n[k][0], n[k][1], n[k][2]};
|
|
||||||
float len2 = c[0] * c[0] + c[1] * c[1] + c[2] * c[2];
|
|
||||||
if (len2 > 0.0f) {
|
|
||||||
float len = sqrtf(len2);
|
|
||||||
|
|
||||||
c[0] /= len;
|
|
||||||
c[1] /= len;
|
|
||||||
c[2] /= len;
|
|
||||||
}
|
|
||||||
vb.push_back(c[0] * 0.5 + 0.5);
|
|
||||||
vb.push_back(c[1] * 0.5 + 0.5);
|
|
||||||
vb.push_back(c[2] * 0.5 + 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
o.vb = 0;
|
float n[3][3];
|
||||||
o.numTriangles = 0;
|
|
||||||
if (vb.size() > 0) {
|
if (attrib.normals.size() > 0) {
|
||||||
glGenBuffers(1, &o.vb);
|
int f0 = idx0.normal_index;
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
int f1 = idx1.normal_index;
|
||||||
glBufferData(GL_ARRAY_BUFFER, vb.size() * sizeof(float), &vb.at(0), GL_STATIC_DRAW);
|
int f2 = idx2.normal_index;
|
||||||
o.numTriangles = vb.size() / 9 / 3;
|
assert(f0 >= 0);
|
||||||
printf("shape[%d] # of triangles = %d\n", static_cast<int>(s), o.numTriangles);
|
assert(f1 >= 0);
|
||||||
|
assert(f2 >= 0);
|
||||||
|
for (int k = 0; k < 3; k++) {
|
||||||
|
n[0][k] = attrib.normals[3 * f0 + k];
|
||||||
|
n[1][k] = attrib.normals[3 * f1 + k];
|
||||||
|
n[2][k] = attrib.normals[3 * f2 + k];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// compute geometric normal
|
||||||
|
CalcNormal(n[0], v[0], v[1], v[2]);
|
||||||
|
n[1][0] = n[0][0];
|
||||||
|
n[1][1] = n[0][1];
|
||||||
|
n[1][2] = n[0][2];
|
||||||
|
n[2][0] = n[0][0];
|
||||||
|
n[2][1] = n[0][1];
|
||||||
|
n[2][2] = n[0][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
gDrawObjects.push_back(o);
|
for (int k = 0; k < 3; k++) {
|
||||||
|
vb.push_back(v[k][0]);
|
||||||
|
vb.push_back(v[k][1]);
|
||||||
|
vb.push_back(v[k][2]);
|
||||||
|
vb.push_back(n[k][0]);
|
||||||
|
vb.push_back(n[k][1]);
|
||||||
|
vb.push_back(n[k][2]);
|
||||||
|
// Use normal as color.
|
||||||
|
float c[3] = {n[k][0], n[k][1], n[k][2]};
|
||||||
|
float len2 = c[0] * c[0] + c[1] * c[1] + c[2] * c[2];
|
||||||
|
if (len2 > 0.0f) {
|
||||||
|
float len = sqrtf(len2);
|
||||||
|
|
||||||
|
c[0] /= len;
|
||||||
|
c[1] /= len;
|
||||||
|
c[2] /= len;
|
||||||
|
}
|
||||||
|
vb.push_back(c[0] * 0.5 + 0.5);
|
||||||
|
vb.push_back(c[1] * 0.5 + 0.5);
|
||||||
|
vb.push_back(c[2] * 0.5 + 0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
o.vb = 0;
|
||||||
|
o.numTriangles = 0;
|
||||||
|
if (vb.size() > 0) {
|
||||||
|
glGenBuffers(1, &o.vb);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vb.size() * sizeof(float), &vb.at(0),
|
||||||
|
GL_STATIC_DRAW);
|
||||||
|
o.numTriangles = vb.size() / 9 / 3;
|
||||||
|
printf("shape[%d] # of triangles = %d\n", static_cast<int>(s),
|
||||||
|
o.numTriangles);
|
||||||
|
}
|
||||||
|
|
||||||
|
drawObjects->push_back(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("bmin = %f, %f, %f\n", bmin[0], bmin[1], bmin[2]);
|
printf("bmin = %f, %f, %f\n", bmin[0], bmin[1], bmin[2]);
|
||||||
printf("bmax = %f, %f, %f\n", bmax[0], bmax[1], bmax[2]);
|
printf("bmax = %f, %f, %f\n", bmax[0], bmax[1], bmax[2]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reshapeFunc(GLFWwindow* window, int w, int h)
|
void reshapeFunc(GLFWwindow* window, int w, int h) {
|
||||||
{
|
|
||||||
int fb_w, fb_h;
|
int fb_w, fb_h;
|
||||||
// Get actual framebuffer size.
|
// Get actual framebuffer size.
|
||||||
glfwGetFramebufferSize(window, &fb_w, &fb_h);
|
glfwGetFramebufferSize(window, &fb_w, &fb_h);
|
||||||
@@ -307,78 +312,90 @@ void reshapeFunc(GLFWwindow* window, int w, int h)
|
|||||||
height = h;
|
height = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
void keyboardFunc(GLFWwindow *window, int key, int scancode, int action, int mods) {
|
void keyboardFunc(GLFWwindow* window, int key, int scancode, int action,
|
||||||
if(action == GLFW_PRESS || action == GLFW_REPEAT){
|
int mods) {
|
||||||
// Move camera
|
(void)window;
|
||||||
float mv_x = 0, mv_y = 0, mv_z = 0;
|
(void)scancode;
|
||||||
if(key == GLFW_KEY_K) mv_x += 1;
|
(void)mods;
|
||||||
else if(key == GLFW_KEY_J) mv_x += -1;
|
if (action == GLFW_PRESS || action == GLFW_REPEAT) {
|
||||||
else if(key == GLFW_KEY_L) mv_y += 1;
|
// Move camera
|
||||||
else if(key == GLFW_KEY_H) mv_y += -1;
|
float mv_x = 0, mv_y = 0, mv_z = 0;
|
||||||
else if(key == GLFW_KEY_P) mv_z += 1;
|
if (key == GLFW_KEY_K)
|
||||||
else if(key == GLFW_KEY_N) mv_z += -1;
|
mv_x += 1;
|
||||||
//camera.move(mv_x * 0.05, mv_y * 0.05, mv_z * 0.05);
|
else if (key == GLFW_KEY_J)
|
||||||
// Close window
|
mv_x += -1;
|
||||||
if(key == GLFW_KEY_Q || key == GLFW_KEY_ESCAPE) glfwSetWindowShouldClose(window, GL_TRUE);
|
else if (key == GLFW_KEY_L)
|
||||||
|
mv_y += 1;
|
||||||
|
else if (key == GLFW_KEY_H)
|
||||||
|
mv_y += -1;
|
||||||
|
else if (key == GLFW_KEY_P)
|
||||||
|
mv_z += 1;
|
||||||
|
else if (key == GLFW_KEY_N)
|
||||||
|
mv_z += -1;
|
||||||
|
// camera.move(mv_x * 0.05, mv_y * 0.05, mv_z * 0.05);
|
||||||
|
// Close window
|
||||||
|
if (key == GLFW_KEY_Q || key == GLFW_KEY_ESCAPE)
|
||||||
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||||||
|
|
||||||
//init_frame = true;
|
// init_frame = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clickFunc(GLFWwindow* window, int button, int action, int mods){
|
void clickFunc(GLFWwindow* window, int button, int action, int mods) {
|
||||||
if(button == GLFW_MOUSE_BUTTON_LEFT){
|
(void)window;
|
||||||
if(action == GLFW_PRESS){
|
(void)mods;
|
||||||
mouseLeftPressed = true;
|
if (button == GLFW_MOUSE_BUTTON_LEFT) {
|
||||||
trackball(prev_quat, 0.0, 0.0, 0.0, 0.0);
|
if (action == GLFW_PRESS) {
|
||||||
} else if(action == GLFW_RELEASE){
|
mouseLeftPressed = true;
|
||||||
mouseLeftPressed = false;
|
trackball(prev_quat, 0.0, 0.0, 0.0, 0.0);
|
||||||
}
|
} else if (action == GLFW_RELEASE) {
|
||||||
|
mouseLeftPressed = false;
|
||||||
}
|
}
|
||||||
if(button == GLFW_MOUSE_BUTTON_RIGHT){
|
}
|
||||||
if(action == GLFW_PRESS){
|
if (button == GLFW_MOUSE_BUTTON_RIGHT) {
|
||||||
mouseRightPressed = true;
|
if (action == GLFW_PRESS) {
|
||||||
} else if(action == GLFW_RELEASE){
|
mouseRightPressed = true;
|
||||||
mouseRightPressed = false;
|
} else if (action == GLFW_RELEASE) {
|
||||||
}
|
mouseRightPressed = false;
|
||||||
}
|
}
|
||||||
if(button == GLFW_MOUSE_BUTTON_MIDDLE){
|
}
|
||||||
if(action == GLFW_PRESS){
|
if (button == GLFW_MOUSE_BUTTON_MIDDLE) {
|
||||||
mouseMiddlePressed = true;
|
if (action == GLFW_PRESS) {
|
||||||
} else if(action == GLFW_RELEASE){
|
mouseMiddlePressed = true;
|
||||||
mouseMiddlePressed = false;
|
} else if (action == GLFW_RELEASE) {
|
||||||
}
|
mouseMiddlePressed = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void motionFunc(GLFWwindow* window, double mouse_x, double mouse_y){
|
void motionFunc(GLFWwindow* window, double mouse_x, double mouse_y) {
|
||||||
|
(void)window;
|
||||||
float rotScale = 1.0f;
|
float rotScale = 1.0f;
|
||||||
float transScale = 2.0f;
|
float transScale = 2.0f;
|
||||||
|
|
||||||
if(mouseLeftPressed){
|
if (mouseLeftPressed) {
|
||||||
trackball(prev_quat,
|
trackball(prev_quat, rotScale * (2.0f * prevMouseX - width) / (float)width,
|
||||||
rotScale * (2.0f * prevMouseX - width) / (float)width,
|
rotScale * (height - 2.0f * prevMouseY) / (float)height,
|
||||||
rotScale * (height - 2.0f * prevMouseY) / (float)height,
|
rotScale * (2.0f * mouse_x - width) / (float)width,
|
||||||
rotScale * (2.0f * mouse_x - width) / (float)width,
|
rotScale * (height - 2.0f * mouse_y) / (float)height);
|
||||||
rotScale * (height - 2.0f * mouse_y) / (float)height);
|
|
||||||
|
|
||||||
add_quats(prev_quat, curr_quat, curr_quat);
|
add_quats(prev_quat, curr_quat, curr_quat);
|
||||||
} else if (mouseMiddlePressed) {
|
} else if (mouseMiddlePressed) {
|
||||||
eye[0] -= transScale * (mouse_x - prevMouseX) / (float)width;
|
eye[0] -= transScale * (mouse_x - prevMouseX) / (float)width;
|
||||||
lookat[0] -= transScale * (mouse_x - prevMouseX) / (float)width;
|
lookat[0] -= transScale * (mouse_x - prevMouseX) / (float)width;
|
||||||
eye[1] += transScale * (mouse_y - prevMouseY) / (float)height;
|
eye[1] += transScale * (mouse_y - prevMouseY) / (float)height;
|
||||||
lookat[1] += transScale * (mouse_y - prevMouseY) / (float)height;
|
lookat[1] += transScale * (mouse_y - prevMouseY) / (float)height;
|
||||||
} else if (mouseRightPressed) {
|
} else if (mouseRightPressed) {
|
||||||
eye[2] += transScale * (mouse_y - prevMouseY) / (float)height;
|
eye[2] += transScale * (mouse_y - prevMouseY) / (float)height;
|
||||||
lookat[2] += transScale * (mouse_y - prevMouseY) / (float)height;
|
lookat[2] += transScale * (mouse_y - prevMouseY) / (float)height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update mouse point
|
// Update mouse point
|
||||||
prevMouseX = mouse_x;
|
prevMouseX = mouse_x;
|
||||||
prevMouseY = mouse_y;
|
prevMouseY = mouse_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(const std::vector<DrawObject>& drawObjects)
|
void Draw(const std::vector<DrawObject>& drawObjects) {
|
||||||
{
|
|
||||||
glPolygonMode(GL_FRONT, GL_FILL);
|
glPolygonMode(GL_FRONT, GL_FILL);
|
||||||
glPolygonMode(GL_BACK, GL_FILL);
|
glPolygonMode(GL_BACK, GL_FILL);
|
||||||
|
|
||||||
@@ -390,14 +407,14 @@ void Draw(const std::vector<DrawObject>& drawObjects)
|
|||||||
if (o.vb < 1) {
|
if (o.vb < 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
glEnableClientState(GL_NORMAL_ARRAY);
|
||||||
glEnableClientState(GL_COLOR_ARRAY);
|
glEnableClientState(GL_COLOR_ARRAY);
|
||||||
glVertexPointer(3, GL_FLOAT, 36, (const void*)0);
|
glVertexPointer(3, GL_FLOAT, 36, (const void*)0);
|
||||||
glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float)*3));
|
glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float) * 3));
|
||||||
glColorPointer(3, GL_FLOAT, 36, (const void*)(sizeof(float)*6));
|
glColorPointer(3, GL_FLOAT, 36, (const void*)(sizeof(float) * 6));
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles);
|
glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles);
|
||||||
CheckErrors("drawarrays");
|
CheckErrors("drawarrays");
|
||||||
@@ -414,13 +431,13 @@ void Draw(const std::vector<DrawObject>& drawObjects)
|
|||||||
if (o.vb < 1) {
|
if (o.vb < 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
glBindBuffer(GL_ARRAY_BUFFER, o.vb);
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
glEnableClientState(GL_NORMAL_ARRAY);
|
||||||
glDisableClientState(GL_COLOR_ARRAY);
|
glDisableClientState(GL_COLOR_ARRAY);
|
||||||
glVertexPointer(3, GL_FLOAT, 36, (const void*)0);
|
glVertexPointer(3, GL_FLOAT, 36, (const void*)0);
|
||||||
glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float)*3));
|
glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float) * 3));
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles);
|
glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles);
|
||||||
CheckErrors("drawarrays");
|
CheckErrors("drawarrays");
|
||||||
@@ -443,26 +460,21 @@ static void Init() {
|
|||||||
up[2] = 0.0f;
|
up[2] = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
std::cout << "Needs input.obj\n" << std::endl;
|
std::cout << "Needs input.obj\n" << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
|
|
||||||
if(!glfwInit()){
|
if (!glfwInit()) {
|
||||||
std::cerr << "Failed to initialize GLFW." << std::endl;
|
std::cerr << "Failed to initialize GLFW." << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
window = glfwCreateWindow(width, height, "Obj viewer", NULL, NULL);
|
window = glfwCreateWindow(width, height, "Obj viewer", NULL, NULL);
|
||||||
if(window == NULL){
|
if (window == NULL) {
|
||||||
std::cerr << "Failed to open GLFW window. " << std::endl;
|
std::cerr << "Failed to open GLFW window. " << std::endl;
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 1;
|
return 1;
|
||||||
@@ -486,7 +498,7 @@ int main(int argc, char **argv)
|
|||||||
reshapeFunc(window, width, height);
|
reshapeFunc(window, width, height);
|
||||||
|
|
||||||
float bmin[3], bmax[3];
|
float bmin[3], bmax[3];
|
||||||
if (false == LoadObjAndConvert(bmin, bmax, gDrawObjects, argv[1])) {
|
if (false == LoadObjAndConvert(bmin, bmax, &gDrawObjects, argv[1])) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -498,7 +510,7 @@ int main(int argc, char **argv)
|
|||||||
maxExtent = 0.5f * (bmax[2] - bmin[2]);
|
maxExtent = 0.5f * (bmax[2] - bmin[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(glfwWindowShouldClose(window) == GL_FALSE) {
|
while (glfwWindowShouldClose(window) == GL_FALSE) {
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
|
glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
@@ -509,7 +521,8 @@ int main(int argc, char **argv)
|
|||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
GLfloat mat[4][4];
|
GLfloat mat[4][4];
|
||||||
gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], up[0], up[1], up[2]);
|
gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], up[0],
|
||||||
|
up[1], up[2]);
|
||||||
build_rotmatrix(mat, curr_quat);
|
build_rotmatrix(mat, curr_quat);
|
||||||
glMultMatrixf(&mat[0][0]);
|
glMultMatrixf(&mat[0][0]);
|
||||||
|
|
||||||
@@ -517,8 +530,9 @@ int main(int argc, char **argv)
|
|||||||
glScalef(1.0f / maxExtent, 1.0f / maxExtent, 1.0f / maxExtent);
|
glScalef(1.0f / maxExtent, 1.0f / maxExtent, 1.0f / maxExtent);
|
||||||
|
|
||||||
// Centerize object.
|
// Centerize object.
|
||||||
glTranslatef(-0.5*(bmax[0] + bmin[0]), -0.5*(bmax[1] + bmin[1]), -0.5*(bmax[2] + bmin[2]));
|
glTranslatef(-0.5 * (bmax[0] + bmin[0]), -0.5 * (bmax[1] + bmin[1]),
|
||||||
|
-0.5 * (bmax[2] + bmin[2]));
|
||||||
|
|
||||||
Draw(gDrawObjects);
|
Draw(gDrawObjects);
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
|
|||||||
Reference in New Issue
Block a user