From 1c59a3bc6fdcc3b76f8c1fd3ed34994ee08a3183 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Thu, 26 May 2016 18:53:36 +0200 Subject: [PATCH] Fix player height (not working with scale) --- CrystalPoint.cpp | 2 +- HeightMap.cpp | 12 +++--------- Vertex.cpp | 20 ++++++++++++++++++++ Vertex.h | 5 +++++ World.cpp | 6 +++--- worlds/small.json | 11 +++++++++++ worlds/small.png | Bin 0 -> 3204 bytes worlds/worlds.json | 1 + 8 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 worlds/small.json create mode 100644 worlds/small.png diff --git a/CrystalPoint.cpp b/CrystalPoint.cpp index ad61da7..826ad4a 100644 --- a/CrystalPoint.cpp +++ b/CrystalPoint.cpp @@ -91,7 +91,7 @@ void CrystalPoint::update() if (!worldhandler->isPlayerPositionValid()) player->position = oldPosition; - player->position.y = worldhandler->getHeight(player->position.x, player->position.z); + player->position.y = worldhandler->getHeight(player->position.x, player->position.z) + 1.7f; worldhandler->update(deltaTime); diff --git a/HeightMap.cpp b/HeightMap.cpp index 018ad4d..042c229 100644 --- a/HeightMap.cpp +++ b/HeightMap.cpp @@ -73,9 +73,6 @@ void HeightMap::Draw() glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, imageIndex); - //glDisable(GL_TEXTURE_2D); - - glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); //glEnableClientState(GL_COLOR_ARRAY); @@ -105,15 +102,12 @@ float HeightMap::GetHeight(float x, float y) Vertex& b = vertices[index+1]; Vertex& c = vertices[index+3]; - float lowervalue = ((b.y - c.y)*(a.x - c.x) + (c.x - b.x)*(a.y - c.y)); - - float labda1 = ((b.y - c.y)*(x - c.x) + (c.x - b.x)*(y - c.y)) / lowervalue; - + float lowervalue = ((b.z - c.z)*(a.x - c.x) + (c.x - b.x)*(a.z - c.z)); + float labda1 = ((b.z - c.z)*(x - c.x) + (c.x - b.x)*(y - c.z)) / lowervalue; float labda2 = ((c.y - a.y)*(x - c.x) + (a.x - c.x)*(y - c.y)) / lowervalue; - float labda3 = 1 - labda1 - labda2; - Vec3f z = Vec3f(a.x, a.y, a.z) * labda1 + Vec3f(b.x, b.y, b.z) * labda2 + Vec3f(c.x, c.y, c.z) * labda3; + Vertex z = a * labda1 + b * labda2 + c * labda3; return z.y; } diff --git a/Vertex.cpp b/Vertex.cpp index 9e4aa85..8afd8a1 100644 --- a/Vertex.cpp +++ b/Vertex.cpp @@ -17,3 +17,23 @@ Vertex::Vertex(float x, float y, float z, float nx, float ny, float nz, float tx Vertex::~Vertex() { } + +Vertex Vertex::operator/(float &other) +{ + return Vertex(x / other, y / other, z / other, normalX, normalY, normalZ, texX, texY); +} + +Vertex Vertex::operator*(Vertex & other) +{ + return Vertex(x*other.x, y*other.y, z*other.z, normalX, normalY, normalZ, texX, texY); +} + +Vertex Vertex::operator*(float & other) +{ + return Vertex(x*other, y*other, z*other, normalX, normalY, normalZ, texX, texY); +} + +Vertex Vertex::operator+(Vertex & other) +{ + return Vertex(x+other.x, y+other.y, z+other.z, normalX, normalY, normalZ, texX, texY); +} diff --git a/Vertex.h b/Vertex.h index 7edbc50..3411000 100644 --- a/Vertex.h +++ b/Vertex.h @@ -15,5 +15,10 @@ public: float texX; float texY; + + Vertex operator/(float &other); + Vertex operator*(Vertex &other); + Vertex operator*(float &other); + Vertex operator+(Vertex &other); }; diff --git a/World.cpp b/World.cpp index 35cea9f..a2d54ad 100644 --- a/World.cpp +++ b/World.cpp @@ -34,9 +34,9 @@ World::World(const std::string &fileName) if(!v["world"]["texture"].isNull()) heightmap->SetTexture(v["world"]["texture"].asString()); - player->position.x = v["player"]["startposition"][0].asFloat(); - player->position.y = v["player"]["startposition"][1].asFloat(); - player->position.z = v["player"]["startposition"][2].asFloat(); + player->position.x = v["player"]["startposition"][0].asFloat()*scale; + player->position.y = v["player"]["startposition"][1].asFloat()*scale; + player->position.z = v["player"]["startposition"][2].asFloat()*scale; for (auto object : v["objects"]) diff --git a/worlds/small.json b/worlds/small.json new file mode 100644 index 0000000..e69e432 --- /dev/null +++ b/worlds/small.json @@ -0,0 +1,11 @@ +{ + "world": { + "heightmap": "worlds/small.png", + "scale": 1 + }, + "player": { + "startposition": [ 20, 5, 20 ] + }, + "objects": [], + "enemies": [] +} \ No newline at end of file diff --git a/worlds/small.png b/worlds/small.png new file mode 100644 index 0000000000000000000000000000000000000000..fd75ea182e43b333083afed8bde4b5d8c3a97377 GIT binary patch literal 3204 zcmeHJ`8N~{7amM@CM2>a>3z$ZvS-l9mMwgQ4B2ZKWil9yF_eACzRZGZt(zjI4|RfO;I?vF8~8fCFHA*TKZp)YQz}%-q7-zyH-|K*4EZG zHa51lwsv-Q_w4W4JJ>roIynBv(aFil+1dI2{rfI1F0QVwZfq1Qt%Z!d2jZy#SDUq4?ze?NbJ|A2siM~@yoe*72)g9Qc#1_cGd;qc(#;3rR> zgoK135Qt~bo`r^nB9X}O@bHL;2owqx85tQB6%`#FjYgwmVq!2DOl)i{7K@FGi;Its zfByXWix)2v5)u*<6O)pXl9Q8DQc_Y=Q`6GYa5!9gdU{4i#>loS6&0^v zzpkvTtg5Q2uCA`Bsd@9}4Vg@?t*x!At2_1c|M(wp0FF}BJ{^N6*zA4?03g`&FWE%@ zu!uP=iX%*%5%zFj1k&@V47%ZnO)owXp=Rh!M3PSZOBisezy2}I~dG)sXErl%1+dXj6@c}W>) zh?Tu?L0X!aw?&~+DXK~gX0n>N6ip=Eq2LF>Iy|?SPYiQ0saltb)nYu9tNW$S7PY9S zqhw@*D`W$6Q;9Kr;F{S|P3F=>xF`sS{rp)b{-DvIMr#AlF9+Uq>Dm~~%hA%QJfKvC zc?5(%dp7FzsJ;Cb`?UyEN7NNNwXD{{&w&^bz*IhL2h4>8P z*Vo~xqK|YaKe^^K$njduZ9m}9&gdiF!Gr|BOqHa7;oQ+hrW`?CnBgmSJPglRA0HnZ zyZ!S`AZTY?6>9cyRe9>{Anj0#nc|NcLC`@;oH>gIjWWFPTJJ*JR8?qy3s^zyze>GA z^Tcp|lUac}^Q$zpi+%vXVX&7mb->`oxQ!s3E+EVA#LElTrKNG@@DW&whH#yNEX!lBXcW})-p z{XyrnX|+L_&7!Q>$XIvuhV531{IO8-WOoF3LoDD`)MMpPW0uQI$j>fJ(Lb!jVY zoZ&P+W`af`RfQ*#*9U}N3WZ`?78d~vJ9AQsVA)xp2$o^Yl0CSwMPR?(`NsK48-?~X zcW!$;HB~fsua7XHv-zcc=3VIX$!41Sg4F=~*K zpk}s(kDz`pM&i(iprtgTG3kZmG}U97Siu9Q1Gpj;3e0>2K_EdvoPO}{M!ET171%DG zqWbNh@x7jxX??vLb4$Ie>KWUHRkMSG@NUyP6l6`fm(3Hwj_*(b^KgGtj+84ST&4%c z#m+l-x`a!;A}@V%@o>w^-Quv6klEPXts4;xQ#3p6m^H8b<>}zXp4K{^_{1dFpj0Fx zwKSRW4tZ%c+Gf(mSMcq?!R*rgiNdbS0wqom4Wn(d7l(+>bA30*j6KVn&FLt+P}xZ? zB0KR~Q4s-;vX7J!7jNIt)%kNq<1l@Ec6F*7ESxNo2$47ExI=Ovhjj!P`}Mao!Zr`$ z_8)H-=r>I-mTY=o&$p-;xv*i{5?PP9!w!21(77!S831V$e_|f5P3nchN>U6mts9Pd zVS9_(xlUXPd4>3kh|x;5;-4Waz#N@t#+I5p9k`%>(l{2j4k9svRO+=K>;`((Ckk&@ zzNASHdD7L8WlQ?`RFWP?15>2K`fGQ5bDbL9LxF~uv@EaO(?Mi#mu1{aZP41(+zF`c z8=ts;&~|V4JoBvLZxhIVnS#dWglNIX2Z2ua9aVwA zD97qimG&;-FkiX0NIt>$il&+$h{N7sv5z0Af1)lT-h`IDS6p_I*{P%|W*btAfu5Z2 zn~D0`Z}Y3ywpvI)+Trdlg<{n(0lN`IZa)Lw&O8T8#G`O}a3ma@VMOK}Z`6%n*8=Ct#!1Tgb_}?QyM<`sF}V_|2{-BH)NE%sPW|Q zt8s9@0^u$rhoEB)49?)Wv0}Qc%sO2OV;xHtsPLH9{~ntvmq{UtqpIv%CfY7bF*Y|p z3I82SB?w{?xkcqTD8X71Hqug})}KWSI`2)sIbY_whQbg}p9~rL0X zPT11>ZHqCFKA(up>`v4PW9N8lYwM67yBD}!Zq3()XE{9qCFb2W<2p;i@~yagwT29{ zb+)%>&^F0YlkYpWR;f28=czxYetnjbllV*OcT&ZCRd&U;o+)#Fm&s(V?anW4{RlCq$=|zT-G@IhoegEhj~o(;n4sWj~iF&N(7}8S%oAkg#4;5Z~OXt}AXIc~k@ zivd}3dV%_5;2i~MW=sCMY!zrtkz{tF%}CPUfn*icHd<9gvmTbOci3|5+KKTQv8EN* zk5`T*8DR8@9oO0PggEeiPB`uQ%9lBIr+1OADlu@ez~{|KK@bysa=e`jtm%??U*&ks z2i_m2x?(W|zRr&Q$jOTrngUC(u!ra+8Z(>c9sDP>^>vozkE=E?-H1wlXZ}}n7q{3} zNE6Xv%QT*~jrmWSVb9E&BP9bI8gt`ip5@B>bJUC4gA0zj@6k`^IFto2==Uo-=uns8 zaCr|ggQ4C=J_pUCERcgrt>l_t0R471;{z`M#2k6Z`WC{OwD0$JAYP=uQl~kR&1ScsY>;{I6BW)19i``yb?cUH`XAyGl*q7Z@AnO%$bC9yZIedDR#jKaI5J|rmdDwrZwv2dB zJ@=MbzZZ&NkI6}RYB3*jfpnlch8}@w7*|P3wdpT@=X4&Hl`a?gXVCfz+h6)EZ8G5= ufA2!qQ^z>?4F(oAf&lSe8})