- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在做一个个人学习项目来制作 Minecraft克隆。除了一件事之外,它工作得很好。与 Minecraft 类似,我的地形在 Y 轴上堆叠了许多立方体,因此您可以向下挖掘。虽然我做了平截头体剔除,但这仍然意味着我无用地绘制了我下面的所有立方体层。立方体按 X、Y 和 Z 顺序排列(尽管仅在 1 个方向上,因此从技术上讲,它不是对相机的 Z 顺序)。我基本上从玩家的位置只添加指向玩家周围立方体的指针。然后我对这些进行截锥剔除。我不做八叉树 segmentation 。我想简单地不渲染玩家下方的图层,除非如果玩家向下看一个洞,这将不起作用。鉴于此,我如何避免渲染我下方的立方体,或者其他立方体隐藏的立方体。
谢谢
void CCubeGame::SetPlayerPosition()
{
PlayerPosition.x = Camera.x / 3;
PlayerPosition.y = ((Camera.y - 2.9) / 3) - 1;
PlayerPosition.z = Camera.z / 3;
}
void CCubeGame::SetCollids()
{
SetPlayerPosition();
int xamount = 70;
int zamount = 70;
int yamount = 17;
int xamountd = xamount * 2;
int zamountd = zamount * 2;
int yamountd = yamount * 2;
PlayerPosition.x -= xamount;
PlayerPosition.y -= yamount;
PlayerPosition.z -= zamount;
collids.clear();
CBox* tmp;
for(int i = 0; i < xamountd; ++i)
{
for(int j = yamountd; j > 0; --j)
{
for(int k = zamountd; k > 0; --k)
{
tmp = GetCube(PlayerPosition.x + i, PlayerPosition.y + j, PlayerPosition.z + k);
if(tmp != 0)
{
if(frustum.sphereInFrustum(tmp->center,25) != NULL)
{
collids.push_back(tmp);
}
}
}
}
}
最佳答案
这是我在编写自己的克隆时学到的东西:
我注意到的其他事情:
VBO 和显示列表具有非常相似的性能。给定的 OpenGL 实现很可能在内部使用 VBO 来存储显示列表。我跳过了顶点数组(一种客户端 VBO),所以我不确定这些。使用 VBO 的 ARB 扩展版本而不是 GL 1.5 标准,因为 Intel 驱动程序只实现扩展(尽管声称支持 1.5),而 nvidia 和 ATI 驱动程序不在乎。
纹理图集规则。如果您为每个面使用一种纹理,请查看图集的工作原理。
如果你想看我的代码,请在 github 上找到我。
关于c++ - 渲染大量立方体的剔除技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3693407/
我有一个充满体素的世界,假设我的世界是 320*320*96 体素。我的想法是将整个世界加载到我的视频卡的内存中,这样在将新的“ block ”传输到 GPU 时就不会损失性能。为显示体素世界而生成的
我不知道如何告诉 libgdx 在透明贴花后面绘制绿色球体。 这是我的问题的示例图片: 贴花创建:前两个参数是宽度和高度,最后一个标志是透明与否。 Decal.newDecal(count * (GU
我有 vector ,我想检索一个包含所有条目的 vector ,这些条目在所有输入 vector 中的任何地方都不重复。 #include int main() { std::vector a
我正在尝试为网站设置代码块的样式。容器 div 设置为垂直和水平溢出。问题是当它水平溢出时,斑马条纹背景颜色被剔除。我也尝试过使用背景图片,但它也剔除了它。为什么会这样?我该如何解决? 谢谢。 图片:
我应该在调用 Canvas 绘制方法之前剔除元素还是让 Canvas 处理剔除。我是否应该实现如下逻辑: if(circle.x+circle.radius>=0 || circle.x-circle
我刚刚发现 Azure Blob 存储上有 100 GB 的日志文件/失败请求日志,这些日志文件多年来一直在累积。是否有管理它们的工具或技术 - 目录结构很复杂,因此它不像按日期排序那么简单(我使用
我是一名优秀的程序员,十分优秀!