상태가 변경 될 때 SceneKit 장면이 제대로 렌더링되지 않도록하려면 어떻게해야합니까?

캠 크레인

내 상위 뷰에는 SceneKit 장면이 포함 된 하위 뷰가 있지만 상위 뷰에서 상태 변경이 발생하면 SceneKit 애니메이션을 재설정하고 모델의 텍스처를 변경하며 모델을 더 크게 만듭니다.

SceneKit 장면이 이러한 방식으로 상태 변경에 의해 영향을받지 않도록하는 방법이 있습니까?

상태 변경 전후의 모델 이미지

다음은 상위 뷰의 코드입니다.

struct ContentView: View {
    @State private var color: Color = .sBlue

    var body: some View {
        VStack {
            Button(action: { self.color = .sOrange }) {
               self.color
            }
            .frame(height: 240)

            ModelView()
        }
    }
}

다음은 SceneKit보기의 코드입니다.

struct ModelView: UIViewRepresentable {
    let model = SCNScene(named: "art.scnassets/3D Models/yBotIdle.scn")!

    func makeUIView(context: Context) -> SCNView {
        model.rootNode.childNode(withName: "yBot", recursively: true)?
            .scale = SCNVector3(x: 0.03, y: 0.03, z: 0.03)

        let cameraNode = SCNNode()
        let camera = SCNCamera()
        camera.focalLength = 120
        cameraNode.camera = camera
        cameraNode.position = SCNVector3(x: 0, y: 2.8, z: 35)
        model.rootNode.addChildNode(cameraNode)

        let directionalLightNode = SCNNode()
        directionalLightNode.light = SCNLight()
        directionalLightNode.light?.type = SCNLight.LightType.directional
        directionalLightNode.light?.intensity = 1500
        directionalLightNode.position = SCNVector3(x: 0, y: 6, z: 10)
        directionalLightNode.eulerAngles = SCNVector3(x: -0.4, y: 0, z: 0)
        model.rootNode.addChildNode(directionalLightNode)

        let modelView = SCNView()
        modelView.antialiasingMode = SCNAntialiasingMode.multisampling4X
        modelView.backgroundColor = UIColor(ciColor: .clear)

        return modelView
    }

    func updateUIView(_ modelView: SCNView, context: Context) {
        modelView.scene = model
    }
}

감사!

캠 크레인

알아 냈어! SceneKit보기를 사용하는 대신 상위보기에서 사용할 SceneKit보기의 인스턴스를 만들면 문제가 직접 제거됩니다. 왜 그런지 모르겠습니다. 누군가 설명 할 수 있다면 듣고 싶습니다.

struct ContentView: View {
    @State private var color: Color = .sBlue
    let modelView = ModelView()

