小编Pat*_*ski的帖子

为什么以及何时不应该杀死一个线程?

我正在编写一个多线程套接字服务器,我需要确定.

关于线程的文章说我应该等待线程返回,而不是杀死它.但在某些情况下,用户的线程我想踢/禁止,将无法正常返回(例如,我开始发送大块数据并发送()阻止线程)所以我会需要杀死它.

为什么杀死线程函数是危险的,什么时候它们会崩溃整个应用程序?

c++ sockets networking multithreading

6
推荐指数
3
解决办法
2871
查看次数

实际上限制Box2D的最大速度

我想限制身体可以随身携带的最大速度.

问题是,即使我做了类似这样的回答建议:

/* after applying forces from input for example */
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize();//normalizes vector and returns length
if ( speed > maxSpeed ) 
    body->SetLinearVelocity( maxSpeed * vel );
Run Code Online (Sandbox Code Playgroud)

如果,例如,在夹紧速度之前,我正在对身体施加一些巨大的力量呢?即使线速度暂时限制为maxSpeed,在下一个时间步长Box2D也会考虑b2Body :: m_force值,并有效地移动我的身体比maxSpeed更快.

所以我想出了这个(必须将b2Body :: m_force移动到公共场所):

if ( speed > maxSpeed ) {
    body->SetLinearVelocity( maxSpeed * vel );
    body->m_force = b2Vec2(0, 0)
}
Run Code Online (Sandbox Code Playgroud)

然而,这仍然无法正确处理问题.

如果速度小于maxSpeed怎么办,那么条件不会被击中,但是m_force值仍然足够大以增加速度?

关键是我无法准确预测力将如何影响速度,因为我使用delta累加器踩踏,我不知道目前需要多少物理步骤.

有没有办法解决这个问题,而不仅仅是在Box2D源代码中积分位置之前直接限制速度?

c++ box2d

5
推荐指数
1
解决办法
2526
查看次数

在GLSL中使用glBindAttributeLocation的目的是什么?

可能重复:
OpenGL着色器的显式与自动属性位置绑定
为什么要使用glBindAttribLocation?

我试图调用glGetAttribLocation而不绑定任何attrib位置,它似乎工作.因此,如果我想要即时访问,我总是可以在数组中缓存attrib位置.那么使用glBindAttribLocation的目的是什么?

[OpenGL 2.0]

opengl shader glsl

4
推荐指数
1
解决办法
1595
查看次数

OpenGL中的视差映射毛刺

替代文字 替代文字

这是在将切换向量转换为顶点着色器后立即反转切向量的结果:

替代文字 替代文字

"影子"在错误的地方.

(它只有当我通过Y轴旋转它才有效,所以最后的图像似乎呈现出一个好的视差映射立方体)

我确定它不是一个切入的矢量或纹理协调问题

因为

我使用完全相同的切线计算函数和与工作演示中完全相同的立方体位置,法线和纹理坐标数据.毕竟,我将带有位置/ texcoord/normal/tangent数据的数组导出到.txt文件中,我看到了我的预期(我期望的是与工作演示相同的pos/tex/norm数据,包括计算的切线,我设法从工作演示导出).

下一个参数是,我将着色器代码复制到一个工作演示,它仍然有效.另一个是,我尝试了多种方法来渲染这个立方体.我尝试使用glVertexAttribPointer进行VBO,我尝试使用保存切线作为其他纹理坐标的VBO(如在演示中),我尝试使用glVertexAttrib4f进行DisplayList.结果是...... 完全相同.

高度贴图正确加载,我试图将其设置为漫反射贴图,看起来没问题.glGetError()给了我无错误和着色器编译日志这样说.

它可能是相机或初始状态.

也许发布初始化代码会有所帮助.

