0 부터 OpenGL ES 의 4 보충 학습 – setupView 재 작성

5266 단어 openGL ES

저 있어 요 제로 부터 OpenGL ES 의 4 - 광 효 배우 기 한 글 에는 일반 GLfloat 배열 이 사용 되 었 다.OpenGL 이 정의 하지 않 은 데이터 구 조 를 사용 하지 않 았 기 때문에 가장 일반적 이 고 편리 한 방식 입 니 다.  하지만 여기 서 저 는 제1 부분 에서 정 의 된 Vertex3D 를 사용 합 니 다. Vector3D 와 Color3D 데이터 구조 재 작성 setupView: 방법.이런 방법 이 더 좋 은 것 은 아니 지만, 그것 은 다른 방식 이다.OpenGL 을 처음 배 웠 을 때 저 는 정점 을 사 용 했 고 색깔 과 삼각형 의 용 어 는 가 변 길이 부동 소수점 배열 보다 이해 하기 쉽다 는 것 을 알 게 되 었 습 니 다.만약 네가 나 와 같다 면, 너 는 이 판본 이 더욱 이해 하기 쉽다 는 것 을 알 게 될 것 이다.  사용자 정의 데이터 구 조 를 사용 하 는 것 외 에 나 는 환경 광 요소 의 수량 을 줄 이 고 광원 을 오른쪽으로 조금 이동 시 켰 다.그리고 Vector3DMake With Start AndEndPoints () 를 사용 하여 이동 하 는 광원 을 20 면 체 로 가리 킵 니 다.이렇게 하면 광 효 를 좀 더 생동감 있 게 한다.
-(void)setupView:(GLView*)view
{ const GLfloat zNear = 0.01, zFar = 1000.0, fieldOfView = 45.0; GLfloat size;  glEnable(GL_DEPTH_TEST);  glMatrixMode(GL_PROJECTION); size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0); CGRect rect = view.bounds;  glFrustumf(-size, size, -size / (rect.size.width / rect.size.height), size / (rect.size.width / rect.size.height), zNear, zFar);  glViewport(0, 0, rect.size.width, rect.size.height);  glMatrixMode(GL_MODELVIEW); // Enable lighting  glEnable(GL_LIGHTING); // Turn the first light on  glEnable(GL_LIGHT0); // Define the ambient component of the first light  static const Color3D light0Ambient[] = {{0.05, 0.05, 0.05, 1.0}};  glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat *)light0Ambient); // Define the diffuse component of the first light  static const Color3D light0Diffuse[] = {{0.4, 0.4, 0.4, 1.0}};  glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat *)light0Diffuse); // Define the specular component and shininess of the first light  static const Color3D light0Specular[] = {{0.7, 0.7, 0.7, 1.0}};  glLightfv(GL_LIGHT0, GL_SPECULAR, (const GLfloat *)light0Specular);  glLightf(GL_LIGHT0, GL_SHININESS, 0.4); // Define the position of the first light  // const GLfloat light0Position[] = {10.0, 10.0, 10.0};  static const Vertex3D light0Position[] = {{10.0, 10.0, 10.0}};  glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position); // Calculate light vector so it points at the object  static const Vertex3D objectPoint[] = {{0.0, 0.0, -3.0}}; const Vertex3D lightVector = Vector3DMakeWithStartAndEndPoints(light0Position[0], objectPoint[0]);  glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, (GLfloat *)&lightVector); // Define a cutoff angle. This defines a 50° field of vision, since the cutoff  // is number of degrees to each side of an imaginary line drawn from the light's  // position along the vector supplied in GL_SPOT_DIRECTION above  glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 25.0);  glLoadIdentity();  glClearColor(0.0f, 0.0f, 0.0f, 1.0f); }
  당신 은 빛 의 속성 을 마음대로 조정 하고 추가 적 인 광원 이나 20 면 체 를 증가 시 켜 이런 조정 이 장면 에 어떤 변 화 를 가 져 올 지 체험 할 수 있 습 니 다.이 물건 들 은 체험 하기 어 려 우 니 하룻밤 에 모든 것 을 이해 할 것 이 라 고 기대 하지 마라.

좋은 웹페이지 즐겨찾기