profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/alecjacobson/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Alec Jacobson alecjacobson University of Toronto Toronto http://www.cs.toronto.edu/~jacobson/ Assistant Professor of Computer Science at University of Toronto

alecjacobson/common-3d-test-models 344

Repository containing common 3D test models in original format with original source if known and obj mesh

alecjacobson/coloremoji.sty 201

Style package for directly including color emojis in latex documents

alecjacobson/ascii3d 120

3D Render in ASCII art

alecjacobson/computer-graphics-csc418 99

Course Page for Computer Graphics course

alecjacobson/computer-graphics-bounding-volume-hierarchy 62

Computer Graphics Assignment about Bounding Volume Hierarchies

alecjacobson/better-code-runtime-polymorphism 52

Git walk through of the C++ code presented in Sean Parent's talk "Better Code: Runtime Polymorphism"

alecjacobson/computer-graphics 29

Computer Graphics Course

alecjacobson/computer-graphics-kinematics 27

Computer Graphics Assignment about Kinematics

alecjacobson/computer-graphics-mass-spring-systems 18

Computer Graphics Assignment – Mass Spring Systems

push eventalecjacobson/mlmp3p

Alec Jacobson

commit sha 183fecbd3493ffb11748924fbd85a6aaea179e91

better root dir for playlists and album sorting/advancing

view details

push time in 3 days

push eventalecjacobson/mlmp3p

Alec Jacobson

commit sha 034b27fe1fde99f981c479c97b2c717d985d7c38

Update README.md

view details

push time in 3 days

push eventlibigl/libigl

Tom Lankhorst

commit sha dda197248e855c13bfac3d6e26b80be75e030ea1

