2010-11-22 2 views
5

OpenGL을 사용하여 C++에서 부드러운 모서리와 부드러운 가장자리를 가진 큐브를 만들어야합니다. 모든 3 가지 옵션이 있습니다 : 베 지어 커브 (어쩌면 가능합니까?), 모서리와 모서리에 대해 실린더가있는 큐브 또는 큐브의 .3ds로드.부드러운 모서리로 큐브를 그리는 가장 좋은 방법은 무엇입니까? 베 지어 커브, .3ds 또는 다른로드?

아이디어가 있으십니까?

+0

가 (HTTP를 [주사위 가장자리를 매끄럽게 만들기]에서이 질문을 참조하십시오 : //stackoverflow.com/q/3480161/59303) - 구체적으로 내 대답. – ChrisF

+0

감사합니다. 검색 결과에 나타나지 않았습니다. – QuantumKarl

+0

.3ds를로드해도 자동으로 이미지가 렌더링되지 않습니다. 3ds를 구문 분석하고 직접 렌더링해야합니다. 렌더링의 문제는 파일 형식과 관련이 없습니다. –

답변

2

법선을 가운데에서 직접 가리켜 (모서리가 둥근 8 개의 구형을 시뮬레이트) 부드러운 조명으로 큐브를 시뮬레이션 할 수 있습니다. 그것은 당신이 정확히 무엇을하려고하는지에 달려 있습니다. 위의 방법을 사용하면 충분히 완벽 할 수 있습니다.

큐브를 구부러진 모서리로 정의하려면 (위를 닫은 상태에서) 큐브를 세분해야합니다. 실제로 모서리를 세분화하고 평면을 무시하면 좋은 효과를 얻을 수 있습니다.

모든 것은 가장자리에서 어떻게 세분화되는지 생각하는 것입니다. 당신이 그것을 부드럽게 수있는 방법에 대해 생각하면, 확실히, 좋은 솔루션 : 함께 올 것이다

+0

큐브 자체는 rubiks 큐브 렌더링을위한 자식 클래스의 일부가 될 것이므로 가까이서 볼 필요는 없지만 상당히보기 좋을 필요가 있습니다. 다른 큐브 뒤에있는 큐브가 그 큐브에 영향을 미칩니 까? 이것이 배우기까지 얼마나 걸릴 것이라고 생각하십니까? 나는 시간이 꽤 제한되어있다. – QuantumKarl

3

pseduocode :

mesh rounded_cube(int size, int edge_radius) 
{ 
    mesh result = sphere(edge_radius) 
    vertex octants[] = result.verteces() 
    for each v in octants 
    { 
     if (v.x != 0.0) 
      v.x = size * (v.x/abs(v.x)); 
     if (v.y != 0.0) 
      v.y = size * (v.y/abs(v.y)); 
     if (v.z != 0.0) 
      v.z = size * (v.z/abs(v.z)); 
    } 

    for i in result.vertices().size() 
    { 
     result.vertex[i] += octants[i] 
    } 

    return result; 

} 
+0

+1 : 만일 내가 enuff 대표를 가지고 있으면 :) – QuantumKarl

관련 문제