2011-05-14 3 views
2

2D 게임 패널과 "의사"-3D를 모두 가지고있는 Java 게임을 만들고 있습니다.2D 평면을 3D 큐브로 확대

3D 환경에 배치 된 일부 2D 평면이므로 실제 3D가 아닙니다 (사용자 정의 된 모델 없음).

저는 렌더링 엔진으로 jPCT를 사용하고 있습니다. 현재 벽을 렌더링하려고합니다. 2 차원보기에서

, 그들은 다음과 같이 : 이것은 10을 적층하여 작동
enter image description here

을 다음 3D 뷰에서 enter image description here


, 나는 다음과 같이 그들을 얻으려고 비행기가 서로 겹쳐져 3D 벽의 환상을 선사합니다.

이 얻을 수있는 코드는 다음과 같습니다
http://i.stack.imgur.com/s8hyX.png

이 비행기의 양을 증가시킴으로써 감소 될 수 있고 :

Object3D obj = new Object3D(20); 

    for (int y=0; y < 10; y++) { 
     float fY = y/-10f; 
     obj.addTriangle(new SimpleVector(-1, fY, 1), 0, 0, 
         new SimpleVector(-1, fY, -1), 0, 1, 
         new SimpleVector(1, fY, -1), 1, 1, 
         textureManager.getTextureID(topTexture)); 
     obj.addTriangle(new SimpleVector(1, fY, -1), 1, 1, 
         new SimpleVector(1, fY, 1), 1, 0, 
         new SimpleVector(-1, fY, 1), 0, 0, 
         textureManager.getTextureID(topTexture)); 
    } 

문제 똑바로 볼 때,이 효과를 얻을 수 있다는 것입니다 서로 더 가깝게 만들지 만 동일한 효과를 얻는보다 효율적인 방법을 찾고 있습니다.

저는 2 차원 이미지를 최상위 텍스처로하여 큐브를 렌더링하고 픽셀의 마지막 라인을 측면의 텍스처로 사용하려고합니다. 기본 이미지에서 (0,0) 및 (0,39)의 40x1 이미지를 추출하고 큐브의 측면에 걸쳐 이들을 늘립니다 (원본 이미지는 40x40입니다).

이러한 이미지의 보이는 부분이 40x40보다 작기 때문에 (예 : 상단 및 하단 40x9 픽셀이 수평 벽에 투명하기 때문에) 완벽하게 작동하지 않습니다. 따라서 일부 가장자리 감지를 수행하고 거기에서 절단을 시작해야합니다. .

동일한 작업을 수행하기위한 더 좋은 제안이 있습니까?

+0

정확히 무엇을 요구하고 있습니까? 큐브를 그리는 것이 여기에서하는 것은 합리적인 일이라는 것이 명백합니다. 질문이 단지 큐브를 텍스처링하는 방법에 관한 것이라면 사용중인 텍스처에 어떤 문제가 있는지 명확히 할 수 있습니까? – YXD

+1

큐브를 텍스처링하는 방법을 알고 있지만 문제는 원본 2D 벽 이미지가 픽셀로 완전히 덮혀 있지 않다는 것입니다 (http://i.imgur.com/46Gwz.png 참조, 좌우 약 9 픽셀이 투명 함) . 그래서 큐브를 만들고 텍스쳐를 만들 수는 없습니다. 내가 이미지의 가장자리를 결정하고 그것에 따라 다각형을 만들어야 겠어. 그런 다음 가장자리의 작은 조각을 잘라내 큐브의 측면에 텍스처로 사용해야합니다. – srdoso

+0

예 방금 설명한 내용을 수행 할 수 있습니다. 래스터 - 벡터 또는 래스터 - 벡터화 알고리즘을 찾으십시오. – karmakaze

답변

0

가장 단순하지만 가장 가능성이 낮은 해결책은 이미지에서 투명 픽셀과 비 투명 픽셀 옆에있는 모든 픽셀에 대해 해당 픽셀에 대해 키가 큰 직사각형 큐브를 렌더링하는 것입니다.

관련 문제