3D Graphics/Open GL
-
특정 벡터를 기준으로 각도 계산하기3D Graphics/Open GL 2008. 12. 6. 16:10
float GetPointAngle(double *base, double *point) { double v[3], yv[3]; float angle; double len; v[0] = point[0] - base[0]; v[1] = point[1] - base[1]; v[2] = point[2] - base[2]; //길이 계산. len = sqrt( (v[0]*v[0] + v[1]*v[1] + v[2]* v[2] ) ); //normalize v[0] /= len; v[1] /= len; v[2] /= len; if (v[0] >= 0) { yv[0] = 0, yv[1] = 1, yv[0] = 0; angle = acos( (v[0]*yv[0] + v[1]*yv[1] + v[2]*yv[2]) ); an..
-
두 정점을 이용한 박스 그리기(OBB)3D Graphics/Open GL 2008. 10. 23. 19:30
두 정점 start와 end가 있을때 이 길이만큼의 사각형을 구성한다. CVector : 벡터 클래스. opengl 자체에 없으니 만들어쓰든 받아서 쓰든.. 아무튼 필요하다. 아니면 일일히 계산해야함. CVector v, v1, m_vertex[4]; //벡터를 구한다. v1 = end - start; //방향벡터로 정규화한다. v1 = v1.Normalize(); //상방벡터. opengl은 오른손 좌표계라 z값이 1이다. v = CVector(0.0, 0.0, 1.0); //직선의 방향벡터와 상방벡터를 외적해 v1에 수직인 벡터를 구한다. cross.Cross(v1, v); //정점에 가로벡터를 +, -해줌으로써 사각형의 네 정점을 구한다. m_vertex[0] = start-cross; m_vert..
-
블랜딩 공식을 이용해 텍스쳐에 컬러키 지정.3D Graphics/Open GL 2007. 8. 4. 04:45
일단 블랜딩 모드를 켜고 시작합니다. 더불어서 깊이검사를 끔으로써 블랜딩시 계산의 실수가 없도록 합니다. glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); 다음으로 컬러키를 지정하는 부분입니다. 마스크 개념을 이용하는데 지워질 영역은 흰색, 뿌려야할 부분은 검은색을로 텍스쳐를 만들어서 그립니다. glBlendFunc(GL_DST_COLOR,GL_ZERO); //여기서 마스크 이미지를 그린다. 다음은 이제 원본 이미지를 그릴 차례입니다. 원본 이미지는 지워질 부분을 검은색으로 칠합니다. 그리고 블랜딩 옵션은 아래처럼 조정합니다. glBlendFunc(GL_ONE,GL_ONE); //여기서 원본 이미지를 그린다. 작업이 끝났으면 상태를 복구시키도록 합니다. glDisable(..