Read pose from file (loc + quaternion)
This commit is contained in:
parent
48d7cb4808
commit
8147a4cb63
|
@ -16,4 +16,6 @@ distrib/
|
||||||
*.obj
|
*.obj
|
||||||
depth_render
|
depth_render
|
||||||
glew-1.13.0/
|
glew-1.13.0/
|
||||||
glfw-3.1.2/
|
glfw-3.1.2/
|
||||||
|
/11HB6XZSh1Q
|
||||||
|
/19Em1uen8Ae
|
|
@ -13,6 +13,7 @@ extern GLFWwindow* window; // The "extern" keyword here is to access the variabl
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
using namespace glm;
|
using namespace glm;
|
||||||
|
|
||||||
#include "controls.hpp"
|
#include "controls.hpp"
|
||||||
|
@ -110,7 +111,7 @@ void getPositionRotation(glm::vec3 &position, float& rotX, float& rotY, float& r
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool computeMatricesFromInputs(char* filename){
|
bool computeMatricesFromInputs(){
|
||||||
|
|
||||||
bool do_screenshot = true;
|
bool do_screenshot = true;
|
||||||
|
|
||||||
|
@ -204,50 +205,7 @@ bool computeMatricesFromInputs(char* filename){
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
// First way (deprecated) : lookAt function
|
|
||||||
/*
|
|
||||||
ViewMatrix = glm::lookAt(
|
|
||||||
position, // Camera is here
|
|
||||||
position+pose_direction, // and looks here : at the same position, plus "direction"
|
|
||||||
up // Head is up (set to 0,-1,0 to look upside-down)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
printf("First view matrix (no translate)\n");
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
printf("\t %f %f %f %f\n", ViewMatrix[0][i], ViewMatrix[1][i], ViewMatrix[2][i], ViewMatrix[3][i]);
|
|
||||||
}
|
|
||||||
printf("Current view matrix\n");
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
printf("\t %f %f %f %f\n", ViewMatrix[0][i], ViewMatrix[1][i], ViewMatrix[2][i], ViewMatrix[3][i]);
|
|
||||||
}
|
|
||||||
printf("Up vector: %f %f %f\n", up[0], up[1], up[2]);
|
|
||||||
printf("pos vector: %f %f %f\n", position[0], position[1], position[2]);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Second way (deprecated): manually construct up direction
|
|
||||||
glm::vec4 pose_d = glm::vec4(0.0, 0.0, -1.0, 1.0);
|
|
||||||
|
|
||||||
glm::mat4 pose_trans = glm::mat4(1.0);
|
|
||||||
|
|
||||||
pose_trans = glm::rotate(pose_trans, -rotationX, glm::vec3(1.0f, 0.0f, 0.0f));
|
|
||||||
pose_trans = glm::rotate(pose_trans, -rotationY, glm::vec3(0.0f, 1.0f, 0.0f));
|
|
||||||
pose_trans = glm::rotate(pose_trans, -rotationZ, glm::vec3(0.0f, 0.0f, 1.0f));
|
|
||||||
|
|
||||||
pose_d = pose_trans * pose_d;
|
|
||||||
up4 = pose_trans * up4;
|
|
||||||
|
|
||||||
|
|
||||||
glm::vec3 pose_direction(pose_d);
|
|
||||||
glm::vec3 up(up4);
|
|
||||||
//printf("pose direction %f %f %f %f\n", pose_d[0], pose_d[1], pose_d[2], pose_d[3]);
|
|
||||||
//printf("pose direction %f %f %f\n", pose_direction[0], pose_direction[1], pose_direction[2]);
|
|
||||||
//printf(" direction %f %f %f\n", direction[0], direction[1], direction[2]);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
// Third way
|
|
||||||
glm::quat viewDirection;
|
glm::quat viewDirection;
|
||||||
glm::vec3 viewDirectionEuler(rotationX, rotationY, rotationZ);
|
glm::vec3 viewDirectionEuler(rotationX, rotationY, rotationZ);
|
||||||
viewDirection = glm::quat(viewDirectionEuler) * initial;
|
viewDirection = glm::quat(viewDirectionEuler) * initial;
|
||||||
|
@ -264,3 +222,101 @@ bool computeMatricesFromInputs(char* filename){
|
||||||
|
|
||||||
return do_screenshot;
|
return do_screenshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool computeMatricesFromFile(std::string filename){
|
||||||
|
|
||||||
|
bool do_screenshot = true;
|
||||||
|
|
||||||
|
|
||||||
|
// glfwGetTime is called only once, the first time this function is called
|
||||||
|
static double lastTime = glfwGetTime();
|
||||||
|
|
||||||
|
// Compute time difference between current and last frame
|
||||||
|
double currentTime = glfwGetTime();
|
||||||
|
float deltaTime = float(currentTime - lastTime);
|
||||||
|
|
||||||
|
// Get mouse position
|
||||||
|
double xpos, ypos;
|
||||||
|
|
||||||
|
|
||||||
|
// Compute new orientation
|
||||||
|
horizontalAngle += mouseSpeed * float( 512/2 - xpos );
|
||||||
|
verticalAngle += mouseSpeed * float( 512/2 - ypos );
|
||||||
|
|
||||||
|
// Direction : Spherical coordinates to Cartesian coordinates conversion
|
||||||
|
glm::vec3 direction(
|
||||||
|
cos(verticalAngle) * sin(horizontalAngle),
|
||||||
|
sin(verticalAngle),
|
||||||
|
cos(verticalAngle) * cos(horizontalAngle)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Hardcoded pose information
|
||||||
|
// Camera matrix
|
||||||
|
// Point 0 view 1
|
||||||
|
/*float rotationX = 1.2462860345840454;
|
||||||
|
float rotationY = -0.009244712069630623;
|
||||||
|
float rotationZ = -1.2957184314727783;
|
||||||
|
*/
|
||||||
|
// Point 0 view 2
|
||||||
|
//float rotationX = 1.3605239391326904;
|
||||||
|
//float rotationY = -0.009078502655029297;
|
||||||
|
//float rotationZ = -1.441698670387268;
|
||||||
|
//float fov = 0.9698680134771724;
|
||||||
|
float fov = glm::radians(90.0f);
|
||||||
|
|
||||||
|
float posX = 0;
|
||||||
|
float posY = 0;
|
||||||
|
float posZ = 0;
|
||||||
|
|
||||||
|
float rotW = 0;
|
||||||
|
float rotX = 0;
|
||||||
|
float rotY = 0;
|
||||||
|
float rotZ = 0;
|
||||||
|
|
||||||
|
float junk[2];
|
||||||
|
|
||||||
|
FILE * file = fopen(filename.c_str(), "r");
|
||||||
|
if( file == NULL ){
|
||||||
|
printf("Impossible to open pose file %s!\n", filename.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
char namebuf[50];
|
||||||
|
|
||||||
|
int count = fscanf(file, "%s %f %f %f %f %f %f %f %f %f\n", namebuf, &posX, &posY, &posZ, &rotW, &rotX, &rotY, &rotZ, &junk[0], &junk[1] );
|
||||||
|
|
||||||
|
printf("Loading pose file count: %d, namebuf: %s, rot count %d\n", count, namebuf, currentPoseRotCount);
|
||||||
|
|
||||||
|
assert(count == 10);
|
||||||
|
|
||||||
|
rotY = -rotY;
|
||||||
|
|
||||||
|
position = glm::vec3(posX, posY, posZ);
|
||||||
|
|
||||||
|
ProjectionMatrix = glm::perspective(fov, 1.0f, 0.1f, 5000.0f); // near & far are not verified, but accuracy seems to work well
|
||||||
|
|
||||||
|
|
||||||
|
//if (currentTime - currentPoseStartTime > 1) {
|
||||||
|
// UNCOMMENT THIS, in order to render png at a new position every second
|
||||||
|
//getPositionRotation(position, rotationX, rotationY, rotationZ, filename);
|
||||||
|
glm::quat initial = initialDirections[currentPoseRotCount];
|
||||||
|
//convertRotation(rotationX, rotationY, rotationZ, currentPoseRotCount);
|
||||||
|
currentPoseStartTime = currentTime;
|
||||||
|
currentPoseRotCount += 1;
|
||||||
|
do_screenshot = true;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
glm::quat viewDirection;
|
||||||
|
//glm::vec3 viewDirectionEuler(rotationX, rotationY, rotationZ);
|
||||||
|
viewDirection = glm::quat(rotW, rotX, rotY, rotZ) * initial;
|
||||||
|
//viewDirection = glm::quat(viewDirectionEuler) * initial;
|
||||||
|
|
||||||
|
ViewMatrix = glm::inverse(glm::translate(glm::mat4(1.0), position) * glm::toMat4(viewDirection));
|
||||||
|
|
||||||
|
// For the next frame, the "last time" will be "now"
|
||||||
|
lastTime = currentTime;
|
||||||
|
|
||||||
|
return do_screenshot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
#ifndef CONTROLS_HPP
|
#ifndef CONTROLS_HPP
|
||||||
#define CONTROLS_HPP
|
#define CONTROLS_HPP
|
||||||
|
|
||||||
bool computeMatricesFromInputs(char* filename);
|
#include <string>
|
||||||
|
|
||||||
|
bool computeMatricesFromInputs();
|
||||||
|
bool computeMatricesFromFile(std::string filename);
|
||||||
|
|
||||||
glm::mat4 getViewMatrix();
|
glm::mat4 getViewMatrix();
|
||||||
glm::mat4 getProjectionMatrix();
|
glm::mat4 getProjectionMatrix();
|
||||||
|
|
||||||
|
|
|
@ -367,7 +367,7 @@ int main( int argc, char * argv[] )
|
||||||
|
|
||||||
// Compute the MVP matrix from keyboard and mouse input
|
// Compute the MVP matrix from keyboard and mouse input
|
||||||
char filename[50];
|
char filename[50];
|
||||||
bool do_screenshot = computeMatricesFromInputs(filename);
|
bool do_screenshot = computeMatricesFromInputs();
|
||||||
glm::mat4 ProjectionMatrix = getProjectionMatrix();
|
glm::mat4 ProjectionMatrix = getProjectionMatrix();
|
||||||
glm::mat4 ViewMatrix = getViewMatrix();
|
glm::mat4 ViewMatrix = getViewMatrix();
|
||||||
glm::mat4 ModelMatrix = glm::mat4(1.0);
|
glm::mat4 ModelMatrix = glm::mat4(1.0);
|
||||||
|
|
|
@ -41,9 +41,9 @@ for request in range(6):
|
||||||
|
|
||||||
# todo: debug
|
# todo: debug
|
||||||
data = data[:][::-1][:]
|
data = data[:][::-1][:]
|
||||||
#img = Image.fromarray(data[0])
|
img = Image.fromarray(data)
|
||||||
#img.save(img_path + str(request) + ".tiff")
|
img.save(img_path + str(request) + ".tiff")
|
||||||
scipy.misc.imsave(img_path + str(request) + ".tiff", data)
|
#scipy.misc.imsave(img_path + str(request) + ".png", data, 'L', bits=16)
|
||||||
print("Received reply %s [ %s ]" % (request, data))
|
print("Received reply %s [ %s ]" % (request, data))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -161,9 +161,22 @@ int main( int argc, char * argv[] )
|
||||||
{
|
{
|
||||||
|
|
||||||
cmdline::parser cmdp;
|
cmdline::parser cmdp;
|
||||||
cmdp.add<std::string>("obj", 'b', "obj file name", true, "");
|
cmdp.add<std::string>("datapath", 'd', "data model directory", true, "");
|
||||||
|
|
||||||
|
cmdp.add<std::string>("model", 'm', "model id", true, "");
|
||||||
|
|
||||||
cmdp.parse_check(argc, argv);
|
cmdp.parse_check(argc, argv);
|
||||||
std::string name_obj = cmdp.get<std::string>("obj");
|
|
||||||
|
std::string name_path = cmdp.get<std::string>("datapath");
|
||||||
|
|
||||||
|
std::string model_id = cmdp.get<std::string>("model");
|
||||||
|
|
||||||
|
std::string name_obj = name_path + "/" + model_id + "/" + model_id + "_HIGH.obj";
|
||||||
|
std::string name_loc = name_path + "/" + model_id + "/" + "sweep_locations.csv";
|
||||||
|
|
||||||
|
|
||||||
|
//std::string name_ply = "out_res.ply";
|
||||||
|
|
||||||
|
|
||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
|
@ -334,11 +347,17 @@ int main( int argc, char * argv[] )
|
||||||
bool res = loadOBJ(name_obj.c_str(), vertices, uvs, normals);
|
bool res = loadOBJ(name_obj.c_str(), vertices, uvs, normals);
|
||||||
|
|
||||||
// Note: use unsigned int because of too many indices
|
// Note: use unsigned int because of too many indices
|
||||||
|
//std::vector<short unsigned int> short_indices;
|
||||||
|
//bool res = loadAssImp(name_ply.c_str(), short_indices, vertices, uvs, normals);
|
||||||
|
|
||||||
std::vector<unsigned int> indices;
|
std::vector<unsigned int> indices;
|
||||||
|
|
||||||
std::vector<glm::vec3> indexed_vertices;
|
std::vector<glm::vec3> indexed_vertices;
|
||||||
std::vector<glm::vec2> indexed_uvs;
|
std::vector<glm::vec2> indexed_uvs;
|
||||||
std::vector<glm::vec3> indexed_normals;
|
std::vector<glm::vec3> indexed_normals;
|
||||||
indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs, indexed_normals);
|
indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs, indexed_normals);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Load it into a VBO
|
// Load it into a VBO
|
||||||
|
|
||||||
|
@ -503,25 +522,11 @@ int main( int argc, char * argv[] )
|
||||||
glUseProgram(programID);
|
glUseProgram(programID);
|
||||||
|
|
||||||
// Compute the MVP matrix from keyboard and mouse input
|
// Compute the MVP matrix from keyboard and mouse input
|
||||||
char filename[50];
|
computeMatricesFromFile(name_loc);
|
||||||
bool do_screenshot = computeMatricesFromInputs(filename);
|
|
||||||
glm::mat4 ProjectionMatrix = getProjectionMatrix();
|
glm::mat4 ProjectionMatrix = getProjectionMatrix();
|
||||||
glm::mat4 ViewMatrix = getViewMatrix();
|
glm::mat4 ViewMatrix = getViewMatrix();
|
||||||
glm::mat4 ModelMatrix = glm::mat4(1.0);
|
glm::mat4 ModelMatrix = glm::mat4(1.0);
|
||||||
|
|
||||||
/*
|
|
||||||
printf("Before ");
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
printf("%f ", ProjectionMatrix[i / 4][i % 4]);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
//BuildPerspProjMat(ProjectionMatrix, 1.0489180166567196, 1.0, 0.0, 128.0);
|
|
||||||
printf("After ");
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
printf("%f ", ProjectionMatrix[i / 4][i % 4]);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -633,6 +638,7 @@ int main( int argc, char * argv[] )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
if (false) {
|
if (false) {
|
||||||
char buffer[100];
|
char buffer[100];
|
||||||
//printf("before: %s\n", buffer);
|
//printf("before: %s\n", buffer);
|
||||||
|
@ -642,6 +648,7 @@ int main( int argc, char * argv[] )
|
||||||
//printf("saving screenshot to %s\n", buffer);
|
//printf("saving screenshot to %s\n", buffer);
|
||||||
save_screenshot(buffer, windowWidth, windowHeight, renderedTexture);
|
save_screenshot(buffer, windowWidth, windowHeight, renderedTexture);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// Swap buffers
|
// Swap buffers
|
||||||
//glfwSwapBuffers(window);
|
//glfwSwapBuffers(window);
|
||||||
|
@ -698,41 +705,3 @@ int main( int argc, char * argv[] )
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildPerspProjMat(glm::mat4 &m, float fov, float aspect,
|
|
||||||
float znear, float zfar) {
|
|
||||||
float xymax = znear * tan(fov/2);
|
|
||||||
float ymin = -xymax;
|
|
||||||
float xmin = -xymax;
|
|
||||||
|
|
||||||
float width = xymax - xmin;
|
|
||||||
float height = xymax - ymin;
|
|
||||||
|
|
||||||
float depth = zfar - znear;
|
|
||||||
float q = -(zfar + znear) / depth;
|
|
||||||
float qn = -2 * (zfar * znear) / depth;
|
|
||||||
|
|
||||||
float w = 2 * znear / (width + 0.000001);
|
|
||||||
w = w / aspect;
|
|
||||||
float h = 2 * znear / (height + 0.000001);
|
|
||||||
|
|
||||||
//m[0][0] = w;
|
|
||||||
m[0][1] = (float) 0.0;
|
|
||||||
m[0][2] = (float) 0.0;
|
|
||||||
m[0][3] = (float) 0.0;
|
|
||||||
|
|
||||||
m[1][0] = (float) 0.0;
|
|
||||||
//m[1][1] = h;
|
|
||||||
m[1][2] = (float) 0.0;
|
|
||||||
m[1][3] = (float) 0.0;
|
|
||||||
|
|
||||||
m[2][0] = (float) 0.0;
|
|
||||||
m[2][1] = (float) 0.0;
|
|
||||||
m[2][2] = q;
|
|
||||||
m[2][3] = (float) -1.0;
|
|
||||||
|
|
||||||
m[3][0] = (float) 0.0;
|
|
||||||
m[3][1] = (float) 0.0;
|
|
||||||
//m[3][2] = qn;
|
|
||||||
m[3][3] = (float) 0.0;
|
|
||||||
}
|
|
||||||
|
|
|
@ -15,5 +15,5 @@ def transfer2(unsigned char [:,:,:,:] in_img, int [:,:,:]coords, int h, int w):
|
||||||
corrx = coords[ycoord, xcoord, 1]
|
corrx = coords[ycoord, xcoord, 1]
|
||||||
corry = coords[ycoord, xcoord, 2]
|
corry = coords[ycoord, xcoord, 2]
|
||||||
for c in range(3):
|
for c in range(3):
|
||||||
out_img[ycoord, xcoord, c] = in_img[ind, corrx, corry, c]
|
out_img[ycoord, xcoord, c] = in_img[ind, corry, corrx, c]
|
||||||
return np.array(out_img)
|
return np.array(out_img)
|
Loading…
Reference in New Issue