SceneKit - 提供三種方法解決全景圖畫面內(nèi)部透射顛倒的問題

本節(jié)學(xué)習(xí)目標

我們在將一張圖渲染在球體上制作全景圖的時候,會發(fā)現(xiàn)圖片上的文字從球體內(nèi)部來看是反的,我們舉例說明一下

先看一下我們的全景圖全貌

2.png

注意紅色"ab"的看起來是正常的,但是經(jīng)過我們下面渲染球體的代碼

第一步 創(chuàng)建一個球體

     let sphereNode = SCNNode()
    sphereNode.position = SCNVector3Make(0, 0, 0)
    sphereNode.geometry = SCNSphere(radius: 100)
   self.scnView.scene?.rootNode.addChildNode(sphereNode)

第二步 貼圖
sphereNode.geometry?.firstMaterial?.diffuse.contents = srcImage
sphereNode.geometry?.firstMaterial?.isDoubleSided = true
sphereNode.geometry?.firstMaterial?.diffuse.wrapT = .repeat;
sphereNode.geometry?.firstMaterial?.diffuse.wrapS = .repeat;

第三步 給球體內(nèi)部放置一個相機

       let cameraNode = SCNNode()
     cameraNode.camera = SCNCamera()
     cameraNode.camera?.automaticallyAdjustsZRange = true
     cameraNode.position = SCNVector3Make(0, 0, 0)
     sphereNode.addChildNode(cameraNode)

效果如下

IMG_1398.PNG

這個時候我們會發(fā)現(xiàn)“ab”是 內(nèi)部往外看的效果

接下來我們可以使用下面的三種辦法解決這個問題

第一種 我們不演示 就是把這種圖透射處理一下 然后再渲染,記住不是鏡像

第二種 對紋理坐標進行矩陣變換

默認的矩陣為
SCNMatrix4(m11: 1.0, m12: 0.0, m13: 0.0, m14: 0.0, m21: 0.0, m22: 1.0, m23: 0.0, m24: 0.0, m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0)

旋轉(zhuǎn)矩陣
SCNMatrix4(m11: -1.0, m12: 0.0, m13: 0.0, m14: 0.0, m21: 0.0, m22: 1.0, m23: 0.0, m24: 0.0, m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0)

如果沿y軸中心將圖片旋轉(zhuǎn)90度渲染就可以了接下來看代碼

sphereNode.geometry?.firstMaterial?.diffuse.contentsTransform = SCNMatrix4MakeScale(-1,1,1); // 紋理坐標翻轉(zhuǎn)一下

這個時候 你會發(fā)現(xiàn)什么都看不見 因為球體內(nèi)部沒有燈光 在球體內(nèi)部加上環(huán)境光試試看

    let lightNode = SCNNode()
    lightNode .light = SCNLight()
    lightNode .light?.type = .ambient
    sphereNode.addChildNode(lightNode)

你會發(fā)現(xiàn)正是我們需要的


IMG_1399.PNG

第三種方式 這種方式是不需要添加燈光的

 sphereNode.geometry?.firstMaterial?.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(-1, 1, 1), 1, 0, 0)

運行效果和上面的方式一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡介 物色中有一個搭配頁面,相信許多同學(xué)都記憶猶新。前幾天Weex同學(xué)來問我要其權(quán)限,查看這個效果是如何實現(xiàn)的,因...
    尛破孩波波閱讀 743評論 1 10
  • 所有示例代碼均可以在 Animations-Demo 下載到 上節(jié)提到 UIView 上所有動畫歸根結(jié)底都是發(fā)生在...
    smalldu閱讀 4,979評論 0 18
  • 仿射變換 對矩陣完全不熟悉的話,也可以通過Core Graphics提供的一系列函數(shù),做一些簡單的變換,了解仿射變...
    莫須有戀閱讀 742評論 0 0
  • 本人處于學(xué)習(xí)寫的這篇文章,有不足之處望多多指教。我是看了這了這篇文章,(相信大家恨到很多類似的版本的)然后再加自己...
    seanward閱讀 2,155評論 0 5
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    余生動聽閱讀 10,798評論 0 11

友情鏈接更多精彩內(nèi)容