我目前正在编写一个使用C++和Opengl实现Marching Cube的程序.
但是,我最好的参考仅来自http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/
在网络中,提供的代码用C语言编写.
我的问题是我不理解triTable和edgeTable
以及它们是如何相关的.
任何人都可以帮我解释或指导我将算法转换为代码?
我的手风琴在页面加载方面工作正常,但是当用户与页面上的某些元素交互时,我使用ajax来重建手风琴的HTML.然后,我尝试再次重新初始化手风琴
$('#accordion').accordion({
active: false,
autoHeight: false,
clearStyle: true,
collapsible: true,
header: 'h3'
});
Run Code Online (Sandbox Code Playgroud)
但是......它似乎没有采取.
新呈现的HTML块未应用手风琴规则.相反,它只是作为一个大型列表保持开放.
我甚至尝试使用setTimeout()重新调用手风琴,只是在回调中返回呈现的HTML之前尝试初始化.
在回调中呈现的HTML与页面加载的HTML完全相同(除了在Accordion方法生效时发生的DOM添加)
我控制在另一个域上呈现的iframe.有没有明确的方法来判断这个iframe是在父页面的上方还是下方呈现?显然,由于相同的原始策略限制,我无法访问父DOM .
例如,我尝试测量一个canvas或VML标签上的渲染速度,希望当标签不在屏幕上时它会更快.这不起作用 - 没有可辨别的速度差异.同样适用于DOM操作 - 似乎没有办法区分低于或高于折叠的回流/重绘操作.
闪光怎么样?我没有太多经验,但可以检查浏览器渲染闪存操作的速度有多快?或者Flash在DOM标准之外是否有任何'onvisible'事件?
我正试图弄清楚如何解决我的问题.我已经阅读http://groups.google.com/group/android-developers/browse_thread/thread/a2aac88a08cb56c2/b7dff4ba388cd664?lnk=gst&q=SurfaceView#b7dff4ba388cd664这些问题可以解答我的问题,但据我所知,这是一种"艰难的运气"答案.所以这是我的问题:
我正在以正常方式使用SurfaceView(lock/unlockAndPost)在表面改变时绘制我的游戏背景的位图(例如方向等)并且我渲染一系列移动圆(最多30个半径为约25.f).这些圈子的位置的x,y数据来自服务器,并且一切正常.所有圆形对象都存储在列表中,并且它们的位置会更新,以确保同步更新.然而,当我将这些圆圈绘制到屏幕上时(在canvas.lock()期间),大多数时候它们渲染得很好但偶尔(例如每隔几秒一次),一些圆圈似乎会撕裂或闪烁一帧.圆的数量总是不变的,所以这不是问题,并且没有对圆列表的并发修改(正如我所说,它是同步的).我甚至尝试将所有这些圆形绘制到每个渲染循环上的位图并将该位图绘制到主画布.这似乎只会影响性能(~13FPS,而不是直接将圆圈绘制到主画布时的〜30FPS).对不起,如果这些信息有点模糊,(试图让公司高兴:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好.我应该注意到来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要.对不起,如果这些信息有点模糊,(试图让公司高兴:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好.我应该注意到来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要.对不起,如果这些信息有点模糊,(试图让公司高兴:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好.我应该注意到来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要.
谢谢你的帮助!克里斯
编辑:
很公平.这是来自渲染线程的run().
@Override
public void run() {
Canvas c;
while (mRun) {
c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
panel.onDraw(c);
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
很标准的东西(几乎是月球着陆器的副本:p)
@Override
public void surfaceCreated(SurfaceHolder holder) {
mBackground= Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.RGB_565);
screenOrientation = getResources().getConfiguration().orientation;
if(thread.getState()== Thread.State.TERMINATED){
thread = new RenderThread(holder, this);
thread.setRunning(true);
thread.start();
}else {
thread.setRunning(true);
thread.start();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int …Run Code Online (Sandbox Code Playgroud) 我在视图中有一个电子邮件模板,我想编写一个ConsoleApplication进程,准备发送电子邮件.因为它是ConsoleApplication我无法访问控制器.是否可以呈现视图?
我只有Chrome的问题(到目前为止,我可以告诉).在这个网站上:www.elliott-web.com主页在加载时显示随机图像.几次重新加载后,我没有显示图像,但在检查http请求时,我看到图像在那里.同样,如果您在图像中向前和向后单击,则在投资组合页面上最终将不再显示图像.再次,看起来图像在那里,但它没有显示.想想也许它需要做Chrome的缓存?我不认为这是webkit,因为我在Safari中没有遇到这个问题.
之前有人见过这个吗?
我正在运行一个RoR应用程序(rails 2.3.8,ruby 1.8.7),应用程序在我的本地计算机上正常运行.但在生产时,日志显示以下错误:
ActionView::TemplateError (Missing template folder/_file_name.erb in view path app/views) on line #19 of app/views/layouts/main.rhtml:
19: <%= render :partial => "folder/file_name" -%>
Run Code Online (Sandbox Code Playgroud)
文件名存在folder/_file_name.html.erb,我试图重现生产环境上的问题,但没有任何运气,由于某种原因导轨应用程序folder/_file_name.erb在某些时候要求,而其他时候它搜索正确的文件folder/_file_name.html.erb.
有人可以向我解释发生了什么事吗?
对于.rhtml文件,rails应用程序请求.erb有时也会出现同样的情况,而其他人则获得正确的.rhtml文件
更新:
<%= render :partial => "shared/meta_tags" -%>
<%= render :partial => "shared/common_resources" -%>
<%= render :partial => 'shared/ads/oas' -%>
Run Code Online (Sandbox Code Playgroud)
关于这个问题的任何指示都会有所帮助,在此先感谢

我得到这个试图上呈现three.js所立方体,使用THREE.MeshBasicMaterial()和加载质感.
这是正常的吗?我该如何解决?
似乎很难找到有关如何在连续渲染过程的着色器中访问深度和模板缓冲区的信息.
在第一个渲染过程中,我不仅渲染颜色和深度信息,还使用模板操作来计算对象.我为此使用了一个多渲染目标FBO,附带了颜色缓冲区和组合深度模板缓冲区.所有这些都是纹理的形式(没有涉及渲染缓冲对象).
在第二个渲染过程中(当渲染到屏幕时),我想基于每个像素访问先前计算的模板索引(但不一定是我正在绘制的相同像素),类似于您想要访问的先前渲染的颜色缓冲区以应用一些后期处理效果.
但是我没能将第二遍中的深度模板纹理绑定到我的着色器程序作为制服.至少只从中读取黑色值,所以我猜它没有正确绑定.
是否可以将深度模板纹理绑定到纹理单元以用于着色器程序?使用"普通"采样器是否无法访问深度和模板纹理?是否可以使用一些"特殊"采样器?它取决于在纹理或类似设置上设置的插值模式吗?
如果没有,在这两个渲染过程之间将模板信息复制到单独的颜色纹理中的最佳(最快)方法是什么?可能涉及使用模板测试绘制单一颜色的第三个渲染过程(我在最终渲染过程中只需要模板缓冲区的二进制版本,确切地说,我需要测试值是否为零).
中间FBO使用的纹理设置如下:
// The textures for color information (GL_COLOR_ATTACHMENT*):
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
// The texture for depth and stencil information (GL_DEPTH_STENCIL_ATTACHMENT*):
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, w, h, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0);
Run Code Online (Sandbox Code Playgroud)
在第二个渲染过程中,我目前只尝试"调试"所有纹理的内容.因此,我使用以下值设置着色器:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, <texture>);
glUniform1i(texLocation, 0);
Run Code Online (Sandbox Code Playgroud)
让着色器程序只需将纹理复制到屏幕:
uniform sampler2D tex;
in vec2 texCoord;
out vec4 fragColor;
void main() {
fragColor = texture2D(tex, texCoord);
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
当<texture>上面指的是我的一个颜色纹理时,我看到在第一个渲染过程中渲染的颜色输出,这是我所期望的.
当<texture>上面指深度模板纹理时,着色器不做任何事情(我看到用于清除屏幕的颜色).
将深度模板纹理复制到CPU并进行检查时,我会按预期在打包的24 + 8位数据中看到深度和模板信息.
摘要
似乎在Windows窗口模式下,与OpenGL的vsync中断了。我尝试了不同的API(SDL,glfw,SFML),但都得到了相同的结果:虽然帧频受到限制(根据我尝试过的多个60 Hz设置的CPU测量,始终保持16-17 ms左右),并且实际上,CPU大多数时候都处于睡眠状态,经常跳过帧。视机器和CPU使用率(而非渲染)而定,这可能与将帧速率有效降低一半一样糟糕。此问题似乎与驱动程序无关。
如何在窗口模式下使用OpenGL在Windows上的Windows上具有有效的vsync或具有这些属性的类似效果(如果我忘记了一些值得注意的内容,或者如果某些内容不明智,请发表评论):
细节/一些研究
当我用谷歌搜索opengl vsync stutter或opengl vsync frame drop类似的查询时,我发现很多人都遇到了这个问题(或一个非常类似的问题),但是似乎并没有解决实际问题的连贯解决方案(在gamedev stackexchange上也有很多未充分回答的问题;也许多省力的论坛帖子)。
总结一下我的研究:似乎新版本Windows中使用的合成窗口管理器(DWM)会强制执行三倍缓冲,并且会干扰vsync。人们建议禁用DWM,不使用vsync或全屏显示,所有这些都不是解决原始问题的方法(FOOTNOTE1)。我还没有找到详细的解释,为什么三重缓冲会导致vsync出现此问题,或者为什么在技术上无法解决该问题。
但是:我还测试了即使在非常弱的PC上,在Linux上也不会发生这种情况。因此,在技术上(至少通常),对于基于OpenGL的硬件加速,必须启用功能vsync而不跳过帧。
另外,在Windows(启用vsync)上使用D3D而不是OpenGL时,这也不是问题。因此,从技术上讲,必须能够在Windows上运行vsync(我尝试了新的,旧的和非常旧的驱动程序以及不同的(旧的和新的)硬件,尽管我可用的所有硬件设置都是Intel + NVidia,所以我不这样做。不知道AMD / ATI会发生什么。
最后,肯定有用于Windows的软件,包括游戏,多媒体应用程序,创意作品,3D建模/渲染程序等,它们使用OpenGL并在窗口模式下正常工作,同时仍可以准确地渲染,而无需在CPU上等待,并且没有掉帧。
我注意到,当使用传统的渲染循环
while (true)
{
poll_all_events_in_event_queue();
process_things();
render();
}
Run Code Online (Sandbox Code Playgroud)
CPU在该循环中必须完成的工作量会影响停顿的行为。但是,这绝对不是CPU过载的问题,因为该问题也发生在一个人可以编写的最简单的程序之一(请参见下文)中,并且在一个功能强大的系统中,它什么也不做(该程序什么也不做)除了清除每帧上具有不同颜色的窗口,然后显示它)。
我还注意到,它似乎永远不会比跳过其他所有帧更糟(即,在我的测试中,在60 Hz的系统上可见帧率始终在30到60之间)。在运行程序时,您可能会观察到某种违反奈奎斯特采样定理的情况,该程序在奇数和偶数帧上将背景颜色更改为2种颜色,这使我相信某些内容未正确同步(即Windows或其OpenGL实现中的软件错误)。同样,就CPU而言,帧速率是坚如磐石的。另外,timeBeginPeriod在我的测试中没有明显的影响。
(FOOTNOTE1)但应注意,由于DWM,在窗口模式下不会发生撕裂(这是使用vsync的两个主要原因之一,另一个原因是使CPU处于最大可能的睡眠时间)而不丢失任何框架)。因此,对于我来说,有一个在应用程序层中实现vsync的解决方案是可以接受的。
但是,我认为唯一可行的方法是,有一种方法可以明确(准确)地等待页面翻转发生(可能会发生超时或取消),或者查询在以下情况下设置的非粘性标志:页面被翻转(以不强制刷新整个异步渲染管道的方式,例如glGetError,这种方式),并且我也没有找到一种方法来执行。
这是一些代码,可以运行一个快速的示例来演示此问题(使用SFML,我发现上班时最痛苦)。
您应该看到均匀的闪烁。如果您看到同一颜色(黑色或紫色)超过一帧,那就不好了。
(这会以屏幕的刷新率闪烁屏幕,因此可能出现癫痫警告):
// g++ TEST_TEST_TEST.cpp -lsfml-system -lsfml-window -lsfml-graphics -lGL
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include <iostream>
int main()
{
// create …Run Code Online (Sandbox Code Playgroud)