2013-04-14 3 views
1

클래스 프로젝트의 스캔 라인 렌더링 작업을하고 있습니다. 렌더러는 지금까지 작동하며 모델 (utah 주전자를 주로 사용)에서 읽고 정점/표면 법선을 계산하며 플랫 및 퐁 쉐이딩을 수행 할 수 있습니다. 나는 텍스쳐 맵핑을 추가하려고 노력 중이다. 텍스쳐 맵핑은 문제를 일으키고있다. 실제로 화면상의 점을 그리는 것 이외의 OpenGL 메쏘드를 사용할 수 없다.실린더 중간면을 수동으로 텍스처 매핑

그래서 저는 앱에 텍스처를 읽고 RGB 값의 2D 배열을 가지고 있습니다. 2D 텍스처 공간의 텍스처를 간단한 3D 오브젝트 (내 경우에는 원통형)에 매핑하는 것이 개념이라는 것을 알고 있습니다. 이제는 중간 표면을 물체 표면에 매핑합니다.

그러나 실제로 이러한 작업을 수행하는 방법을 모르겠습니다. :) 텍스처를 실린더에 매핑하는 몇 가지 수식을 찾았지만, 항상 사용할 값과 같은 세부 사항을 남겨 두는 것처럼 보입니다. 또한 객체의 정점 좌표를 가져와 그 점에 대한 원통형 값을 얻는 방법을 알지 못합니다. 실린더에 매핑하는 것에 대한 다른 StackOverflow 게시물이 있지만, 1) 셰이더가있는 최신 OpenGL을 다루고, 2) 중간 표면을 처리하지 않으므로, 어떻게하면 지식을 어떻게 번역 할 것인지 확신 할 수 없습니다.

따라서 중간면으로 원통을 사용하여 3D 오브젝트에 텍스처를 매핑하기위한 의사 코드에 대한 도움은 크게 감사하겠습니다.

+0

텍스처 매핑은 "중간 표면"작동하지 않습니다

이것은 당신이 달성하려고하는 것입니다. 기술적으로 텍스처는 보간 함수에 대한 샘플 포인트를 정의하고 보간 함수는 텍스처 좌표에 따라 원시 래스터 라이저를 따라 샘플링됩니다. 텍스처 좌표는 명시 적으로 주어 지거나 정점 위치로부터 계산됩니다. 나는 이것이 매우 만족스런 대답이 아니라는 것을 안다. 그러므로 나는 그것을 주석으로 썼다. – datenwolf

답변

2

프로세스를 올바르게 설명하지 않는 "중간 표면"이라는 문구를 계속 사용하면서도 머리 속에있는 것을 암시합니다.

기본적으로 찻 주전자 표면의 모든 점을 원통에 매핑하는 방법을 요구합니다 (텍스처가 원통에 "감싸여 있다고 가정).

단지 다음과 같은 u세타 높이와 v 등 (texcoords)를 사용 (세타, 높이가 R) 원통 좌표로 표면 점을 변환한다.

+0

생각 나는 이것을 알아 냈지만 서클에 계속 간다. (나쁜 농담). 그렇다면 표면 점을 실제로 원통형 좌표로 변환하는 방법은 무엇입니까? 'x, y, z'포인트가 'r, theta, height'로 변환되는 방법을 모릅니다. – chrismanderson

+0

이 주석 내부에서 수학을 형식화하고 조판 할 수있는 방법은 없습니다. 직교 좌표계에서 원통 좌표계로의 변환을위한 실제 수학은 위키 피 디아를 참조해야합니다 (http://en.wikipedia.org/wiki/Cylindrical_coordinate_system). '좌표 시스템 전환'섹션을 확인하십시오. 특히, ** arcsin **을 사용하는 공식 (math.h에서 asin 임). –