    var body: some View {
        VStack {
            Button(action: { self.color = .sOrange }) {
                self.color
            }
            .frame(height: 240)

            modelView
        }
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

페이지가로드 될 때마다 전역 자바 스크립트 변수가 초기화되지 않도록하려면 어떻게해야합니까?

분류에서Dev

브라우저 크기가 변경 될 때이 목록이 줄을 끊지 않도록하려면 어떻게해야합니까?

분류에서Dev

RN 0.61에서 상태가 변경 될 때 Main Component에서 Child Component를 다시 렌더링하려면 어떻게해야합니까?

분류에서Dev

화면 크기가 변경 될 때 이러한 콘텐츠 행이 스택되도록하려면 어떻게해야합니까?

분류에서Dev

페이지의 나머지 부분이 렌더링 될 때까지 기다리지 않고 클릭 즉시 아이콘이 변경되도록하려면 어떻게해야합니까?

분류에서Dev

상태가 변경 될 때 React가 다시 렌더링되지 않습니다.

분류에서Dev

매개 변수가 변경 될 때 매크로를 사용하여 Cloudformation이 템플릿을 재 처리하도록하려면 어떻게해야합니까?

분류에서Dev

내 소품이 변경 될 때 Svelte에서 강제로 다시 렌더링하려면 어떻게해야합니까?

분류에서Dev

지도에 레이어가 추가 될 때 OpenLayers 3에서 하단 레이어로 추가되도록하려면 어떻게해야합니까?

분류에서Dev

tkinter에서 태그가 지정된 단어를 변경할 때 색상이 다시 변경되도록하려면 어떻게해야합니까?

분류에서Dev

Slate 문서가로드 될 때 쿼리가 자동으로 실행되지 않도록하려면 어떻게해야합니까?

분류에서Dev

상태 비 저장 구성 요소는 소품이 변경 될 때 다시 렌더링되지 않습니다.

분류에서Dev

해상도를 변경할 때 바둑판이 보이지 않게하려면 어떻게해야합니까?

분류에서Dev

컨테이너가 축소 될 때 SVG가 확장되지 않도록하려면 어떻게해야합니까?

분류에서Dev

브라우저 너비 / 높이가 변경 될 때 이미지 그리드의 크기를 동적으로 조정하려면 어떻게해야합니까?

분류에서Dev

페이지가로드 될 때 div가 서로 곧바로 쉽게 들어가도록하려면 어떻게해야합니까?

분류에서Dev

세부 정보가 변경되고 테이블 뷰가 재정렬 될 때 UITableView 선택이 변경되지 않도록하려면 어떻게해야합니까?

분류에서Dev

계속하기 전에 <dd> 요소에 데이터가 포함될 때까지 Selenium WebDriver가 대기하도록하려면 어떻게해야합니까?

분류에서Dev

배경을 클릭 할 때 머티리얼 UI 대화 상자가 닫히지 않도록하려면 어떻게해야합니까?

분류에서Dev

이미지가로드 될 때 이미지 온 로딩을 중지하려면 어떻게해야합니까?

분류에서Dev

Aurelia가 URL에서 #을보고 경로를 변경하려고 할 때 페이지 링크 (Fragment Identifiers)를 클릭 할 때 JS 오류가 발생하지 않도록하려면 어떻게해야합니까?

분류에서Dev

Slotted HTML 요소가 shadowRoot 내부에있을 때까지 렌더링되지 않도록하려면 어떻게해야합니까?

분류에서Dev

경고 대화 상자가 즉시 닫히지 않도록하려면 어떻게해야합니까?

분류에서Dev

장치의 방향을 변경할 때 목록보기 요소가 사라지지 않도록하려면 어떻게해야합니까?

분류에서Dev

확대 / 축소 할 때 탐색의 활성 상태가 공간을 생성하지 않도록하려면 어떻게해야합니까?

분류에서Dev

데이터가 추가 될 때 WinForms 차트의 크기가 조정되지 않도록하려면 어떻게해야합니까?

분류에서Dev

페이지가로드 될 때 tabindex = "0"시작을 선택하려면 어떻게해야합니까?

분류에서Dev

Java가 업데이트 될 때마다 Ask.com Toolbar가 설치되지 않도록하려면 어떻게해야합니까?

분류에서Dev

Swift 2에서 데이터를 다시로드 할 때 테이블 형식이 변경되지 않도록하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    페이지가로드 될 때마다 전역 자바 스크립트 변수가 초기화되지 않도록하려면 어떻게해야합니까?

  2. 2

    브라우저 크기가 변경 될 때이 목록이 줄을 끊지 않도록하려면 어떻게해야합니까?

  3. 3

    RN 0.61에서 상태가 변경 될 때 Main Component에서 Child Component를 다시 렌더링하려면 어떻게해야합니까?

  4. 4

    화면 크기가 변경 될 때 이러한 콘텐츠 행이 스택되도록하려면 어떻게해야합니까?

  5. 5

    페이지의 나머지 부분이 렌더링 될 때까지 기다리지 않고 클릭 즉시 아이콘이 변경되도록하려면 어떻게해야합니까?

  6. 6

    상태가 변경 될 때 React가 다시 렌더링되지 않습니다.

  7. 7

    매개 변수가 변경 될 때 매크로를 사용하여 Cloudformation이 템플릿을 재 처리하도록하려면 어떻게해야합니까?

  8. 8

    내 소품이 변경 될 때 Svelte에서 강제로 다시 렌더링하려면 어떻게해야합니까?

  9. 9

    지도에 레이어가 추가 될 때 OpenLayers 3에서 하단 레이어로 추가되도록하려면 어떻게해야합니까?

  10. 10

    tkinter에서 태그가 지정된 단어를 변경할 때 색상이 다시 변경되도록하려면 어떻게해야합니까?

  11. 11

    Slate 문서가로드 될 때 쿼리가 자동으로 실행되지 않도록하려면 어떻게해야합니까?

  12. 12

    상태 비 저장 구성 요소는 소품이 변경 될 때 다시 렌더링되지 않습니다.

  13. 13

    해상도를 변경할 때 바둑판이 보이지 않게하려면 어떻게해야합니까?

  14. 14

    컨테이너가 축소 될 때 SVG가 확장되지 않도록하려면 어떻게해야합니까?

  15. 15

    브라우저 너비 / 높이가 변경 될 때 이미지 그리드의 크기를 동적으로 조정하려면 어떻게해야합니까?

  16. 16

    페이지가로드 될 때 div가 서로 곧바로 쉽게 들어가도록하려면 어떻게해야합니까?

  17. 17

    세부 정보가 변경되고 테이블 뷰가 재정렬 될 때 UITableView 선택이 변경되지 않도록하려면 어떻게해야합니까?

  18. 18

    계속하기 전에 <dd> 요소에 데이터가 포함될 때까지 Selenium WebDriver가 대기하도록하려면 어떻게해야합니까?

  19. 19

    배경을 클릭 할 때 머티리얼 UI 대화 상자가 닫히지 않도록하려면 어떻게해야합니까?

  20. 20

    이미지가로드 될 때 이미지 온 로딩을 중지하려면 어떻게해야합니까?

  21. 21

    Aurelia가 URL에서 #을보고 경로를 변경하려고 할 때 페이지 링크 (Fragment Identifiers)를 클릭 할 때 JS 오류가 발생하지 않도록하려면 어떻게해야합니까?

  22. 22

    Slotted HTML 요소가 shadowRoot 내부에있을 때까지 렌더링되지 않도록하려면 어떻게해야합니까?

  23. 23

    경고 대화 상자가 즉시 닫히지 않도록하려면 어떻게해야합니까?

  24. 24

    장치의 방향을 변경할 때 목록보기 요소가 사라지지 않도록하려면 어떻게해야합니까?

  25. 25

    확대 / 축소 할 때 탐색의 활성 상태가 공간을 생성하지 않도록하려면 어떻게해야합니까?

  26. 26

    데이터가 추가 될 때 WinForms 차트의 크기가 조정되지 않도록하려면 어떻게해야합니까?

  27. 27

    페이지가로드 될 때 tabindex = "0"시작을 선택하려면 어떻게해야합니까?

  28. 28

    Java가 업데이트 될 때마다 Ask.com Toolbar가 설치되지 않도록하려면 어떻게해야합니까?

  29. 29

    Swift 2에서 데이터를 다시로드 할 때 테이블 형식이 변경되지 않도록하려면 어떻게해야합니까?

뜨겁다태그

보관