Articles of 渲染

SDL2基于帧的渲染

是否有可能在屏幕上呈现特定的对象一定数量的帧,而不必延迟渲染? 谢谢

碰到glDrawElements

这里是我初始化VAO,顶点属性(也是主要的VBO)和EBO(即时通讯使用我自己的包装类为这些“数据缓冲区”隐藏一些APIfunction,使生活更轻松的代码,所以我不认为这个问题会在没有任何问题的情况下进入generics类) void initVAOManager(const bool& ebo) { if (_vaoID == 0) glGenVertexArrays(1, &_vaoID); glBindVertexArray(_vaoID); /** Here is the main data buffer (positions,colors,UVs) If it doesn´t exist a new one is created **/ if (!_mainBuffer) _mainBuffer = new DataBuffer<T>(GL_ARRAY_BUFFER); _mainBuffer->bindBuffer(); if (!_eboBuffer && ebo) { _eboBuffer = new DataBuffer<eboData>(GL_ELEMENT_ARRAY_BUFFER); _eboBuffer->bindBuffer(); } //This is the position glEnableVertexAttribArray(0); glVertexAttribPointer(0, […]

如何在UI上渲染游戏?

我在2D工作。 我已经设置了2台摄像机。 一个用于用户界面,另一个用于游戏。 我需要在游戏对象之前呈现UI(超过游戏玩法)。 我想在不使用世界空间canvas的情况下实现这一点,因为它需要随着相机一起缩放其他设备。 用户界面可以使用比游戏相机更深的游戏玩法。 而且因为深度只有没有纯色,所以一切运作良好。 但是你不能将游戏相机设置为深度,因为它没有渲染正确的东西,它不能清除我猜测的渲染纹理。 所以这是如果游戏相机设置为只有深度会发生什么。 这是游戏相机设置为纯色时发生的情况,UI Camera具有更大的深度。 你可以看到环被UI箭头所覆盖。 如果UI相机深度比游戏相机(纯色)低。 这将全部被游戏机相机所覆盖,甚至不显示UI。 这些是我的设置。 在没有使用World Space Canvas模式的情况下,有没有办法在Unity中实现这一点?

3D模型呈现在半色调

我正在写一个3D渲染器,可以渲染3D模型,就好像它们是用半色调绘制的一样。 function明智我不需要任何花哨 – 没有颜色,只是纯粹的3D几何和基本的照明,就像这里: 图片来源: https : //blenderartists.org/forum/showthread.php?438820-Suzanne-Sketch 笔记: 过去我已经写了一个基本的3D渲染器,但是在着色器方面我真的缺乏经验(再次,我知道基础知识),我完全不知道从哪里开始。 示例图像已在Blender中创建,但是我正在编写自定义渲染器。 这不是“ 我怎样才能使着色效果看起来像铅笔素描? ”,因为我的input是一个3D模型,而链接的问题中的OP使用了一个图像。

细分二十面体hex/ Pent网格高效渲染?

如何在细分的二十面体上显示hex/五边形网格? 我有一个细分的二十面体星球作为战略游戏的“板子”。 根据用户input到地图生成器的大小,它通常具有几千到几十万个瓦片之间的任何地方。 基本上,我不能蛮力这样做,并做一个简单的边界和深度检查,因为瓷砖的数量。 为了简单起见,我将网格存储在二维数组中。 我明白,在2D地图上,只需执行如下操作即可绘制hex地图: for(int x = cameraX; x < viewportWidth; x++) { for(int y = cameraY; y < viewportHeight; y++) { if(x % 2 == 0) //For the 2D array to work properly we have to offset every other row by +1 world coordinate (assuming each tile is 1*1 world coordinates) grid[x][y].render(x+tile_width, […]

如何制作与Housemarque的Nex Machina类似的粉碎效果?

玩了Nex Machina一段时间之后,把怪物和场景变成立方体的震撼效果真让我着迷,我不能抱着我的好奇心来探索他们是如何做到的。 我曾尝试谷歌一些相关的材料,但我只发现了一个介绍了Nex Machina的游戏引擎理论的video和一个博客文章 ,简要地展示和介绍了他们如何做到这一点。 根据我所收集的资料,这种破碎效果是通过光线追踪和变形技术来实现的,但我不知道他们究竟是如何实现这一点的。 我在这里find了一个“光线追踪变形”的解决scheme,但很显然,它不能在Nex Machina中实现“立方体”效果。 由于没有从Housemarque发现GDC谈话或技术博客,我们只能猜测他们是如何实现这一点的。 欢迎任何讨论!

3D巨大的网格渲染

我正在编写一个程序,作为input,我有一个巨大的(10 ^ 6元素)三维网格(六角形元素),我想要实时渲染它,但不像游戏一样实时。 它可以显示场景并进行旋转,缩放和平移。 最重要的一点是,我不需要任何特殊的灯光,也不需要任何阴影。 而且,渲染的对象是静态的,它们不会移动。 我的物体没有任何纹理。 我已经阅读了关于ray tracing方法,但是我不知道是否有用于此目的的好的库,或者我必须自己实现所有的东西。 非常感谢。

OpenGL:处理碰撞检测和顶点数据的建议?

我正在考虑如何在我的OpenGL应用程序中进行碰撞检测,并得出结论,我应该保留几何数据的两个副本。 1) 第一个副本 :仅用于OpenGL渲染目的。这可以保存为VBO,顶点索引(保存在GPU中?) 2) 第二个副本 :我保存在客户端(在一个class,说3DEntity),我进行所有testing,包括边界框碰撞testing,光线投射, 所以,在我加载一个网格数据(比如说一个OBJ文件)之后,首先准备好“第一个副本”,然后用“顶点索引”准备第二个副本。 (例如:如果我的网格是一个简单的立方体,我的“第一个副本”将有8个顶点,并使用顶点索引来正确渲染它。但是我的“第二个副本”将总共有36个顶点。因为我必须做ray-铸造三角形) 我在“3DEntity”中保留了一个转换matrix,以保持我的“3d实体”的Position,Rotation..etc等状态。 所以在伪代码中 class 3DEntity { Vertex[] verticesForPhysics; Matrix tranformationMatrix; } 我保持“verticesForPhysics”值固定(意思是,它始终在模型坐标系中)。所以当我想要移动时,旋转我的实体,我只是改变“transformationMatrix”。 当进行像碰撞检测这样的testing时,我再次通过“verticesForPhysics”乘以“transformationMatrix”给出世界坐标中的顶点来临时复制顶点。 Vertex[] verticesForPhysicsInWorld=transformationMatrix * verticesForPhysics; 现在我使用这些“verticesForPhysicsInWorld”来做我的testing。 这是处理这个问题的正确方法吗? 其他OpenGL游戏引擎如何处理? 我担心数据冗余,保留两个副本,并为碰撞检测testing制作另一个临时副本

游戏线程,渲染线程,animation/逆向运动学和同步

在一个带有游戏逻辑线程和渲染线程的multithreading设置中,带有一些反向运动加上的皮肤网格animation等animation是如何工作的? 游戏逻辑线程是否更新animation中的时间T,然后渲染线程推断谁拥有皮肤网格animation,游戏逻辑线程或渲染线程? 如果存储在场景图中,它是如何存储的? 当游戏逻辑更新时,它会执行皮肤网格animation的计算和逆运动学的计算,然后将结果直接存储在场景图中,或者间接存储结果,渲染线程执行计算?

渲染循环问题(Java)

我对编程并不陌生,但对于游戏编程来说我还是比较新的。 我正在尝试创建一个Breakout的版本,作为一个很好的基本游戏,让我自己介绍到2D游戏编程。 我目前有一个类结构如下: BreakoutRunner类是JFrame的基本初始化东西。 它包含一个BreakoutView,它是一个包含更新逻辑的JPanel和渲染器。 首先,这是一个正确的结构? 其次,我有问题得到这个正常工作。 在BreakoutView中,我有以下的构造函数: public BreakoutView() { setPreferredSize(new Dimension(WIDTH, HEIGHT)); setBackground(Color.black); state = GameState.PLAYING; gameBlocks = new Block[NUM_ROWS][BLOCK_ROWS]; gameBall = new Ball(WIDTH / 2, HEIGHT /2); player = new Player(WIDTH / 2); initializeGrid(); //start(); } 我有start()方法,因为它导致了问题,所以被评论。 随着线评论,游戏看起来像这样: 但是,当我拿走评论,并添加start()方法时,问题就出现了。 启动方法: private void start() { while(state == GameState.PLAYING) { update(); repaint(); try { […]