Typo in stderr message in serialize (#1789) Something very minor.. but I was searching through the source where the `is not serializable: derive from igl::Serializable or spezialize the template function` message came from by searching for 'specialize'.

view details

push time in 8 days

PR merged libigl/libigl

Typo in stderr message in serialize enhancement

Something very minor.. but I was searching through the source where the is not serializable: derive from igl::Serializable or spezialize the template function message came from by searching for 'specialize'.

Checklist

<!-- Check all that apply (change to [x]) -->

  • [ ] All changes meet libigl style-guidelines.
  • [ ] Adds new .cpp file.
  • [ ] Adds corresponding unit test.
  • [X] This is a minor change.
+2 -2

0 comment

1 changed file

tomlankhorst

pr closed time in 8 days

push eventlibigl/libigl

ikoruk

commit sha 7de3ff04fad3e7a1c12df8f553351f0734e1af69

template embree renderer (#1788)

view details

push time in 8 days

PR merged libigl/libigl

template embree renderer

Templates EmbreeRenderer if, for example, the meshes are already float.

Checklist

  • [x] All changes meet libigl style-guidelines.
  • [ ] Adds new .cpp file.
  • [ ] Adds corresponding unit test.
  • [x] This is a minor change.
+48 -30

1 comment

2 changed files

ikoruk

pr closed time in 8 days

PullRequestReviewEvent

pull request commentlibigl/libigl

template embree renderer

Thanks! (This is not a part of libigl that I regularly/have ever used. Some I'm excited to see it get updated and remember that it's there :-)

ikoruk

comment created time in 8 days

push eventlibigl/libigl

mat

commit sha 957dcf32b33d7fff2231849a634cd79fff5e38f3

fix bug in read_file_binary(FILE *fp, std::vector<uint8_t> &fileBufferBytes) (#1821) * fix function read_file_binary. * fix read_file_binary function.

view details

push time in 8 days

PR merged libigl/libigl

fix bug in read_file_binary(FILE *fp, std::vector<uint8_t> &fileBufferBytes)

Fixes # .

add fclose(File* fp).

from in file_utils.cpp

  if (!ferror(fp)) {
    fseek(fp, 0, SEEK_END);
    size_t sizeBytes = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    fileBufferBytes.resize(sizeBytes);

    if (fread((char*)fileBufferBytes.data(), 1, sizeBytes, fp) == sizeBytes) 
      return;
  }

to

  if (!ferror(fp)) {
    fseek(fp, 0, SEEK_END);
    size_t sizeBytes = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    fileBufferBytes.resize(sizeBytes);

    if (fread((char*)fileBufferBytes.data(), 1, sizeBytes, fp) == sizeBytes) {
      fclose(fp);
      return;
    }
  }

Checklist

  • [x] All changes meet libigl style-guidelines.
  • [ ] Adds new .cpp file.
  • [ ] Adds corresponding unit test.
  • [x] This is a minor change.
+3 -1

0 comment

1 changed file

RohJiHyun

pr closed time in 8 days

PullRequestReviewEvent

pull request commentlibigl/libigl

Rework sparse repmat

Thanks!

Does https://eigen.tuxfamily.org/dox/classEigen_1_1Replicate.html in Eigen work for sparse matrices? If so, we could deprecate this.

If not, we should keep repmat and merge this helpful fix. Unless I'm misremembering some functions, I think every where we use Eigen::SparseMatrix in libigl we just expose the numeric type (e.g., Eigen::SparseMatrix<T> where T could be double or float). This means we assume/force the storage ordering to be the default (which I believe is column-major). If we merge this, it will be a bit of an outlier in that this function will template on the order, but all(?) other libigl functions will expect default ordering.

paul0noah

comment created time in 8 days

push eventlibigl/libigl

Kenshi Takayama

commit sha 2a3af5f5d3093615d3547589f7dd1c14f223d920

lscm: fix sign for the area term (#1853) Added an overload where the matrix Q can be returned (used in the test).

view details

push time in 8 days

PR merged libigl/libigl

lscm: fix sign for the area term

<!-- Describe your changes and what you've already done to test it. -->

I'm pretty sure this fix is correct -- the area term should be subtracted, not added. To confirm the correctness, I wrote the following code

#include "grad.h"
#include "doublearea.h"
#include "per_face_normals.h"

double compute_lscm_energy(
  const Eigen::MatrixXd& V,
  const Eigen::MatrixXi& F,
  const Eigen::VectorXd& W_flat)
{
  const int nV = V.rows();
  const int nF = F.rows();

  // Compute gradient
  Eigen::SparseMatrix<double> G;
  igl::grad(V, F, G);

  Eigen::VectorXd nablaU_flat = G * W_flat.head(nV);
  Eigen::VectorXd nablaV_flat = G * W_flat.tail(nV);

  Eigen::MatrixXd nablaU(nF, 3);
  Eigen::MatrixXd nablaV(nF, 3);
  nablaU << nablaU_flat.segment(0, nF), nablaU_flat.segment(nF, nF), nablaU_flat.segment(2 * nF, nF);
  nablaV << nablaV_flat.segment(0, nF), nablaV_flat.segment(nF, nF), nablaV_flat.segment(2 * nF, nF);

  // Compute face normal
  Eigen::MatrixXd N;
  igl::per_face_normals(V, F, N);

  // Compute area
  Eigen::VectorXd dblA;
  igl::doublearea(V, F, dblA);

  // Sum up
  double sum = 0;

  for (int i = 0; i < nF; ++i) {
    Eigen::Vector3d N_i = N.row(i);
    Eigen::Vector3d nablaU_i = nablaU.row(i);
    Eigen::Vector3d nablaV_i = nablaV.row(i);

    // Rotate nablaU_i about N_i by 90 degrees ccw
    nablaU_i = N_i.cross(nablaU_i);

    sum += 0.5 * dblA[i] * (nablaU_i - nablaV_i).squaredNorm();
  }

  return 0.5 * sum;
}

and put the following code

  std::cout << std::setprecision(20) << "LSCM energy 1: " << compute_lscm_energy(V, F, W_flat) << std::endl;
  std::cout << std::setprecision(20) << "LSCM energy 2: " << (0.5 * W_flat.transpose() * Q * W_flat) << std::endl;

after the call to min_quad_with_fixed_solve.

Before the fix:

LSCM energy 1: 1.5662298333641699877
LSCM energy 2: 0.0041413289004784102632

After the fix:

LSCM energy 1: 0.0041413289004683696837
LSCM energy 2: 0.0041413289004784102632

Checklist

<!-- Check all that apply (change to [x]) -->

  • [x] All changes meet libigl style-guidelines.
  • [ ] Adds new .cpp file.
  • [x] Adds corresponding unit test.
  • [x] This is a minor change.
+110 -2

2 comments

3 changed files

kenshi84

pr closed time in 8 days

PullRequestReviewEvent

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha a57b246f581a3ec889f79997ca2e54a6ab205510

awards

view details

push time in 9 days

push eventalecjacobson/gptoolbox

Alec Jacobson

commit sha 0254e08e2b158b321b0630ac13c5dffd95ae7d83

cmakelists acks cgal change to triangulate

view details

push time in 10 days

issue commentalecjacobson/gptoolbox

Compiling mex on Linux/Ubuntu - Could NOT find MPFR and other issues

ooffff. Glad you made it through. If you have a suggestion of how to give better instructions for linux uses, please share.

albertotono

comment created time in 10 days

issue commentalecjacobson/gptoolbox

Compiling mex on Linux/Ubuntu - Could NOT find MPFR and other issues

I think I was on a machine where I couldn't use apt-get so I downloaded/installed mpfr and gmp in the external folder of libigl. Maybe this also works if you point it to /usr/local/ or wherever your mpfr gmp are .

albertotono

comment created time in 10 days

issue commentalecjacobson/gptoolbox

Compiling mex on Linux/Ubuntu - Could NOT find MPFR and other issues

I found this:

cmake ../ -DCMAKE_BUILD_TYPE=Release -DGMP_INCLUDE_DIR=pwd/../external/gmp-6.2.0 -DGMP_LIBRARIES=pwd/../external/gmp-6.2.0/build/lib/libgmp.so -DMPFR_INCLUDE_DIR=pwd/../external/mpfr-4.0.2/build/include -DMPFR_LIBRARIES=pwd/../external/mpfr-4.0.2/build/lib/libmpfr.a -DLIBIGL_WITH_CGAL=ON

On Sun, Jul 18, 2021 at 5:12 PM Alec Jacobson ***@***.***> wrote:

I did it recently and vaguely remember that CGAL makes it cumbersome to tell it where to find MPFR and gmp. I'll dig through my command history to see if I can find what I did.

albertotono

comment created time in 10 days

issue commentalecjacobson/gptoolbox

Compiling mex on Linux/Ubuntu - Could NOT find MPFR and other issues

I did it recently and vaguely remember that CGAL makes it cumbersome to tell it where to find MPFR and gmp. I'll dig through my command history to see if I can find what I did.

albertotono

comment created time in 10 days

issue commentalecjacobson/gptoolbox

Compiling mex on Linux/Ubuntu - Could NOT find MPFR and other issues

I think you might need to do something like

sudo apt-get install mpfr gmp

albertotono

comment created time in 10 days

push eventalecjacobson/gptoolbox

Alec Jacobson

commit sha 7f58543c3c1b14a79890c8c644646bafbc6db308

triangulate exposes edges following libigl bump so edge markers are actually useful

view details

Alec Jacobson

commit sha 3a366fe74470c5c686321f3f3378e683e01a1f03

triangulate with better edge marker handling and doc

view details

push time in 11 days

create barnchlibigl/libigl

branch : triangle-expose-output-segments

created branch time in 11 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha 9c05a80489a66f26742b6ecc03886e6d22fe4de7

youtube ly

view details

push time in 14 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha a7403eae806b260f44974d9e70232923f53ee953

gh youtube

view details

push time in 15 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha fdabba5b8582f26cfd88f37e0cc0b3240537686e

youtube brad

view details

push time in 15 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha ce6b7f6232246956edae73278d9de331f8690c71

fix css

view details

Alec Jacobson

commit sha e78c0d393693881523baae7b253e0249e98eff1e

final gs videos

view details

push time in 17 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha abe61fb1e8e6a6e7eadf081c9c4a419a41b742eb

youtube playlists/videos

view details

push time in 17 days

push eventsgp2021/sgp2021.github.io

Alec Jacobson

commit sha ca7609c6b0fd33df3d06573cd265560a4f1cf9fb

ads on poster

view details

push time in 18 days