【问题标题】:OpenGL render order causing triangles in the foreground to be drawn in the backgroundOpenGL渲染顺序导致前景中的三角形在背景中绘制
【发布时间】:2011-11-14 00:11:59
【问题描述】:

我在一个世界中绘制我的三角形,三角形在背景中,但是当我走到它后面时,三角形不在前景中(应该是这样)。

我在 YouTube 上放了一段视频,显示问题here(请务必阅读说明)

编辑:

//create instance of camera class
mainCamera = [[Camera alloc]init];
//Tell window to log mouse events
[[self window] setAcceptsMouseMovedEvents:YES];
//Timer for updating frames
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1/30 target:self selector:@selector(redraw) userInfo:nil repeats:YES];
//keep timer running during event tracking
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSEventTrackingRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSModalPanelRunLoopMode];

glEnable(GL_DEPTH_TEST);
glClearDepth(1.0f);
glShadeModel(GL_SMOOTH);    
glEnable(GL_LINE_SMOOTH);


glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//self in this case is my view. The code below is getting the size of the view.
gluPerspective(45.0f, [self frame].size.width / [self frame].size.height, 1.0f, 1000.0f);   

glMatrixMode(GL_MODELVIEW);
//creating triangle objects

【问题讨论】:

  • 我认为紫色三角形在前景中,但是你让它有点透明,如果你改变它可能更容易分辨。
  • @JamesBlack:不,我发现另一个三角形正在绘制在它上面。深度测试

标签: cocoa opengl render


【解决方案1】:

您是否使用深度缓冲区创建了上下文?

您是否使用glEnable(GL_DEPTH_TEST); 激活深度测试?

您是否使用了适当的glDepthFunc 深度测试?

【讨论】:

  • 我激活了GL_DEPTH_TEST,不确定其他 2 个(对 OpenGL 来说有点新)
  • 看看我的代码,我确实有一个深度缓冲区(假设命令是glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • 我意识到没有 DepthFunc,所以我用 LEQUAL 添加了它,但仍然没有变化。
  • @ChaseWalden:你如何创建你的 OpenGL 上下文?你知道吗,你的 OpenGL 窗口?
  • 我使用苹果的可可框架来制作窗口。我的设置是启用深度测试、模型平滑和线条平滑。然后我做glClearDepth(1.0); 我设置了清除颜色。将矩阵模式切换为投影,设置透视,加载标识,然后将矩阵模式切换为模型视图。希望这是有道理的。 Apple 有一个预先构建的视图,它告诉 opengl 在哪里绘制,但我必须进行设置。
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多