OpenGL, C++ -> 你如何在屏幕上布置对象?
OpenGL, C++ -> How do you lay out objects on screen?
当我编写java代码时,有像"grid bag"answers" box "这样的布局管理器。
我正在制作一款使用Cocos2D-X的游戏,并且遇到了在屏幕上布局对象的问题,所以它们不是硬编码的位置,而是基于布局。设备之间的像素差异导致了我的问题。
我知道Cocos2D有办法处理这个问题,但我的美术作品又大又高质量,我想根据设备来调整它的大小。
所以我想只是去本地OpenGL,但尝试,因为我可能无法弄清楚是否有布局管理器已经可用。
谁能讨论的方式一个可能布局对象在OpenGL?c++
OpenGL有Viewport的概念。这是屏幕/窗口坐标中的方框,你将绘制到其中。一旦你设置了视口,你现在就使用了所谓的相机坐标。
摄像机坐标从视口最左边的-1.0到最右边的1.0。同样的,对于Y坐标-1.0在最底部,1.0在最顶部。任何位于视窗之外的东西都不会被绘制。
你的模型可以存在于任何你喜欢的坐标系中。然后使用变换矩阵将对象转换为相机坐标。
不需要使用Opengl,而不是使用像素来定位你的艺术品;你可以根据屏幕百分比来定位它们。
如果是背景图像,可以通过CCSize size = CCDirector::....->getWinSize();X = size.width/2;Y = size.height/2;图像-> setPosition (x, y);如果图像的锚点在中心,则图像将居中。
如果你有很多艺术品,那就不一样了。
添加更多(更新)
retina = 2048×1536
normal = 1024×768
retinaWidth = normal.width * 2;//(2048)
retinaHeight = normal.height * 2;//(1536)
spriteInNormalRes{
x = 250px(which you will define with the percentage, in my first answer)
y = 264px(which you will define with the percentage, in my first answer)
}
spriteInRetinaRes{
x = spriteInNormalRes.x * 2
y = spriteInNormalRes.x * 2
}
你可以双击x,y来定位精灵。+自定义缩放,将它们调整为您想要的大小。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- C++鼠标单击时的屏幕截图不起作用
- 屏幕插入运算符<<的运算符过载问题
- 获取网格中心的屏幕位置
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何在屏幕上环绕x和y?
- GetDIBits 在屏幕捕获函数中多次迭代后返回零
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- GTKMM:拍摄绘图区域的屏幕截图?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- OpenGL, C++ -> 你如何在屏幕上布置对象?