List of commits:
Subject Hash Author Date (UTC)
Fix loadOBJ(...) 0b307ff98c2aa8f79d62770b3e2aff6fb7d8670a mse 2021-09-25 05:18:15
Add uploadModelTransforms(...) 53530b8cabe72cfa6c71148bd484a1b5a17df565 mse 2021-09-23 14:33:47
Readability a5885db68a6134c7c3930b6cf10650f0b340088d mse 2021-09-13 15:56:30
Pad HUD health with 0 267304751e17901c276108d8899d096e2094cb2a mse 2021-09-13 11:02:57
Housekeeping 6ff79e3a21829e267e866a8472777e180d337ff4 mse 2021-09-13 07:33:00
Add CSL comments 7a818e8b57cb38c9bfef922e66bd6f735b4962e4 mse 2021-09-12 09:26:07
Add Confectioner Scripting Language (CSL) & change array separator to ; 8d980bfac5d649574f749b7c04a19af766f71091 mse 2021-09-11 12:31:58
Fix console /set bug 7c45e27e7f40472bea317b0316e4367135b49704 mse 2021-09-11 01:32:11
Scriptable lines@, ids@, bugfix 9f606fd2a793fd76a9d1b9e186434d231b973085 mse 2021-09-10 14:43:50
Add array scripting (@ operator, ARRLEN <array>) 3f098b3e0a04922c2c7a981b232efd8d08a8d9a0 mse 2021-09-10 14:02:39
Optimize script runtime a298b01c9b77192b7ed8aba3832a8ab51c9d389a mse 2021-09-09 06:57:49
Scriptable bg$, fg$, caption$ 0ad08aa3887118d2376f4fa7f8b7c66e0f164c73 mse 2021-09-06 11:04:38
Animation command: ANIM <loop|play> <bg|fg> <fps> <directory> 6066e2cae1dc29043902d46549f443c7b683fd88 mse 2021-09-06 06:42:13
Switch to C++17 489987b1b2749f37e0ac76594308635affbd24f2 mse 2021-09-05 10:51:02
Fix stats synchronization bug 3b6195c3321a6f10af43839cc00d24f301eddb3e mse 2021-09-05 04:45:58
Add top-level command: STRLEN, scriptable player name$ ec7a623cdc98b9832f35f0beb3e45179e6094436 mse 2021-09-05 03:17:47
Start work on animation system d2aafd6f46c719342054e3f256f972f4917f2231 mse 2021-09-05 02:41:28
Add string scripting with $ operator 20034a2b658ee8ad4f2082c44301c231b0323fc7 mse 2021-09-03 10:20:55
Enhance console /set command to support operators 61032844fcb833f04e2f6d1e123f8f0f89333107 mse 2021-09-02 11:06:00
Add scriptable bribing & remove hard-coded karma increment 41b4d79da6331b4b1ffd96f36ae1b032a869b482 mse 2021-08-31 17:51:29
Commit 0b307ff98c2aa8f79d62770b3e2aff6fb7d8670a - Fix loadOBJ(...)
Author: mse
Author date (UTC): 2021-09-25 05:18
Committer name: mse
Committer date (UTC): 2021-09-25 05:18
Parent(s): 53530b8cabe72cfa6c71148bd484a1b5a17df565
Signing key:
Tree: 0a1e1dde4fa6800409a7c6d2d36bb4ec7ec7dd7a
File Lines added Lines deleted
include/fg2/fg2.h 20 23
include/fg3/fg3.h 20 23
File include/fg2/fg2.h changed (mode: 100755) (index d5d18e8..3b04ebc)
... ... Mesh loadOBJ( std::string filepath ){
682 682 printf( "Faces: %lu\n", obj_f.size() ); printf( "Faces: %lu\n", obj_f.size() );
683 683 } }
684 684
685 // group vertex attributes by texture coordinates
686 std::vector<Vertex> verts( obj_vt.size() );
685 std::vector<Vertex> verts;
687 686 std::vector<Index> inds; std::vector<Index> inds;
688 687
688 // Create a vertex for each index. Inefficient but effective.
689 // https://community.khronos.org/t/obj-texture-coordinates-arent-mapped-correctly/69926
690 Index idx = 0;
689 691 for( obdex f : obj_f ){ for( obdex f : obj_f ){
690 Index a = f.vt1 - 1, b = f.vt2 - 1, c = f.vt3 - 1;
691 verts[ a ] = {
692 { obj_v[ f.v1 - 1 ].x, obj_v[ f.v1 - 1 ].y, obj_v[ f.v1 - 1 ].z },
693 { obj_vn[ f.vn1 - 1 ].x, obj_vn[ f.vn1 - 1 ].y, obj_vn[ f.vn1 - 1 ].z },
694 { 0.0f, 0.0f, 0.0f },
695 { obj_vt[ a ].u, obj_vt[ a ].v }
696 };
697 verts[ b ] = {
698 { obj_v[ f.v2 - 1 ].x, obj_v[ f.v2 - 1 ].y, obj_v[ f.v2 - 1 ].z },
699 { obj_vn[ f.vn2 - 1 ].x, obj_vn[ f.vn2 - 1 ].y, obj_vn[ f.vn2 - 1 ].z },
700 { 0.0f, 0.0f, 0.0f },
701 { obj_vt[ b ].u, obj_vt[ b ].v }
702 };
703 verts[ c ] = {
704 { obj_v[ f.v3 - 1 ].x, obj_v[ f.v3 - 1 ].y, obj_v[ f.v3 - 1 ].z },
705 { obj_vn[ f.vn3 - 1 ].x, obj_vn[ f.vn3 - 1 ].y, obj_vn[ f.vn3 - 1 ].z },
706 { 0.0f, 0.0f, 0.0f },
707 { obj_vt[ c ].u, obj_vt[ c ].v }
708 };
709 Index i[3] = { a, b, c };
710 inds.insert( std::end( inds ), std::begin( i ), std::end( i ) );
692 const int lookup_v[] = { f.v1, f.v2, f.v3 };
693 const int lookup_vt[] = { f.vt1, f.vt2, f.vt3 };
694 const int lookup_vn[] = { f.vn1, f.vn2, f.vn3 };
695 for( int i = 0; i < 3; i++ ){
696 int v = lookup_v[i] - 1;
697 int vt = lookup_vt[i] - 1;
698 int vn = lookup_vn[i] - 1;
699 verts.push_back( {
700 { obj_v[v].x, obj_v[v].y, obj_v[v].z },
701 { obj_vn[vn].x, obj_vn[vn].y, obj_vn[vn].z },
702 { 0.0f, 0.0f, 0.0f },
703 { obj_vt[vt].u, obj_vt[vt].v }
704 } );
705 inds.push_back( idx );
706 idx++;
707 }
711 708 } }
712 709
713 710 normalizeVertices( verts ); normalizeVertices( verts );
File include/fg3/fg3.h changed (mode: 100644) (index 78dbb01..07f2399)
... ... Mesh loadOBJ( std::string filepath ){
872 872 _VERBOUT_ << "Vertex normals: " << obj_vn.size() << std::endl; _VERBOUT_ << "Vertex normals: " << obj_vn.size() << std::endl;
873 873 _VERBOUT_ << "Faces: " << obj_f.size() << std::endl; _VERBOUT_ << "Faces: " << obj_f.size() << std::endl;
874 874
875 // group vertex attributes by texture coordinates
876 std::vector<Vertex> verts( obj_vt.size() );
875 std::vector<Vertex> verts;
877 876 std::vector<Index> inds; std::vector<Index> inds;
878 877
878 // Create a vertex for each index. Inefficient but effective.
879 // https://community.khronos.org/t/obj-texture-coordinates-arent-mapped-correctly/69926
880 Index idx = 0;
879 881 for( obdex f : obj_f ){ for( obdex f : obj_f ){
880 Index a = f.vt1 - 1, b = f.vt2 - 1, c = f.vt3 - 1;
881 verts[ a ] = {
882 { obj_v[ f.v1 - 1 ].x, obj_v[ f.v1 - 1 ].y, obj_v[ f.v1 - 1 ].z },
883 { obj_vn[ f.vn1 - 1 ].x, obj_vn[ f.vn1 - 1 ].y, obj_vn[ f.vn1 - 1 ].z },
884 { 0.0f, 0.0f, 0.0f },
885 { obj_vt[ a ].u, obj_vt[ a ].v }
886 };
887 verts[ b ] = {
888 { obj_v[ f.v2 - 1 ].x, obj_v[ f.v2 - 1 ].y, obj_v[ f.v2 - 1 ].z },
889 { obj_vn[ f.vn2 - 1 ].x, obj_vn[ f.vn2 - 1 ].y, obj_vn[ f.vn2 - 1 ].z },
890 { 0.0f, 0.0f, 0.0f },
891 { obj_vt[ b ].u, obj_vt[ b ].v }
892 };
893 verts[ c ] = {
894 { obj_v[ f.v3 - 1 ].x, obj_v[ f.v3 - 1 ].y, obj_v[ f.v3 - 1 ].z },
895 { obj_vn[ f.vn3 - 1 ].x, obj_vn[ f.vn3 - 1 ].y, obj_vn[ f.vn3 - 1 ].z },
896 { 0.0f, 0.0f, 0.0f },
897 { obj_vt[ c ].u, obj_vt[ c ].v }
898 };
899 Index i[3] = { a, b, c };
900 inds.insert( std::end( inds ), std::begin( i ), std::end( i ) );
882 const int lookup_v[] = { f.v1, f.v2, f.v3 };
883 const int lookup_vt[] = { f.vt1, f.vt2, f.vt3 };
884 const int lookup_vn[] = { f.vn1, f.vn2, f.vn3 };
885 for( int i = 0; i < 3; i++ ){
886 int v = lookup_v[i] - 1;
887 int vt = lookup_vt[i] - 1;
888 int vn = lookup_vn[i] - 1;
889 verts.push_back( {
890 { obj_v[v].x, obj_v[v].y, obj_v[v].z },
891 { obj_vn[vn].x, obj_vn[vn].y, obj_vn[vn].z },
892 { 0.0f, 0.0f, 0.0f },
893 { obj_vt[vt].u, obj_vt[vt].v }
894 } );
895 inds.push_back( idx );
896 idx++;
897 }
901 898 } }
902 899
903 900 normalizeVertices( verts ); normalizeVertices( verts );
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/mse/ConfectionerEngine

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/mse/ConfectionerEngine

Clone this repository using git:
git clone git://git.rocketgit.com/user/mse/ConfectionerEngine

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main