From 5c579bed9088f3b67d5793969240d2bde172aa8d Mon Sep 17 00:00:00 2001 From: Adog64 Date: Wed, 13 Dec 2023 10:50:20 -0500 Subject: [PATCH] Seg faults with planet generation, probaly struct pointer fix --- PlanetMiner | Bin 23752 -> 23880 bytes bin/imagefiles.o | Bin 0 -> 952 bytes bin/main.o | Bin 11600 -> 11192 bytes bin/textfiles.o | Bin 2808 -> 2864 bytes bin/worldgen.o | Bin 1480 -> 2456 bytes src/collections.h | 19 +++++++++ src/imagefiles.c | 4 +- src/imagefiles.h | 3 +- src/main.c | 104 +++++++++------------------------------------- src/textfiles.c | 2 +- src/worldgen.c | 65 ++++++++++++++++++++++++----- src/worldgen.h | 9 +++- todo.md | 13 +++--- 13 files changed, 112 insertions(+), 107 deletions(-) create mode 100644 bin/imagefiles.o create mode 100644 src/collections.h diff --git a/PlanetMiner b/PlanetMiner index 3e8c029492c510f4894a33c3ea3f9a8e90baf4ec..22ad1a19d5e2df7444694bae0f240e7e7f3a73c0 100755 GIT binary patch delta 6417 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 E0cTC;LjV8( delta 6487 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 literal 0 HcmV?d00001 diff --git a/bin/main.o b/bin/main.o index f89d2547f371e30c0ff9c89327589e30b85bede2..75c8d16ff3dbd615afef2c0ab9ab102146ec9ff3 100644 GIT binary patch delta 3653 zcmZ`+4@_0p89(;{eLSS^yeHrVk#Z?lybl;~QA_`f@*Y0t)3HCcP^E)KtPev}Pq zL7^!&bIOMMT$3gy!?ew2=Grk#hKo_^A9Ss2U^cDGjDMOgsm5$0Y^~EK?EAiV?{-4M zmz>`{=Xbu}cfb3cbI-eP^2MH$cf&LGX7n+`ry?XB! zG81V;YhMuVAD071;9knh`P;lgFg0g-zv+d&sYTuorFC9fSK*!1+KP7hk8x~&j1Bgh z;R6?0b}(T^oiuqI8%&txXEnSB{5{q13`+>4nZC?B&!!3?3&T*Cwo41ZNLrnC6QDmbYi7^L;0be_hUk36{4MsP zGW&K^X1#3=6D^xRps7RVNg73D^W==&cuQIrQF+?Dz%Cmb%>X%_FvpUT^Opwt%+uH> z!w?T?_Oy99Il6&aT;VApuzQ`m{dE}k0+!-)xq+*SlIAPYa?=P7n3F8ucvV_QIb~^G zkk&mpaY4w5drh)ADWk`@hNW8TE!IAU9o_;TJ(RSLn3JR6P1lNd%23qYBtwVHewqlK zG>7myn}Z{}kd$n4T!W=Ey<7ioQg zmq}^eLhaXgp2P4$42S=8r2+5IUq^xAx_{duyUMl=>$&(ABi5EM?Bx~J74|n)K&$L~ zsv#Yn>ivPAcq0DX*Ha>Xq7wXz##%jhI#&v{wt+-nj3OtM)<0@l+GyC)~_A(x1|D)(16nLmO=GNsc_W1+j zdB%?!Z!>-Y}4UDafos4~qZ!n%@{D|?dj1LH5Q%gJW)i|U zj_Y~6j`4?#-HZnr-((zS{3YXW2w(hN3e`Xph9~(@e)r*av~_e=yd++ZcPHYn)bl|f zZA-L?iiTBo4dWAxPcc48SY5?vGqZB^@}keR?5*+6cz0VOzM-po`xddY8-F+2M}M8` z*KkEo<#p&i@x%*rZy`huL>B81UfhWL_UDVwA~xkCj^-@s(UulFsnUj}Bki)2a;d}9 z0#(A^0ut0d=GF4Z=@rN6fpcXsv=&xk?7_m~zQ=KG$w*v*?d#d3l{x&}n^i0Rm5P78 z!&5F*3cp_AZH50qlCQ^?M+jUCVPGTMrU?X9+;mMzp{TVj0-7uZ6YkMJL=(R@_ zExlH*c0%E4^Sb;eDh~w(daXJebLvVLHQHuM7maw;|4p!q^uFWDEamFn>y*N)s;dg0 zsrcVe_(v6fR^iq7f#mxMUlj%IqGX>lRAZJayc%;2Oc&|ecj5ga-F`{&QMH{4uWI{9 zr43PpwQnmvs`fpFSGAIMC>m9AIX1Ue#c=y^-7ZsR=~vU8eOlqwE!7CYVqJ?vq*%|} zq4+$hXcMptefEHD>UsMdA4=|N#b-bJ{1h}(*M7nM<*efx}}`lh0qRCqe}-E2SQ z2)8Lh-oKQr=)iG(G?+GZd%+_}p;121U~^|5b9kzfsw!jE%6U|4=21OQs^IcqUDV!vufsJG~0G=p4k%T7l@vVev#eh9Z-1sN^to@3LjSZqYx?4wPSFs z1XsuLaZiaD`jK5!w5xFJ#{2-LP<3ODs)sc~{B0i9T~l|$T>~|@E@zv)9InVKM)RCdHp0q8+SgIk|T_SA3e*oemEYg^I4AgE=-4N zdCP4HTNa%9khq6J`2X(3!I4S2R^!rjsmtqZ0~bx(gLl$Mp?`MthO_f68F zfmR74p+fC-I9#TCW;30X0@@oeg-(J_5VR`Tg--9n;ZogK<#0pH9fv7P&$+)e=@(00 q1bxZ+VQ+a^aNO}8cQ$4aPL)@s)Au9V1WcFL_`)U0(HPjF!v6vZ)87gJ literal 11600 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 bm;(EbtJ0l6(sa4Vb_aF*d08s{xZD3Pq4;7T diff --git a/bin/textfiles.o b/bin/textfiles.o index 76147113f6d01359ed146dd72103435ea3cc965d..779fb7be1077f7a163651323b7ca8e8716a38976 100644 GIT binary patch delta 345 zcmew%xG3M|nqX+^22o9kHu z84Y)UOaTHGAQlATKmQ@%0FVs=TtEzxvjA~`;N;{&R&mC2lNYjzOWuG8f#n5&Y?$8r zAT^TDp|UU&pj?J`Aiaz~HdnIAGXmW=lii$i0mud*(3pIa-JH>8vLJ^&kPHNq6MBMkxRQ diff --git a/bin/worldgen.o b/bin/worldgen.o index 3e9a882ac9629ed783ada29ca6f337f018d9f04d..3f8f7f3aadf01c8db267c70bb8c156d2b0e4fd5c 100644 GIT binary patch literal 2456 zcmbVN&uiR96n?vQ8aGK-aww%Gfe5-SPD#|2V~QKvAY&&{z;#W2w1uS9%C6SCbXQs= zIkt1D!8v3xF1;mxMna(Y5YmPA(o?TJ7y|+E%aoJQ?dgPe!fY%@<(R>!x<<9wNH-46{4kf300-{jYgvW2S7^wP2=P zak?{Q-Rfzh!{sE$#`W^VMqI8~J!kzlBgvQGkQgkPE$dEqn%ke+=uxIrZvLvBN>^p| zl4<9Hu*cbopA@j=bFP1KB3omLUU2ny3!_Zwds=<;UpJ&#QWR*noL1(Gu z#$L@>4#HN=XhX8xj2kKwORGV<6ZoDVM~3UyFc61L*I#UT*<74$&8ExK)8~z`%X2qQ z8`e2<+_a4G%J?~}Vp+!6Ri46eV;ML*aXMYVFgt@A-Z=}YNQE9Sb#?{mzsVTv?bK1> z?o}$R=!Fx<4v+lAWAD2a$%d)$bi0N_M#yLvM)Q*axO-IJ^%ZW#o8Y{$#I=z0XbG$0iy( z0RNbAT zJL18|TUY$9;NW9S*^d(B^FJ0`oECDpIwvxt)pqRO zW*>*CZ>T8rTCN#;D>0chH+IRq9Yth@0Xm>trnR>_nRTmCJV7RZ0NQ;0$@GKRGx?gH zjbgX@z4RCTC9@L-9X{Jt7Gg55@m)Q1+n(CZ>wANxxNG?vVlxJNn!4<%XHgoUZg6&X z+RdJiq=-h4oDKDe5H$qD_XPGKH{ks>2mB=-15DCoBWE~5&ezpjtVK>$=Nu-c=Kn+i z;??}h+l&v=PYS`w>DB&~{!7sx&+*oT(0^AzQGMlaiN2E4-xEE)L;a@aRURdz;(p$f zLEr%H5@Yy|^xrMy*%EzzU26Z}z&5#on%8fOz5`O9<@NV@Y*77e$qRBsi~2jtP3cwr w4VoL0Z)8ELeoKtuj^y?DZ{}-{AzBa+=i6_xtqj8dW{_U}${u9QG|21!0|4|Npa1{> literal 1480 zcmbV~PiqrV5Wr{CYNN(l#Y3=y>qT0y&ur3z6p=uyT}65*h$oSk&9eb_v&-%)wq88+ zqPHIXDBdjU2k>L`&_lfobtaifUY9*}V0PyH=FfYX$>(RUp4U7NL_By3)00quFSV)P z9l2e&4h;woPMSYX5gZc?4}LepuRp&(LI2l{dmH$L&Gq#)e`#~;^|BvyR9gjpyVdRl ztswB1woTs;wdKId>N3n?rH^_E6>Fdd-VreokI(YP+Z^ydZG*SB;4L=h>W3I4ewSm5 zWH;vht@-+huQHb&e5^E-GYfyus)92WlWJh%Er*ZpMs^2vp`yus&i6SsdDF)`yaUweYs!kn#0`GL-*kLQYYvoI&-M*e~V&LUw)U& zk8((QsMNDue}s%A9Gl6vT>lm$Rr@>Uhsyo5KdO~_*^LjMEJ1Z%DU diff --git a/src/collections.h b/src/collections.h new file mode 100644 index 0000000..b702c6f --- /dev/null +++ b/src/collections.h @@ -0,0 +1,19 @@ +typedef struct intHashTableItem +{ + int key; + int value; +} + +typedef struct intHashTable +{ + intHashTableItem** items; + int size; + int count; +} + +intHashTable* createTable(int); +intHashTableItem* createIntHashTableItem(int key, int value); +void freeIntHashTableItem(intHashTableItem*); +void freeIntHashTable(intHashTable*); +void intHashTableInsert(intHashTable*, int, int); + diff --git a/src/imagefiles.c b/src/imagefiles.c index d42409d..628fef8 100644 --- a/src/imagefiles.c +++ b/src/imagefiles.c @@ -1,7 +1,7 @@ #include "imagefiles.h" #include #include - +/* bmp loadBitmapImage(char* path) { FILE* inFile; @@ -58,4 +58,4 @@ bmp loadBitmapImage(char* path) fread(data, 1, imageSize, inFile); fclose(inFile); -} +}*/ diff --git a/src/imagefiles.h b/src/imagefiles.h index 7e5c827..07a1581 100644 --- a/src/imagefiles.h +++ b/src/imagefiles.h @@ -1,4 +1,5 @@ -typedef struct bmp { +typedef struct bmp +{ unsigned char header[54]; unsigned int dataPos; unsigned int width, height; diff --git a/src/main.c b/src/main.c index fb61c1e..17d2d45 100644 --- a/src/main.c +++ b/src/main.c @@ -11,6 +11,8 @@ GLFWwindow* window; #include +#include "worldgen.h" + #define WINW 800 #define WINH 450 @@ -19,6 +21,9 @@ GLFWwindow* window; #define SHADER_BUF_SIZE 1000 GLuint loadShaders(const char*, const char*); +static GLfloat vertexBufferData[1000]; + +void setVertexBufferData(GLfloat*, unsigned int*, unsigned int); int main() { @@ -72,93 +77,14 @@ int main() vec3s center = {0.0f, 0.0f, 0.0f}; vec3s up = {0.0f, 1.0f, 0.0f}; - static const GLfloat g_vertex_buffer_data[] = { - // BAC - 1.0f, 0.0f, 2.0f, - 2.0f, 1.0f, 0.0f, - 0.0f, 2.0f, 1.0f, - // BCH - 1.0f, 0.0f, 2.0f, - 0.0f, 2.0f, 1.0f, - -1.0f, 0.0f, 2.0f, - // BHF - 1.0f, 0.0f, 2.0f, - -1.0f, 0.0f, 2.0f, - 0.0f, -2.0f, 1.0f, - // BFG - 1.0f, 0.0f, 2.0f, - 0.0f, -2.0f, 1.0f, - 2.0f, -1.0f, 0.0f, - // BGA - 1.0f, 0.0f, 2.0f, - 2.0f, -1.0f, 0.0f, - 2.0f, 1.0f, 0.0f, - // AIC - 2.0f, 1.0f, 0.0f, - 0.0f, 2.0f, -1.0f, - 0.0f, 2.0f, 1.0f, - // ICD - 0.0f, 2.0f, -1.0f, - 0.0f, 2.0f, 1.0f, - -2.0f, 1.0f, 0.0f, - // CDH - 0.0f, 2.0f, 1.0f, - -2.0f, 1.0f, 0.0f, - -1.0f, 0.0f, 2.0f, - // DHJ - -2.0f, 1.0f, 0.0f, - -1.0f, 0.0f, 2.0f, - -2.0f, -1.0f, 0.0f, - // HJF - -1.0f, 0.0f, 2.0f, - -2.0f, -1.0f, 0.0f, - 0.0f, -2.0f, 1.0f, - // JFL - -2.0f, -1.0f, 0.0f, - 0.0f, -2.0f, 1.0f, - 0.0f, -2.0f, -1.0f, - // FLG - 0.0f, -2.0f, 1.0f, - 0.0f, -2.0f, -1.0f, - 2.0f, -1.0f, 0.0f, - // LGE - 0.0f, -2.0f, -1.0f, - 2.0f, -1.0f, 0.0f, - 1.0f, 0.0f, -2.0f, - // GEA - 2.0f, -1.0f, 0.0f, - 1.0f, 0.0f, -2.0f, - 2.0f, 1.0f, 0.0f, - // EAI - 1.0f, 0.0f, -2.0f, - 2.0f, 1.0f, 0.0f, - 0.0f, 2.0f, -1.0f, - // KEI - -1.0f, 0.0f, -2.0f, - 1.0f, 0.0f, -2.0f, - 0.0f, 2.0f, -1.0f, - // KID - -1.0f, 0.0f, -2.0f, - 0.0f, 2.0f, -1.0f, - -2.0f, 1.0f, 0.0f, - // KDJ - -1.0f, 0.0f, -2.0f, - -2.0f, 1.0f, 0.0f, - -2.0f, -1.0f, 0.0f, - // KJL - -1.0f, 0.0f, -2.0f, - -2.0f, -1.0f, 0.0f, - 0.0f, -2.0f, -1.0f, - // KLE - -1.0f, 0.0f, -2.0f, - 0.0f, -2.0f, -1.0f, - 1.0f, 0.0f, -2.0f - }; + vec3s planetPos = {0.0f, 0.0f, 0.0f}; + worldMesh mesh = generateWorld(planetPos); + setVertexBufferData(mesh.vertices, mesh.triangles, mesh.triangleArrayCount); GLuint vertexbuffer; glGenBuffers(1, &vertexbuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData), vertexBufferData, GL_STATIC_DRAW); vec3s direction = {0.0f, 0.0f, -5.0f}; @@ -197,8 +123,8 @@ int main() } // center = glms_vec3_add(eye, direction); - eye.x = radius * (float) sin((double) theta); - eye.z = radius * (float) cos((double) theta); + eye.x = radius * sinf(theta); + eye.z = radius * cosf(theta); mat4s view = glms_lookat(eye, center, up); mat4s model = glms_mat4_identity(); @@ -301,3 +227,11 @@ GLuint loadShaders(const char* vertexShaderPath, const char* fragmentShaderPath) glDeleteShader( fragmentShaderID ); return programID; } + +void setVertexBufferData(GLfloat* vertices, unsigned int* triangles, unsigned int triangleCount) +{ + printf("Loading %d triangles into buffer\n", triangleCount); + for( int i = 0; i < triangleCount; ++i ) + { + } +} diff --git a/src/textfiles.c b/src/textfiles.c index 7bd8c61..b033f36 100644 --- a/src/textfiles.c +++ b/src/textfiles.c @@ -16,7 +16,7 @@ char* readTextFile(char* fname) if( inFile == NULL ) { fprintf( stderr, "Failed open file, [%s].\n", fname ); - exit(); + exit(1); } fseek( inFile, 0, SEEK_END ); diff --git a/src/worldgen.c b/src/worldgen.c index f46472b..7f4c3e6 100644 --- a/src/worldgen.c +++ b/src/worldgen.c @@ -1,24 +1,67 @@ #include "worldgen.h" #include #include +#include +#include -#define ORDER 1 -#define RSQRT5 0.4472135954999579 -#define TWICE_RSQRT5 = 0.8944271909999159 +#define ORDER 0 +#define RSQRT5 0.4472135954999579f +#define TWICE_RSQRT5 0.8944271909999159f +#define GOLDEN 1.618033988749895f worldMesh generateWorld(vec3s position) { // placeholder struct for world mesh - worldMesh mesh; - mesh.count = 20 * ORDER * 3; // Icosahedron has 20 triangular sides - - mesh.vertices = (GLfloat*) malloc(sizeof(GLfloat) * mesh.count); - populateIcosphere(mesh, ORDER, 1); - + world return mesh; } -void populateIcosphere(worldMesh mesh, unsigned char order, float radius) +void populateIcosphere(unsigned char order, GLfloat radius) { - + int T = powf(4, order); + mesh.vertexArrayCount = (10*T + 2) * 3; // Final heap array size for vertices + + // Initial vertex array. Not used other than to initialize heap array in mesh + GLfloat vertices[] = { + -1.0f, GOLDEN, 0.0f, 1.0f, GOLDEN, 0.0f, -1.0f, -GOLDEN, 0.0f, 1.0f, -GOLDEN, 0.0f, + 0.0f, -1.0f, GOLDEN, 0.0f, 1.0f, GOLDEN, 0.0f, -1.0f, -GOLDEN, 0.0f, 1.0f, -GOLDEN, + GOLDEN, 0.0f, -1.0f, GOLDEN, 0.0f, 1.0f, -GOLDEN, 0.0f, -1.0f, -GOLDEN, 0.0f, 1.0f + }; + + + unsigned int triangles[] = { + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 11, 10, 2, 5, 11, 4, 1, 5, 9, 7, 1, 8, 10, 7, 6, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 9, 8, 1, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7 + }; + + mesh.triangleArrayCount = 20*T*3; + normalizeVertices(vertices, mesh.vertexArrayCount, radius); + + // Move vetex and triangle data into mesh struct + mesh.vertices = (GLfloat*) malloc(sizeof(GLfloat) * mesh.vertexArrayCount); + memcpy(mesh.vertices, vertices, sizeof(GLfloat) * mesh.vertexArrayCount); + + mesh.triangles = (unsigned int*) malloc(sizeof(unsigned int) * mesh.triangleArrayCount); + memcpy(mesh.triangles, triangles, sizeof(unsigned int) * 60); +} + +void normalizeVertices(GLfloat* vertices, unsigned int vertexArrayCount, GLfloat radius) +{ + printf("Normalizing %d vertices\n", vertexArrayCount); + vec3s vertex; + for( int i = 0; i < vertexArrayCount; i += 3) + { + vertex.x = vertices[i]; + vertex.y = vertices[i + 1]; + vertex.z = vertices[i + 2]; + + glms_vec3_normalize(vertex); + glms_vec3_scale(vertex, radius); + + vertices[i] = vertex.x; + vertices[i + 1] = vertex.y; + vertices[i + 2] = vertex.z; + } } diff --git a/src/worldgen.h b/src/worldgen.h index 0fafaa4..0786695 100644 --- a/src/worldgen.h +++ b/src/worldgen.h @@ -1,9 +1,12 @@ #include #include -typedef struct worldMesh { - long int count; +typedef struct worldMesh +{ + unsigned int vertexArrayCount; + unsigned int triangleArrayCount; GLfloat* vertices; + unsigned int* triangles; } worldMesh; @@ -14,3 +17,5 @@ typedef struct worldMesh { * @return the world mesh as a heap-allocated list of vertices. */ worldMesh generateWorld(vec3s pos); +worldMesh populateIcosphere(unsigned char order, GLfoat radius); + diff --git a/todo.md b/todo.md index 05c7b8b..5a96f7d 100644 --- a/todo.md +++ b/todo.md @@ -2,12 +2,15 @@ ## Priority List 1. Render stuff - 1. Render a cube - 2. Render a bunch of cubes - 3. Diffuse lighting - 4. Ray tracing? + - [x] Render a cube + - [x] Render icosahedron + - [ ] Vertices to triangle mesh + - [ ] Subdivide icosahedron 2. Procedural worlds - 1. Optimize rendering for this many cubes + - [ ] Morph vertices of the subdivided icosphere + - [ ] Terrain generation + - [ ] Planet scaling + - [ ] 3. Block game 1. World editing