2014-02-28 3 views
0

첫 번째 libgdx 3D 게임에서는 이제 createBox에서 createRect으로 전환하여 보이는 얼굴 만 만들었습니다 (벽이 다른 벽의 왼쪽에 있으면 오른쪽면이 명백한...).Libgdx ModelBuilder.createRect 한쪽에서만 볼 수 있습니다.

  1. frontFace
  2. backFace
  3. rightFace
  4. leftFace

그들은 거의 그들이 어떻게 실제로해야 그려져 있습니다 : 나는 4 개 모델을 만드는 오전. 하지만 한 가지 큰 문제가 있습니다. 양면은 z-Direction으로 볼 때만 볼 수 있습니다. 다른면 (음수는 z-Direction)을 보면 그다지 그립니다. 앞면과 뒷면의 얼굴은 단지 그릴 경우에만 그립니다. x-Direction. 법선과 관련이 있습니까? 나는 그들을 다음과 같이 설정했습니다 :

normal.x = 0; 
normal.y = 1; 
normal.z = 0; 

오류입니까? 어떻게 법선을 설정해야합니까? 그들은 무엇을지지합니까? 조명에 대한 일반적인 매핑에 대한 기본적인 아이디어가 있습니다.

중요 사항 : 나는 뒷면 도려 내기를 사용하지 않았지만 아무런 효과가 없었습니다. 뷰 프러스 텀 컬링이 켜져 있습니다. 추가 정보가 필요한 경우 의견을 게시하십시오. 가능한 한 빨리 추가하겠습니다. 감사합니다

답변

3

아마도 직접 관련이 없지만 여전히 중요합니다 : 디버깅/테스트 이외의 다른 용도로 createRect 또는 createBox를 사용하지 마십시오. 대신 여러 모양을 단일 모델/노드/파트로 결합하십시오. 또는 가능한 경우 모델링 응용 프로그램을 사용하십시오.

어떻게 도형 컬링을 비활성화했는지 지정하지 않았습니다. 그러나 shader/rendercontext 외부의 OpenGL 상태를 변경하면 안됩니다 (그렇게하면 예기치 않은 동작이 발생 함). 후면 배제를 비활성화하려면 IntAttribute.CullFace (https://github.com/libgdx/libgdx/wiki/Material-and-environment#wiki-intattribute 참조), DefaultShader (또는 기본 ModelBatch) 구성 defaultCullFace 구성원 (http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/shaders/DefaultShader.Config.html#defaultCullFace 참조) 또는 (비추천) 정적 DefaultShader#defaultCullFace 구성원 (http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/shaders/DefaultShader.html#defaultCullFace 참조)을 사용하여 지정할 수 있습니다.

얼굴이 앞면인지 뒷면인지는 정점 감기를 기반으로합니다. 즉, 직사각형의 모서리를 제공하는 순서는 어느면이 앞면인지, 어느면이 뒷면인지를 결정하는 데 사용됩니다. rect 메소드 중 하나를 사용하면 인수에 00, 01, 10 또는 11 접미사가 있음을 알 수 있습니다. 여기에서 얼굴을 볼 때 00은 왼쪽 하단, 01은 왼쪽 상단, 11은 오른쪽 상단, 10은 오른쪽 하단입니다.

직사각형의 경우 직각이 직사각형을 직면합니다. 예를 들어 XZ 평면에 직사각형이 있고 정면이 맨 위에 있으면 그 법선은 X = 0, Y = 1, Z = 0입니다. 앞면이 바닥을 향하고 있으면 법선은 X = 0, Y = -1, Z = 0입니다. 마찬가지로 XY 평면에 직사각형이있는 경우 해당 법선은 X = 0, Y = 0, Z = 1 또는 X = 0, Y = 0, Z = -1입니다. 보통은 안면 제거에 사용되지 않으며, 조명 등에 가장 일반적으로 사용됩니다. 이 아닌 것은이 아닌 얼굴을 컬링합니다 (잘못된/검은 색 조명을 유발할 수 있음).

+0

답변 해 주셔서 감사합니다. 1x1x1 인 블록 만 만들어야합니다. 어떻게 createBox/creatRect없이 빌드해야합니까? – Springrbua

+0

@Springrbua는이 목적으로 블렌더 또는 다른 3D 편집기를 사용합니다. 블렌더를 사용하려면 '큐브'라는 메쉬를 추가하고 적절하게 크기를 조정하면됩니다. 그런 다음'.obj' 형식 파일로 내 보낸 다음 libGDX에이 메쉬를로드하십시오. – Nolesh

+0

@Nolesh 왜 이것이 런타임에 rect를 만드는 것보다 효율적입니까? – Springrbua

0

귀하의 목적을 위해 Decal 클래스를 사용하시기 바랍니다. 데칼은 3D 장면에 존재하는 비트 맵 스프라이트입니다. This 기사는 LibGDX에서 데칼 사용에 관한 것입니다. 나는 그것이 당신이 원했던 것이기를 바랍니다.

+0

답변 해 주셔서 감사합니다. 왜이 상황에서 데칼을 사용하는 것이 더 나을 것이라고 생각합니까? 그들은 더 효율적입니까? 실제 문제 (뒷면 도려 내기)가 모두 해결되었으므로 해결 방법은 잘못되었거나 일부 rect의 모서리 순서입니다. – Springrbua