小编gma*_*man的帖子

对数深度缓冲区OpenGL

我已经设法在OpenGL中实现了一个对数深度缓冲区,主要是来自Outerra的文章(你可以在这里,这里这里阅读).但是,我遇到了一些问题,我不确定这些问题是否是使用对数深度缓冲区所固有的,或者是否有一些我无法想到的解决方法.

刚开始,这就是我在顶点着色器中计算对数深度的方法:

gl_Position = MVP * vec4(inPosition, 1.0);
gl_Position.z = log2(max(ZNEAR, 1.0 + gl_Position.w)) * FCOEF - 1.0;
flogz = 1.0 + gl_Position.w;
Run Code Online (Sandbox Code Playgroud)

这就是我在片段着色器中修复深度值的方法:

gl_FragDepth = log2(flogz) * HALF_FCOEF;
Run Code Online (Sandbox Code Playgroud)

在哪里ZNEAR = 0.0001,ZFAR = 1000000.0FCOEF = 2.0 / log2(ZFAR + 1.0),和HALF_FCOEF = 0.5 * FCOEF. C在我的例子中,是1.0,以简化我的代码并减少计算.

对于初学者来说,我对我获得的精确程度非常满意.使用正常的深度缓冲(znear = 0.1,zfar = 1000.0),我会朝视距的边缘进行相当多的z-fighting.现在,随着我的进一步znear:zfar,我已经将第二个地平面放置在第一个以下0.01个单位,我无法找到任何z-fighting,无论我将相机放大多远(我得到一点z-战斗时只有0.0001(0.1毫米),但是meh).

不过,我确实有一些问题/疑虑.

1)我得到的平面剪裁比我的普通深度缓冲更多,看起来很难看.它发生在逻辑上它确实不应该的情况下.以下是我的意思的几个屏幕截图:

剪掉地面. 剪裁网格.

这两种情况都是我用普通深度缓冲区没有遇到的情况,我宁愿看不到(特别是前者).编辑:问题1通过使用正式解决glEnable(GL_DEPTH_CLAMP).

2)为了使其工作,我需要写入gl_FragDepth.我试过不这样做,但结果是不可接受的.写入gl_FragDepth意味着我的显卡无法进行早期z优化.这将不可避免地让我爬上墙,所以我想尽快解决它.

3)我需要能够检索存储在深度缓冲区中的值(我已经有了帧缓冲区和纹理),然后将其转换为线性视图空间坐标.我真的不知道从哪里开始这个,我之前做过它的方式涉及逆投影矩阵,但我不能在这里真正做到这一点.有什么建议?

c++ opengl 3d depth-buffer

7
推荐指数
1
解决办法
4756
查看次数

Unity3D,如何在正确的线程中处理事件

我正在编写Unity3D脚本并使用网络库.数据准备就绪时,库会发出事件(调用委托).我的库读取该数据并发出尝试访问的事件GameObject但我得到了这些错误

CompareBaseObjectsInternal can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread 
when loading a scene. Don't use this function in the constructor or field 
initializers, instead move initialization code to the Awake or Start function.

ArgumentException: CompareBaseObjectsInternal can only be called from the main 
thread. Constructors and field initializers will be executed from the loading 
thread when loading a scene. Don't use this function in the constructor or …
Run Code Online (Sandbox Code Playgroud)

c# multithreading unity-game-engine

7
推荐指数
1
解决办法
1万
查看次数

在HTML5 Canvas上绘制1像素线的完整解决方案

在HTML5画布上绘制1像素线总是有问题的.(请参阅http://jsbin.com/voqubexu/1/edit?js,output)

绘制垂直/水平线的方法是x + 0.5,y + 0.5(当0 <lineWidth <1时,请参阅画布线行为).要在全球范围内做到这一点,ctx.translate(0.5, 0.5);这将是一个好主意.

但是,对于对角线,此方法不起作用.它总是给出2像素线.有没有办法阻止这种浏览器行为?如果没有,是否有可以解决此问题的软件包?

javascript line html5-canvas

7
推荐指数
1
解决办法
2826
查看次数

让meteor 0.9.2构建工作OSX - > Linux

我使用流星0.8.x但最近尝试升级到0.9.2.它在本地工作,但我没有运气meteor bundlemeteor build

首先我得到了这个错误

/var/projects/myproject/live/bundle/programs/server/boot.js:198
}).run();
   ^