void CDepthBase::OpenGLSet() {

    glEnable( GL_TEXTURE_2D );
    glShadeModel( GL_SMOOTH );
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    glClearDepth( 1.0f );
 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glDepthFunc( GL_LEQUAL );
    glEnable(GL_DEPTH_TEST);



    glBlendFunc( GL_ONE, GL_ONE );
    GLfloat ratio;

    glViewport(0, 0, ResolutionWidth, ResolutionHeight);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, ResolutionWidth / (float)ResolutionHeight, 0.1f, 900.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    if (GLEW_OK != glewInit()) {
        MBX("Failed to init GLEW.", "Error");
    }
    if (glewIsSupported("GL_ARB_vertex_buffer_object")) {
        VBO_supported = true;


    } …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl

4
推荐指数
1
解决办法
3014
查看次数

2D中的GLSL渲染

(OpenGL 2.0)

我设法在opengl中做了一些不错的文本渲染,并决定将其设计为着色器.但是,在固定管道模式下看起来不错的渲染字体纹理在GLSL模式下看起来很不愉快.

在固定管道模式下,我没有看到GL_LINEAR和GL_NEAREST过滤之间有任何区别,这是因为纹理不需要真正过滤,因为我设置了正交投影并将四边形的宽度和高度与纹理坐标对齐.

现在,当我尝试使用着色器渲染它时,我可以看到一些非常糟糕的GL_NEAREST过滤瑕疵,而对于GL_LINEAR,纹理看起来太模糊了.

固定管道,satysfying,最佳质量(线性/最近之间无差异):

GLSL,最近(可见的工件,例如,查看分数字形):

在此输入图像描述

GLSL,线性(太模糊):

在此输入图像描述

着色器程序:

Vertex shader was successfully compiled to run on hardware.
Fragment shader was successfully compiled to run on hardware.
Fragment shader(s) linked, vertex shader(s) linked. 

------------------------------------------------------------------------------------------
 attribute vec2 at_Vertex;
 attribute vec2 at_Texcoord;
 varying vec2 texCoord;


 void main(void) {
     texCoord = at_Texcoord;
    gl_Position = mat4(0.00119617, 0, 0, 0, 0, 0.00195503, 0, 0, 0, 0, -1, 0, -1, -1, -0, 1)* vec4(at_Vertex.x, at_Vertex.y, 0, 1);
}

-----------------------------------------------------------------------------------------
 varying vec2 texCoord;
 uniform sampler2D diffuseMap;
 void …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl

4
推荐指数
1
解决办法
4760
查看次数

有效地将字符串插入另一个字符串

我有

char aa[] = { "Hello, !" };

char bb[] = { "World" };

如何使用cstring将bb最有效地插入aa?

c string insert character

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

定义自己的制服而不是重复使用GLSL中的内置OpenGL变量.为什么?

我正在写一个3D图形引擎.

我听说在着色器程序中使用太多的统一变量是不好的,因为它会导致减速.

另一方面,有人说重新使用像gl_TextureMatrix这样的内置变量是一种不好的做法.

我该如何组织创建着色器程序?我应该为每种机制编写大量的制服,还是可以依赖这些内置变量?例如,我应该使用内置的gl_LightSource还是使用光源信息定义自己的统一数组,那么我的场景中可以有更多的灯光?我也知道延迟渲染技术,但我想先做基本的多灯.

或者,哪些内置变量可以重复使用?

每种做法的优点是什么(dis)?

c++ opengl performance glsl

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

如何从h.264视频流中获取帧速率?

如何从h.264视频流中获取帧率和比特率?我可以从 SPS NAL 单元获取宽度和高度,但不能获取帧速率。

video video-streaming h.264

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

安置新的奇怪行为

不要问我我想要做什么,这只是一个快速测试,它的唯一目的是看看新的放置是否有问题.

我发现了一个问题,或者我只是误解了一些问题.

#include <vector>

using namespace std;

#define WORKS 
int main(int argc, char** argv) {
    vector<int>* pp = (vector<int>*)malloc(sizeof(vector<int>)*20);

#ifdef WORKS
    for(int i = 0; i < 20; ++i)
    new (pp+i) vector<int>;
#else
    new (pp) vector<int>[20];
#endif

    for(int i = 0; i < 20; ++i) 
        pp[i].~vector<int>();

}
Run Code Online (Sandbox Code Playgroud)

当你删除"#define WORKS"时,它会给你访问冲突,比如

    for(int i = 0; i < 20; ++i)
    new (pp+i) vector<int>;
Run Code Online (Sandbox Code Playgroud)

哪作得好,不同于

    new (pp) vector<int>[20];
Run Code Online (Sandbox Code Playgroud)

这是在破坏阶段抛出异常的原因.这里发生了什么?我正在使用Windows XP并使用VC++ Express 2010构建.

c++ placement-new

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