Objective-C에서 OpenGL을 사용하여 몇 주 동안 씬을 만들려고 노력해 왔지만 제대로 작동하지 않는 것 같습니다. Drawing to an NSOpenGLView Class: A Tutorial으로 시작하여 저에게 잘 돌아갔습니다. 조금 더 확장 할 수 있었지만 OpenGL 프로그래밍 가이드는 그 단계 이후에 일종의 구멍을 남겨 둡니다. 버퍼링을 이중화하고 새로 고침 빈도와 모든 것을 동기화하는 방법에 대한 자세한 내용은 설명되어 있지만보기를 업데이트하는 방법에 대한 실제 예제는 제공하지 않습니다. 그래서 현재는 멋진 것들을 많이 화면에 그릴 수 있지만 일단 있으면 정적 인 이미지 일뿐입니다. 움직이지 않고 회전하지 않습니다.
누군가가 좋은지 알고 있습니까? 간단하면 이것이 실제로 수행되는 방법의 예는 무엇입니까?코코아로 만든 간단한 OpenGL 예제
답변
이것은 내가 자주 발생하는 문제이며,이 중요한 단계는 NSOpenGLView의 일부가 아닌 저를 놀라게 튜토리얼 문서. 이 awakeFromNib
에서 일어나는 것을
- (void)awakeFromNib
{
NSTimer *updateTimer = [NSTimer timerWithTimeInterval:1.0f/30.0f target:self selector:@selector(idle:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:updateTimer forMode:NSDefaultRunLoopMode];
}
주의 사항 :
당신은 다시 그려야 할 필요가 있다는 견해를 알리기 위해 콜백 타이머를 설정해야합니다. 타이머는 1/30 간격으로 실행되며 원하는 경우 변경할 수 있습니다. 화재가 발생할 때마다 idle
이라는 함수를 호출합니다. 이 함수는 다음과 같이 구현할 수 있습니다.
- (void)idle:(NSTimer*)timer
{
[self setNeedsDisplay:YES];
}
이렇게하면보기가 OpenGL 그래픽을 포함하여 모든 업데이트를 다시 그립니다.
이것은 매우 일반적인 질문이며 결국 렌더링 엔진의 전체 구조를 설계하는 방법은 사용자에게 달려 있습니다. 이를 구현하는 방법을 알려주는 것이 많지만, 온라인으로 시작하는 책과 튜토리얼이 많이 있습니다.
게임 (이 경우 2D)에 적합한 간단한 구조를 천천히 만드는 방법에 대해 매우 중점을 두는 것이 here이지만, 이는 Win32 용이므로 적응할 필요가 있지만 일반적인 이해가 있다고 가정하면 프로그래밍의 경우, 그가 구축하고있는 일반적인 디자인을 이해할 수 있어야합니다.
디스플레이와 동기화 된 반복 그리기를 위해 디스플레이 링크를 사용해 볼 수 있습니다. 그런 다음
GLint swapInt = 1;
[yourContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
CVDisplayLinkSetOutputCallback(displayLink, &displayLinkCallback, self);
CGLContextObj cglContext = [yourContext CGLContextObj];
CGLPixelFormatObj cglPixelFormat = [[NSOpenGLView defaultPixelFormat] CGLPixelFormatObj];
CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);
CVDisplayLinkStart(displayLink);
, 콜백 프레임 당 한 번 실행 : 하나의 설정
static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
if ([self lockFocusIfCanDraw])
{
//Your drawing code
[self unlockFocus];
}
[pool drain];
return kCVReturnSuccess;
}
사용중인 IRGL 개체는 무엇입니까? 애플의 문서는 그것이 무엇인지 알지 못한다. – anthropomorphic
컨텍스트를 유지하는 데 사용하는 개체입니까? 내가'[IRGL gl]이 NSOpenGLContext (또는 그 서브 클래스)를 반환했다면, 그 부분을 그냥 무시해야합니까? – anthropomorphic
와! 그것은 내가 실수로 떠난 내 자신의 수업입니다. 당신이 원하는대로 당신의 컨텍스트를 얻으십시오. 이미 그림을 그리는 경우, 어딘가에 하나 있어야합니다. – andyvn22
- 1. 코코아로 작성된 완벽한 예제 애플리케이션 (Mac 데스크탑)
- 2. OpenGL 2d 예제 게임
- 3. 여기에 코코아로 이식 됨
- 4. 간단한 SOAP 예제
- 5. C++ 큐 - 간단한 예제
- 6. Proguard 간단한 예제 오류
- 7. window.requestFileSystem() 함수가있는 간단한 예제
- 8. 간단한 MediaElement 클래스 예제
- 9. Qt : Quazip의 간단한 예제
- 10. 간단한 RMI 콜백 예제
- 11. UINavigationController : 가장 간단한 예제
- 12. DispatcherHelper의 간단한 예제
- 13. 간단한 하이브 쿼리 예제?
- 14. 간단한 ASP.NET MVC 예제
- 15. 간단한 아이폰 XML 예제
- 16. 다각형으로 만든 자동차의 OpenGL 모자이크
- 17. 코코아로 그리기
- 18. 코코아로 웹 보관함 저장
- 19. 간단한 OpenGL 구현
- 20. 간단한 OpenGL 엔진
- 21. 간단한 OpenGL 설명
- 22. 코코아로 프로세스 종료
- 23. BSP 던전 생성의 간단한 예제
- 24. 공동 및 반항의 간단한 예제
- 25. 간단한 CoreData 예제 예외 발생
- 26. .NET 간단한 채팅 서버 예제
- 27. 예제 간단한 PHP MVC 프로젝트
- 28. 간단한 Java RMI의 java.lang.AbstractMethodError 예제
- 29. 간단한 C# Metro StreamSocket 예제
- 30. Vimeo onFinish 이벤트의 간단한 예제
이것은 고성능 드로잉을위한 좋은 옵션이 아닙니다. 실제로 디스플레이 링크를 사용하여 디스플레이에 적합한 시간에 드로잉하는지 확인해야합니다. – andyvn22