我已经设法在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.0和FCOEF = 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)我需要能够检索存储在深度缓冲区中的值(我已经有了帧缓冲区和纹理),然后将其转换为线性视图空间坐标.我真的不知道从哪里开始这个,我之前做过它的方式涉及逆投影矩阵,但我不能在这里真正做到这一点.有什么建议?
我正在编写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) 在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像素线.有没有办法阻止这种浏览器行为?如果没有,是否有可以解决此问题的软件包?
我使用流星0.8.x但最近尝试升级到0.9.2.它在本地工作,但我没有运气meteor bundle或meteor 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在开始之前不存在.npm install进来live/bundle/programs/server我注意到的事情.有没有bcryptDEPS在live/bundle/programs/server/package.json.在0.8.2我有命令安装fibers和bcrypt手动,但显然我不再需要光纤了.看起来我确实需要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) 如果我理解正确,如果我要设置TEXTURE_MIN_FILTER为NEAREST那么sampler2DArray/ TEXTURE_2D_ARRAY和sampler3D/ 之间没有太大的区别TEXTURE_3D
差异似乎是
GenerateMipmap 将交叉图层与3D纹理混合,而不是2D数组Z传递给textureGLSL 的坐标在3D阵列中为0到1,在2D阵列中为0到N(深度).正确?
我理解(至少我认为我这样做)指针可以用作随机STL迭代器.
除非我将指针强制转换为迭代器,否则为什么以下代码无法编译?
vector<int> v{1, 2, 3};
v.erase(&v[0]);
Run Code Online (Sandbox Code Playgroud) 我想将 VS code 配置为与我用过的几乎所有编辑器一样工作,即仅在我告诉它时才保存,并在我尝试退出时要求保存修改的文件。
我已将自动保存设置为“关闭”
我已将“热退出”设置为“关闭”
因为如果我修改了文件并且选择退出,它就会立即退出,丢失所有更改。我可以发誓这曾经有效。
版本1.41.1
问题基本上是"如何为游戏生成一个好的网格'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".
想法?
概括:
我正在尝试使用 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) 有什么方法可以在 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 ×3
c++ ×2
opengl ×2
3d ×1
algorithm ×1
c# ×1
depth-buffer ×1
html5-canvas ×1
iterator ×1
line ×1
linux ×1
macos ×1
mapbox-gl ×1
mapbox-gl-js ×1
meteor ×1
node.js ×1
opengl-es ×1
reactjs ×1
stl ×1