Error: /var/projects/myproject/live/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at bindings (/var/projects/myproject/live/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
    at Object.<anonymous> (/var/projects/myproject/live/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/bcrypt.js:1:97)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情

  • 确保live/bundle/programs/server/node_modules在开始之前不存在.
  • 像README所说的那样跑npm install进来live/bundle/programs/server

我注意到的事情.有没有bcryptDEPS在live/bundle/programs/server/package.json.在0.8.2我有命令安装fibersbcrypt手动,但显然我不再需要光纤了.看起来我确实需要bcrypt它,但它位于与以往不同的位置.

我没有在文档中看到有关需要进行/var/projects/myproject/live/bundle/programs/server/npm/npm-bcrypt安装的任何内容bcrypt.我可以手动删除它,但我做错了什么?

就像我说的那样我已经安装了0.8.2需要它的地方programs/server.我应该手动安装program/server/npm/npm-bcrypt吗?我应该将其添加到我要忽略的地方列表中

我把它放在试试中,所以现在我得到了这个错误

/var/projects/myproject/live/bundle/programs/server/node_modules/fibers/future.js:173
                        throw(ex);
                              ^
Error: …
Run Code Online (Sandbox Code Playgroud)

linux macos node.js meteor

7
推荐指数
1
解决办法
1010
查看次数

了解2D纹理数组和3D纹理之间的区别?

如果我理解正确,如果我要设置TEXTURE_MIN_FILTERNEAREST那么sampler2DArray/ TEXTURE_2D_ARRAYsampler3D/ 之间没有太大的区别TEXTURE_3D

差异似乎是

  • GenerateMipmap 将交叉图层与3D纹理混合,而不是2D数组
  • Z传递给textureGLSL 的坐标在3D阵列中为0到1,在2D阵列中为0到N(深度).
  • 如果过滤不是NEAREST 3D将跨层混合,2D阵列将不会.

正确?

opengl opengl-es

7
推荐指数
2
解决办法
1436
查看次数

STL矢量擦除通过指针

理解(至少我认为我这样做)指针可以用作随机STL迭代器.

除非我将指针强制转换为迭代器,否则为什么以下代码无法编译?

vector<int> v{1, 2, 3};
v.erase(&v[0]);
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

7
推荐指数
1
解决办法
711
查看次数

配置 VSCode 以要求在退出时保存修改的文件

我想将 VS code 配置为与我用过的几乎所有编辑器一样工作,即仅在我告诉它时才保存,并在我尝试退出时要求保存修改的文件。

我已将自动保存设置为“关闭”

我已将“热退出”设置为“关闭”

因为如果我修改了文件并且选择退出,它就会立即退出,丢失所有更改。我可以发誓这曾经有效。

版本1.41.1

visual-studio-code

7
推荐指数
1
解决办法
5221
查看次数

如何使用大量单词生成字母网格

问题基本上是"如何为游戏生成一个好的网格'Boggle',包含大量单词",其中good被定义为包含5个或更多字母的大量单词.

Boggle是一款用骰子掷骰子的游戏,它们放在一个4x4的网格中.例:

H S A V
E N I S
K R G I
S O L A
Run Code Online (Sandbox Code Playgroud)

可以通过水平,垂直或对角连接字母来制作单词.在上面的示例网格中,您可以根据所使用的词典制作单词"VANISHERS","VANISHER","KNAVISH","ALIGNERS","SAVINGS","SINKERS"以及大约271个其他单词,例如"AS" ,"我","空气","SIN","是"等......

作为这个网格的一个例子

O V W C
T K Z O
Y N J H
D E I E
Run Code Online (Sandbox Code Playgroud)

只有~44个单词,其中只有2个> 4个字母长."TYNED"和"HINKY".

有很多类似的问题,但AFAICT不是这个问题.这显然是对"与朋友争抢"游戏的引用.

第一个解决方案是随机挑选字母,这个问题是,如果你意外地挑选所有辅音,就不会有任何语言.添加一些随机元音不足以保证一组好的单词.你可能只得到1到4个字母单词,而一个好的算法会选择一组字母,其中> 200个单词,多个单词> 7个字母.

我对任何算法都持开放态度.显然,我可以将代码写入暴力解决方案,找到每个可能的网格,然后用最常用的网格对网格进行排序,但这个简单的解决方案需要永远运行.

我可以想象各种启发式方法,比如选择一个长单词(8-16个字母),将这些字母随机地放在网格中,但实际上仍然可以制作单词,然后填充左边的空格.我怀疑这还不足以保证一套好词虽然我还没有尝试过.

该解决方案可能需要预处理字典以了解单词的常见部分.例如,以"ing"或"ers"或"ght"或"tion"或"land"结尾的所有单词.或者以某种方式将它们组织成共享字母图.也许经常插入某些字母组合,以便插入"ing"或"ers".

想法?

algorithm

6
推荐指数
1
解决办法
1460
查看次数

如何设置 defaultValue,value={this.props.value},并使用 React 更新文本输入的值?

概括:

我正在尝试使用 React 制作博客,但似乎在设置和更新文本字段时遇到了障碍。我有来自数据库的博客文本和用户名,并希望在文本窗口中为给定用户设置博客文本。然后当用户键入时,我也想更新该文本。

试图:

如果我设置我的 textarea value={this.props.name}它将正确设置该值但不会更新。如果我将它设置为更新,{this.state.value}那么它开始时为空白,但会正确更新。我可以找到有关如何设置默认值或更新值的示例。我无法弄清楚如何做到这两点。先感谢您。

应用程序内的 ClickScreen React 组件调用

<ClickScreen
    setClicks={this.setClicks}
    setUsername={this.setUsername}
    setBlog={this.setBlog}
    onLogout={this.onLogout}
    counter={this.state.counter}
    blogtext={this.state.blogtext}
    username={this.state.username}
/>
Run Code Online (Sandbox Code Playgroud)

在 ClickScreen 页面中的 BlogEntry React 组件调用:

<EditBlog name={this.props.blogtext} username={this.props.username} ></EditBlog>
Run Code Online (Sandbox Code Playgroud)

EditBlog 反应组件

// Allows a user to edit a blog entry.
var EditBlog = React.createClass({
  displayName: 'Editor',
  propTypes: {
    name: React.PropTypes.string.isRequired
  },
  getInitialState: function() { 
    console.log("getInitialState value: " + this.props.name);
    return {
      value: this.props.name,
    };
  },
  componentDidMount: function() {
         this.setState({value: this.props.name});
  },
  handleChange: function(event) { …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

6
推荐指数
2
解决办法
1万
查看次数

Mapbox GL 绘制线条和贝塞尔曲线

有什么方法可以在 Mapbox GL 内画线?例如,我需要绘制一些连接我的标记的线(直线或曲线)。使用 Mapbox,我可以使用 Arc.js,但我不知道 Mapbox GL 是否已经存在一些解决方案。

我找到了 mapbox-gl-draw ( https://bl.ocks.org/danswick/083a0b48c2cc78c4a08d ) 但它似乎只是一个在地图中使用的工具......但我没有看到任何用于使用 javascript 绘制的 API。

我还发现了这个 Tesspathy ( http://gree.github.io/tesspathy/ ),也许一种解决方案是使用它在地图的上下文中绘制。

你怎么认为?什么是最好的方法?谢谢!

javascript mapbox-gl mapbox-gl-js

6
推荐指数
1
解决办法
8647
查看次数