創作內容

2 GP

Minecraft: 只透過"觀看"方塊找出座標 花草篇

作者:evanlin96069│2020-07-26 17:42:01│巴幣:4│人氣:466
最近看到了這部影片
裡面有提到使用草偏移的位置找到座標
這我以前有聽過
不過沒有仔細研究過
 
大部分花或草都不會被擺放在方塊的正中央
而是會有些偏移
這當然是為了讓遊戲看起來更加自然
這些偏移值是由x和z所決定的
和高度(y)無關
和方塊旋轉一樣不受種子碼或世界類型影響
上次的那個找材質旋轉方向的函式是有經過修改過的
最原本的那段代碼是出現在
net.minecraft.util.math裡的MathHelper這個class裡的getCoordinateRandom
這是原本的代碼
public static long getCoordinateRandom(int x, int y, int z)
{
   long i = (long)(x * 3129871) ^ (long)z * 116129781L ^ (long)y;
   i = i * i * 42317861L + i * 11L;
   return i;
}
而這次花草的偏移值也有用到這個函式
計算偏移值的代碼出現在
net.minecraft.block裡的Block這個class裡的
public Vec3d getOffset(IBlockState state, IBlockAccess worldIn, BlockPos pos)
 
這個函式做得基本上就是
如過方塊不會偏移就回還零向量
如果會偏移就呼叫下面這段
long i = MathHelper.getCoordinateRandom(pos.getX(), 0, pos.getZ());
            return new Vec3d(((double)((float)(i >> 16 & 15L) / 15.0F) - 0.5D) * 0.5D, block$enumoffsettype == Block.EnumOffsetType.XYZ ? ((double)((float)(i >> 20 & 15L) / 15.0F) - 1.0D) * 0.2D : 0.0D, ((double)((float)(i >> 24 & 15L) / 15.0F) - 0.5D) * 0.5D);
我們這裡只需要回傳向量裡的的xz
這是我們想要的結果
long i = getCoordinateRandom(x, 0, z);
double offsetX = ((double)((float)(i >> 16 & 15L) / 15.0f) - 0.5) * 0.5;
double offsetZ = ((double)((float)(i >> 24 & 15L) / 15.0f) - 0.5) * 0.5;
有了這個函式我們就可以來試用看看
如下圖
右方是X+
下方是Z+
左上角的花座標是(0,0)
這是這九個座標算出的偏移值
0 0
-0.250 -0.250
2 0
-0.183 0.050
4 0
-0.083 0.183
0 2
0.017  -0.150
2 2
-0.050 -0.217
4 2
0.017  -0.183
0 4
-0.250 0.183
2 4
0.117  -0.083
4 4
-0.250 0.217
對照上圖沒什麼問題
 
花了一段時間研究
花草的偏移位置總共有256種(16x16)可能
以下是16種可能會出現的數字
-0.25
  
-0.217
  
-0.183
  
-0.15
  
-0.117
  
-0.083
  
-0.05
  
-0.017
  
0.017
  
0.05
  
0.083
  
0.117
  
0.15
  
0.183
  
0.217
  
0.25
  
 
因為花草的偏移有太多種可能性
且每一種相差不太大
要從一張照片中判斷出一株植物準確的偏移值
比起判斷方塊旋轉方向困難許多
因此用這個方法找出方塊座標非常困難
不過理論上仍然可行

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4862068
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★evanlin96069 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Portal Speed... 後一篇:Portal Cup% ...

追蹤私訊切換新版閱覽

作品資料夾

d88931122所有巴友
歡迎諸君來參觀老僧的小屋,內含Steam與Google Play遊戲、3D角色模組、Line貼圖看更多我要大聲說昨天10:25


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】