간단한 셀 쉐이더 효과를 만들기 위해 노력 중이며 후면 및 전면면 컬링이 포함됩니다. 그러나 지금까지 나의 도태 결과는 다소 이상합니다.이상한 결과를 초래하는 OpenGL 백 페이스 컬링
설정 OpenGL을 소스 코드 : 소스 코드를 렌더링
// init matrices
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 800/600, 0.01f, 150);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// enable opengl caps
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
// cell shading effects
glLineWidth(3.5f);
// setup display list
pDList = glGenLists(1);
glNewList(pDList, GL_COMPILE);
glBegin(GL_QUADS);
// front
glNormal3f(0, 0, 1);
glVertex3f(-0.25f, -0.5f, -3);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(0.25f, -1, -3);
glVertex3f(-0.25f, -1, -3);
// back
glNormal3f(0, 0, -1);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(-0.25f, -1, -3.5f);
// top
glNormal3f(0, 1, 0);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(-0.25f, -0.5f, -3);
// bottom
glNormal3f(0, -1, 0);
glVertex3f(-0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3);
glVertex3f(-0.25f, -1, -3);
// right
glNormal3f(1, 0, 0);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3);
// left
glNormal3f(-1, 0, 0);
glVertex3f(-0.25f, -0.5f, -3);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(-0.25f, -1, -3.5f);
glVertex3f(-0.25f, -1, -3);
glEnd();
glEndList();
가 :
은 어떤 이유로 단지 권리를 그리는 것 :
// clear
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.75f, 0.75f, 0.75f, 1);
// reset matrix
glLoadIdentity();
// draw cube
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glCullFace(GL_BACK);
glColor3i(0, 0, 0);
glCallList(pDList);
이것은 내가 가진 무엇 큐브 쪽. 기묘한. glCullFace (GL_BACK)를 변경했습니다. ~ glCullFace (GL_FRONT); 내 렌더링 기능.
이지금은 모든 측면을 그리는 것 : 나는이있어? 입방체의 오른쪽은 뒤쪽과 앞면 모두이며, 나머지 큐브는 뒤쪽을 향하고 있다고 생각하는 것 같습니다. 도둑질을 할 때 위의 그림과 같은 결과가 나타납니다.
내가 생각할 수있는 다른 관련 정보는 내가 SDL을 사용하고 있으며 그래픽 카드 문제가 아니라고 확신합니다. 두 개의 다른 컴퓨터에서 실행 했으므로 각각 동일한 결과를 산출했습니다. 결과.
방금 원시를위한 법선을 설정하는 법을 배우기 시작 했으므로 이것은 큰 n00b 실수 또는 약간의 멍청한 오류입니다. 나는 가장 단순하고 분명한 실수를 할 때마다 1 페니를 챙기고 백만 시간 동안 붙어있어 백만장자가 될 것입니다.
간단히 말해서, 내가 잘못한 것은 무엇이고, 올바른 방향으로 올바른면을 잡아서 올바른 방향으로 도려내는 방법은 무엇입니까?
내 OpenGL 초기화 코드가 약간 녹슬었지만 정점 (GL_CW, GL_CCW)의 순서를 어딘가에 정의해서는 안됩니까? – MFH
그게 무슨 의미인지 아직 모르겠다. 나는 여전히 OpenGL을 배우고있다 ... – Aaron
명백하게 Sergey K는 같은 생각을 가지고 있었지만, 더 좋은 방법으로 그것을 제시 할 수 있었다 :) – MFH