我正在研究构建游戏内容的关卡生成器应用程序。 iPad屏幕的一部分是一个专用的控制面板,其余部分是正在构建的级别的图形表示。我需要放大和缩小水平区域而不影响控制面板。我使用OpenGL ES进行渲染。任何人都可以在这里给我一些指点吗?我是否可以用不同的视口分割屏幕,然后缩放一个?iOS - 仅使用openGL ES缩放显示的一部分
1
A
回答
1
如果您使用OpenGL ES(假定为2.0)进行渲染,那么您完全可以控制渲染的缩放比例。您可以决定应用比例尺的位置,然后决定如何渲染。
我猜你的代码目前看起来有点像这样。
Get view scale
Apply view scale to view matrix
Render level
Render control panel
当它看起来像这样。
Render control panel
Get view scale
Apply view scale to view matrix
Render level
矩阵(或者你有任何转变的东西),你使用的转化水平应该不用于转化的控制面板。
2
诀窍是了解OpenGL是一个状态机,并没有像“全局初始化”这样的事情。只要你遵循写得不好的教程,并在窗口调整大小处理程序中设置投影矩阵,你就会被卡住。你真正做的是这样的:
void render_perspective_scene(void);
void render_ortho_scene(void);
void render_HUD();
void display()
{
float const aspect = (float)win_width/(float)win_height;
glViewport(0,0,win_width,win_height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-aspect*near/lens, aspect*near/lens, -near/lens, near/lens, near, far);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
render_perspective_scene();
glEnable(GL_SCISSOR_TEST);
// just clear the depth buffer, so that everything that's
// drawn next will overlay the previously rendered scene.
glClear(GL_DEPTH_BUFFER_BIT);
glViewport(ortho_x, ortho_y, ortho_width, ortho_height);
glScissor(ortho_x, ortho_y, ortho_width, ortho_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect*scale, aspect*scale, -scale, scale, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
render_ortho_scene();
// Same for the HUD, only that we render
// that one in pixel coordinates.
glViewport(hud_x, hud_y, hud_width, hud_height);
glScissor(hud_x, hud_y, hud_width, hud_height);
glClear(GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, win_width, 0, win_height, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
render_HUD();
}
最重要的部分是,你设置视口/剪刀和之前渲染的子部分的拉丝处理程序中的投影。
相关问题
- 1. iOS - 使用OpenGL ES 2.0显示文本
- 2. 使用OpenGL ES缩放和滑动
- 3. 使用glDrawElements的OpenGL ES 2.0渲染仅显示一个VBO
- 4. 的OpenGL ES FBO缩放
- 5. 放大/缩小OpenGL ES
- 6. 放大和缩小OpenGl ES
- 7. 缩放OpenGL ES的帧缓冲区的
- 8. OpenGL es放大到touchPoint(iOS)
- 9. OpenGL ES 2.0的捏和缩放
- 10. OpenGL ES 2.0缩放不起作用
- 11. iOS上的OpenGL ES和外部显示器
- 12. OpenGL ES 2.0 - 如何仅使用着色器绘制纹理的一部分?
- 13. iOS OpenGL ES - 仅根据请求绘制
- 14. 如何使用iOS显示多个OpenGL ES 2.0视图?
- 15. IOS和缩放显示
- 16. OpenGL Es 2纹理缩放问题
- 17. OpenGL ES像素艺术 - 缩放
- 18. iOS OpenGL ES在2D世界中执行缩放变焦
- 19. 放大Opengl ES
- 20. OpenGL ES 2.0以多种分辨率缩放
- 21. iOS OpenGL ES与Android OpenGL ES兼容?
- 22. OpenGL ES纹理部分删除
- 23. 使用glDrawTexfOES进行Android OpenGL ES缩放可能吗?
- 24. iOS - MKMapView仅显示某个缩放级别的注释
- 25. 如何在Android OpenGL ES中应用拖放和缩放比例
- 26. 禁用opengl es纹理ios
- 27. 在OpenGL ES中隐藏图像部分
- 28. Android OpenGL ES 1:使用四合一填充显示器
- 29. iOS 360视频使用OpenGL ES 2.0
- 30. OpenGL ES示例不使用EAGLContext